Веб-просмотр Android не может отображать видео youtube, встроенное через iframe

Речь идет о загрузке видео youtube с использованием новейшего встроенного формата (iframe) внутри webview.

Пример формата вставки iframe

<iframe width="637" height="358" src="http://www.youtube.com/embed/olC42gO-Ln4?fs=1&amp;feature=oembed" frameborder="0" allowfullscreen=""></iframe> 

Проверьте код на устройствах Android 2.3.3 и 3.2 (HTC Desire & Asus Transformer), веб-просмотр будет отображать только черный прямоугольник.

Я пробовал аналогичную вставку из vimeo

 <iframe src="http://player.vimeo.com/video/35693267" width="640" height="360" frameborder="0"></iframe> 

В 2.3 воспроизводится видео
В 3.2 черный прямоугольник вспыхнул и исчез, область iframe пуста.

Наконец, если используется старый формат вставки (с использованием тега объекта), видео отображается правильно внутри webview в 2.3.3 и 3.2.

Я проверил связанные вопросы и добавил

 android:hardwareAccelerated="true" 

В теге приложения и / или активности, но по-прежнему нет видео в обоих устройствах 2.3 и 3.2.

Это большая проблема, потому что больше веб-сайтов теперь использует новейший формат (iframe) для встраивания своих видео в YouTube. Android / Youtube Team, пожалуйста, взгляните на эту проблему.

Solutions Collecting From Web of "Веб-просмотр Android не может отображать видео youtube, встроенное через iframe"

Android-браузеры абсолютно бесполезны, что происходит с воспроизведением видео и вложением. Он просто не работает через устройства. Попытка заставить его работать – это просто трата вашего времени. Мое предложение состоит в том, что вы не пытаетесь включить <iframe> а просто предоставляете миниатюру видео, которое напрямую ссылается на страницу YouTube или файл h264.

Предыдущее обсуждение, с возможным решением.

Оптимизация WebViews на Android в Google Reader-esque

Если вы хотите воспроизводить видео в своем WebView вам НЕОБХОДИМО загружать данные базовым URL-адресом!

Не делайте этого:

 mContentWebView.loadDataWithBaseURL(null, webViewContentString, "text/html", "UTF-8", null); 

ДЕЛАТЬ ЭТО ВМЕСТО :

  //veryVeryVery important for playing the videos! mContentWebView.loadDataWithBaseURL(theBaseUrl, webViewConentString, "text/html", "UTF-8", null); 

Базовый URL будет чем-то вроде «оригинального» URL-адреса того, что вы показываете в своем WebView . Итак, скажем, вы создаете читателя WebView's базовый url WebView's URL-адресом оригинальной истории.

Удачи!

Также не забудьте настроить свой WebView … Например …

  mContentWebView.setWebChromeClient(new WebChromeClient()); mContentWebView.getSettings().setPluginState(WebSettings.PluginState.ON); mContentWebView.getSettings().setPluginState(WebSettings.PluginState.ON_DEMAND); mContentWebView.setWebViewClient(new WebViewClient()); mContentWebView.getSettings().setJavaScriptEnabled(true); 

Вам необходимо включить аппаратное ускорение в манифесте (доступно только на SDK 14 и выше).

Ex. Аппаратное ускорение включено:

 <application android:name="com.example.app" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" android:hardwareAccelerated="true"> <!-- hardwareAccelerated requires SDK 14 --> ... </application> 

Поддержка видео HTML5

Чтобы поддерживать встроенное видео HTML5 в вашем приложении, вам необходимо включить аппаратное ускорение и установить WebChromeClient .

http://developer.android.com/reference/android/webkit/WebView.html

(Надеюсь, что это поможет кому-то)

Я бы предложил использовать некоторый код для обнаружения среды пользователя … использовать код iframe только для ios-устройств (iphone, ipod, ipad) и использовать старый код для всех остальных.

Этот код полностью соответствует различным устройствам

 webView.setInitialScale(1); webView.setWebChromeClient(new WebChromeClient()); webView.getSettings().setAllowFileAccess(true); webView.getSettings().setPluginState(WebSettings.PluginState.ON); webView.getSettings().setPluginState(WebSettings.PluginState.ON_DEMAND); webView.setWebViewClient(new WebViewClient()); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setLoadWithOverviewMode(true); webView.getSettings().setUseWideViewPort(true); DisplayMetrics displaymetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); int height = displaymetrics.heightPixels; int width = displaymetrics.widthPixels; Log.e(SimpleBillsConstants.SIMPLE_BILLS, width + "-" + height); String data_html = "<!DOCTYPE html><html> <head> <meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"target-densitydpi=high-dpi\" /> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"> <link rel=\"stylesheet\" media=\"screen and (-webkit-device-pixel-ratio:1.5)\" href=\"hdpi.css\" /></head> <body style=\"background:black;margin:0 0 0 0; padding:0 0 0 0;\"> <iframe style=\"background:black;\" width=' "+width+"' height='"+height+"' src=\""+ VIDEO_URL+"\" frameborder=\"0\"></iframe> </body> </html> "; webView.loadDataWithBaseURL("http://vimeo.com", data_html, "text/html", "UTF-8", null); 

Это сработало для меня – код открывает сайт YouTube и может воспроизводить его видео в WebView:

 mWebView = (WebView) findViewById(R.id.webview); WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); String frameVideo = "<html><body>Youtube video .. <br> <iframe width=\"320\" height=\"315\" src=\"https://www.youtube.com/\" frameborder=\"0\" allowfullscreen></iframe></body></html>"; mWebView.loadData(frameVideo, "text/html", "utf-8"); mWebView.loadUrl("http://www.youtube.com/"); mWebView.setWebViewClient(new WebViewClient());