Подтвердить что ты не робот

Веб-просмотр 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 пуста.

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

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

android:hardwareAccelerated="true"

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

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

4b9b3361

Ответ 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());