Intereting Posts
ADB нажимает несколько файлов с одним расширением с одной командой RxJava2 в CursorLoader's onLoadFinished callback Разница между Android: windowBackground и android: colorBackground? OpenGL ES отбрасывает тени для 2D спрайтов Как установить приложение Android на реальном устройстве без публикации и Eclipse? Почему Android Studio говорит «Ожидание отладчика», если НЕ отлаживается? Есть ли альтернатива onBackPressed () для службы? Android Studio отмечает R красным цветом с сообщением об ошибке «не может разрешить символ R», но сборка завершается успешно Получение веб-шрифтов для работы с телефоном и андроидом – как? Динамический добавочный элемент для NavigationView в Android Android Emulator – сообщение об ошибке «К сожалению, браузер перестает работать» Изменение цвета значка навигационного ящика в шаблоне по умолчанию для Android Studio Выравнивание кнопок внутри TableRow Gson десериализует вложенные объекты с помощью InstanceCreator Android Studio 0.5.0 – без автоматического завершения кода и распознавания синтаксиса ошибок после обновления

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

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

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

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@android:color/white" android:id="@+id/mainLayout"> <WebView android:background="@android:color/white" android:id="@+id/webView" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </RelativeLayout> 

Мой код

 public class WebTube extends Activity { private WebView wv; String html = "<iframe class=\"youtube-player\" style=\"border: 0; width: 100%; height: 95%; padding:0px; margin:0px\" id=\"ytplayer\" type=\"text/html\" src=\"http://www.youtube.com/embed/WBYnk3zR0os" + "?fs=0\" frameborder=\"0\">\n" + "</iframe>"; @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", ""); } } 

Также я предоставляю <uses-permission android:name="android.permission.INTERNET"/>

& android:hardwareAccelerated="true"

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

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

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

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

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

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

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

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

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

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

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

 String customHtml = "<iframe src='http://docs.google.com/viewer?url=http://www.iasted.org/conferences/formatting/presentations-tips.ppt&embedded=true' width='100%' height='100%' style='border: none;'></iframe>"; 

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

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

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

Solutions Collecting From Web of "Загрузка видео Youtube через i-frame в веб-обозревателе Android"

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

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

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

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

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

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

Например:

 <video id="video" width="320" height="240" autobuffer controls onclick="this.play();"> 

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

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

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

Это не совсем прямой ответ на ваш вопрос, но я считаю, что вы можете использовать недавно выпущенный 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()); 

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

 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()); 

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

  mWebView = (WebView) findViewById(R.id.web); String videoURL = "https://www.youtube.com/embed/R52bof3tvZs"; String vid = "<html><body style=\"margin: 0; padding: 0\"><iframe width=\"100%\" height=\"100%\" src=\""+videoURL+"\" type=\"text/html\" frameborder=\"0\"></iframe><body><html>"; 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 = "&lt;html&gt;&lt;body style='margin:0px;padding:0px;'&gt;\n" + " &lt;script type='text/javascript' src='http://www.youtube.com/iframe_api'&gt;&lt;/script&gt;&lt;script type='text/javascript'&gt;\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" + " &lt;/script&gt;\n" + " &lt;iframe id='playerId' type='text/html' width='1280' height='720'\n" + " src=\""+videoURL+"\"?enablejsapi=1&amp;rel=0&amp;playsinline=1&amp;autoplay=1&amp;showinfo=0&amp;autohide=1&amp;controls=0&amp;modestbranding=1' frameborder='0'&gt;\n" + " &lt;/body&gt;&lt;/html&gt;"; mWebView.loadData(""+Html.fromHtml(myUrl), "text/html", "UTF-8"); 

У меня есть полностью настроенный 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 = "<iframe class=\"youtube-player\" " + "style=\"border: 0; width: 100%; height: 96%;" + "padding:0px; margin:0px\" " + "id=\"ytplayer\" type=\"text/html\" " + "src=\"http://www.youtube.com/embed/" + videoId + "?&theme=dark&autohide=2&modestbranding=1&showinfo=0&autoplay=1\fs=0\" frameborder=\"0\" " + "allowfullscreen autobuffer " + "controls onclick=\"this.play()\">\n" + "</iframe>\n"; LogShowHide.LogShowHideMethod("video-id from html url= ", "" + html); return html; } }