Загрузка видео Youtube через i-frame в веб-обозревателе Android

Я хочу загрузить видео youtube в веб-браузер Android с помощью i-frame

вот мой макет Xml

   

Мой код

 public class WebTube extends Activity { private WebView wv; String html = "\n" + ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); wv = (WebView)findViewById(R.id.webView); wv.getSettings().setJavaScriptEnabled(true); wv.loadDataWithBaseURL("", html , "text/html", "UTF-8", ""); } } 

Также я предоставляю

& android:hardwareAccelerated="true"

когда я запускаю это, я не получил никакого результата, просто показав черный экран

Я попробовал это. но это предоставит мне видео на .3gp Quality . но мне нужны видео с youtube по оригинальному качеству. Вот почему я использую iframe Кто-нибудь может мне помочь?

Я пытаюсь использовать код и вместо iframe . но это не решило мою проблему.

когда я запускаю этот код на эмуляторе, он показывает

Перед нажатием кнопки воспроизведения

Результат iframe на эмуляторе

После нажатия кнопки воспроизведения на видео

Результат iframe на эмуляторе при нажатии кнопки воспроизведения

я думаю, что мы не можем передавать видео на эмулятор, так как это виртуальное устройство

Но когда я запускаю это по телефону, это даже не показывает этот результат.

Я пытаюсь создать фрейм с прикрепленным к нему документом, отлично работает на телефоне, а также в эмуляторе

 String customHtml = ""; 

Поэтому, пожалуйста, помогите мне загрузить видео в этот кадр. можете ли вы сказать мне, что пошло не так в моем коде

(я запускаю его по телефону). Может кто-нибудь сказать мне, в чем проблема? также будет работать iframe на Android 2.1?

кто-нибудь пытался Youtube Api ?

Как указано в документации по веб-интерфейсу Android ,

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

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

Для полноэкранной поддержки необходимы реализации onShowCustomView (View, WebChromeClient.CustomViewCallback) и onHideCustomView (), getVideoLoadingProgressView () является необязательным.

У меня есть полностью настроенный ifram для просмотра youtube

 public class Act_VideoPlayer extends Activity { WebView webView; ProgressBar progressBar; ImageView back_btn; String video_url = "KK9bwTlAvgo", html = ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.full_screen_youtube_video_screen); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); back_btn = (ImageView) findViewById(R.id.full_videoview_btn); back_btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { webView.loadData("", "text/html", "UTF-8"); finish(); } }); webView = (WebView) findViewById(R.id.webView); progressBar = (ProgressBar) findViewById(R.id.progressBar); if (video_url.equalsIgnoreCase("")) { finish(); return; } WebSettings ws = webView.getSettings(); ws.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); ws.setPluginState(WebSettings.PluginState.ON); ws.setJavaScriptEnabled(true); webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); webView.reload(); if (networkUtil.isConnectingToInternet(Act_VideoPlayer.this)) { html = getHTML(video_url); } else { html = "" + getResources().getString(R.string.The_internet_connection_appears_to_be_offline); CustomToast.animRedTextMethod(Act_VideoPlayer.this, getResources().getString(R.string.The_internet_connection_appears_to_be_offline)); } webView.loadData(html, "text/html", "UTF-8"); WebClientClass webViewClient = new WebClientClass(progressBar); webView.setWebViewClient(webViewClient); WebChromeClient webChromeClient = new WebChromeClient(); webView.setWebChromeClient(webChromeClient); } @Override protected void onDestroy() { super.onDestroy(); try { webView.loadData("", "text/html", "UTF-8"); } catch (Exception e) { e.printStackTrace(); } } @Override public void onBackPressed() { super.onBackPressed(); try { webView.loadData("", "text/html", "UTF-8"); finish(); } catch (Exception e) { e.printStackTrace(); } } public class WebClientClass extends WebViewClient { ProgressBar ProgressBar = null; WebClientClass(ProgressBar progressBar) { ProgressBar = progressBar; } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); ProgressBar.setVisibility(View.VISIBLE); } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); ProgressBar.setVisibility(View.GONE); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { LogShowHide.LogShowHideMethod("webview-click :", "" + url.toString()); view.loadUrl(getHTML(video_url)); return true; } } public String getHTML(String videoId) { String html = "\n"; LogShowHide.LogShowHideMethod("video-id from html url= ", "" + html); return html; } } 

Это сработало для меня:

 WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); String frameVideo = "Youtube video .. 
"; mWebView.loadData(frameVideo, "text/html", "utf-8"); mWebView.loadUrl("http://www.youtube.com/"); mWebView.setWebViewClient(new WebViewClient());

