Веб-приложение Android не может отобразить видео YouTube, встроенное через iframe - PullRequest
14 голосов
/ 27 января 2012

Речь идет о загрузке видео YouTube с использованием последнего встроенного формата (iframe) внутри веб-просмотра.

Пример формата встраивания 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, пожалуйста, взгляните на эту проблему.

Ответы [ 6 ]

11 голосов
/ 28 января 2012

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

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

Оптимизация веб-представлений в Google Reader для Android

10 голосов
/ 06 июля 2014

Если вы хотите воспроизводить видео на вашем 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. Допустим, вы создаете программу чтения новостей, базовый 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 голосов
/ 29 августа 2012

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

Для поддержки встроенного HTML5-видео в вашем приложении вам необходимо включить аппаратное ускорение и установить WebChromeClient .

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

(надеюсь, это кому-нибудь поможет)

0 голосов
/ 25 апреля 2016

Это сработало для меня - код открывает сайт 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());
0 голосов
/ 08 сентября 2015

Этот код точно подходит для другого устройства

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);
0 голосов
/ 30 января 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...