Веб-просмотр Android не может отображать видео в YouTube с помощью iframe
Речь идет о загрузке видео youtube с использованием новейшего встроенного формата (iframe) внутри webview.
Пример форматирования iframe
<iframe width="637" height="358" src="http://www.youtube.com/embed/olC42gO-Ln4?fs=1&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 пуста.
Наконец, если используется старый формат вставки (с использованием тега объекта), видео отображается правильно внутри веб-обозревателя в версиях 2.3.3 и 3.2.
Я проверил связанные вопросы и добавил
android:hardwareAccelerated="true"
в теге приложения и/или активности, но по-прежнему нет видео в устройствах 2.3 и 3.2.
Это большая проблема, потому что больше веб-сайтов теперь используют новейший формат (iframe) для встраивания своих видеороликов YouTube. Android/Youtube Team, пожалуйста, взгляните на эту проблему.
Ответы
Ответ 1
Android-браузеры абсолютно бесполезны, что происходит с воспроизведением видео и вложением. Он просто не работает через устройства. Попытка заставить его работать - это просто трата вашего времени. Мое предложение состоит в том, что вы не пытаетесь включить <iframe>
, а просто предоставляете миниатюру видео, которое напрямую ссылается на страницу YouTube или файл h264.
Предыдущее обсуждение с возможным решением.
Google Reader-esque оптимизация WebViews на Android
Ответ 2
Если вы хотите воспроизводить видео в своем WebView
, вам НЕОБХОДИМО загружать данные базовым URL-адресом!
DONT выполните следующее:
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
. Итак, скажем, вы создаете читателя новостей, базовый 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>
Ответ 3
Поддержка HTML5 Видео
Чтобы поддерживать встроенное видео HTML5 в вашем приложении, вам нужно аппаратное ускорение включить, а установить WebChromeClient.
http://developer.android.com/reference/android/webkit/WebView.html
(Надеюсь, что это поможет кому-то)
Ответ 4
Я бы предложил использовать некоторый код для обнаружения среды пользователя... использовать код iframe только для ios-устройств (iphone, ipod, ipad) и использовать старый код для всех остальных.
Ответ 5
Этот код идеально подходит для разных устройств
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);
Ответ 6
Это сработало для меня - код открывает сайт 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());