Попытайтесь сделать это хорошо.

  mWebView = (WebView) findViewById(R.id.web); String videoURL = "https://www.youtube.com/embed/R52bof3tvZs"; String vid = ""; WebChromeClient mWebChromeClient = new WebChromeClient(){ public void onProgressChanged(WebView view, int newProgress) { } }; mWebView.getSettings().setPluginState(WebSettings.PluginState.ON); mWebView.setWebChromeClient(mWebChromeClient); mWebView.setWebViewClient(new WebViewClient() { public void onPageFinished(WebView view, String url) { mWebView.loadUrl("javascript:(function() { document.getElementsByTagName('video')[0].play(); })()"); } }); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.getSettings().setAppCacheEnabled(true); mWebView.setInitialScale(1); mWebView.getSettings().setLoadWithOverviewMode(true); mWebView.getSettings().setUseWideViewPort(true); if (Build.VERSION.SDK_INT < 17) { Log.i("GPSNETWORK", "<17"); } else { Log.i("GPSNETWORK", Build.VERSION.SDK_INT+">=17"); mWebView.getSettings().setMediaPlaybackRequiresUserGesture(false); } String myUrl = "<html><body style='margin:0px;padding:0px;'>\n" + " <script type='text/javascript' src='http://www.youtube.com/iframe_api'></script><script type='text/javascript'>\n" + " var player;\n" + " function onYouTubeIframeAPIReady()\n" + " {player=new YT.Player('playerId',{events:{onReady:onPlayerReady}})}\n" + " function onPlayerReady(event){player.mute();player.setVolume(0);player.playVideo();}\n" + " </script>\n" + " <iframe id='playerId' type='text/html' width='1280' height='720'\n" + " src=\""+videoURL+"\"?enablejsapi=1&rel=0&playsinline=1&autoplay=1&showinfo=0&autohide=1&controls=0&modestbranding=1' frameborder='0'>\n" + " </body></html>"; mWebView.loadData(""+Html.fromHtml(myUrl), "text/html", "UTF-8"); 

Я не эксперт в веб-браузере Android, но столкнулся с аналогичными проблемами с веб-страницей.

То, что мне нужно было сделать, это использовать тег и убедиться, что он имеет onclick = “this.play (), в теге. Событие onclick было специально для Android. Chrome, Safari, Firefox не нуждались в нем.

Например:

  

Без onclick браузер Android не работает. Поскольку веб-браузер вызывает браузер, я подозреваю, что это то же самое.

И убедитесь, что в теге источника вы НЕ используете атрибут кодека.

Надеюсь, это вам поможет.

Это не совсем прямой ответ на ваш вопрос, но я считаю, что вы можете использовать недавно выпущенный API Android Youtube. Это должно позволить добавлять воспроизведение видео в YouTube в ваши приложения, поэтому вам не нужно вводить их в веб-просмотр в iFrame. Это просто глупо, и не все Android-устройства будут установлены Flash 🙂

https://developers.google.com/youtube/android/player/

Вы можете снова обратиться к моему вопросу . Iv’e создал функцию, которая дает вам все прямые ссылки на видео YouTube (включая ссылки hq). Теперь вы можете использовать mp4 и так вместо бедных 3gp.

Использование WebChromeClient позволяет обрабатывать диалоги, значки, заголовки и результаты Javascript:

 wv = setWebChromeClient(new WebChromeClient()); 
  • Веб-просмотр Android не может отображать видео в YouTube с помощью iframe
  • Самый простой способ добавить фотографии в MP3-аудио саундтрек
  • Как отключить HTML5-видео на YouTube с помощью Firefox?
  • Как я могу получить фактический URL-адрес видео в прямом эфире YouTube?
  • Сохранить видео Youtube для iPhone в приложении
  • Как использовать распознавание речи Google Google без загрузки видео на YouTube?
  • Chrome / OSX: розовые пятна на изображении YouTube
  • Как остановить людей от загрузки онлайн-видео для офлайн-воспроизведения?
  • Черный экран, воспроизводящий видео на YouTube в Google Chrome
  • Блокировка приложения YouTube на YouTube с маршрутизатора
  • Как работают все эти услуги «Сохранить видео с YouTube»?
  • Interesting Posts

    Имеет ли этот код из раздела «Язык программирования C ++» раздел 36.3.6 четкого поведения?

    Доступ к каталогу ресурсов доступа к ресурсам

    Как я могу выполнить ping через альтернативный шлюз?

    Панель вкладок «Блокнот ++» скрывается

    Как разместить приложение Node.Js в режиме совместного доступа

    Отображение части веб-страницы на веб-обозревателе Android

    Есть ли способ сделать частичную загрузку AngularJS вначале, а не в случае необходимости?

    Как добавить событие в UserControl в C #?

    Есть ли способ, чтобы панель задач Windows 7 отображала индекс каждого приложения?

    Удалить гласные в списке

    Сохранение правильного стиля при поиске текста

    shiny 4 маленьких текстовых поля бок о бок

    Сериализация и десериализация объектов Objective-C в JSON

    PostgreSQL: ОШИБКА: 42601: необходим список определения столбцов для функций, возвращающих «запись»,

    Как добиться скошенных граней границы CSS, а не закругленных углов?

    Давайте будем гением компьютера.