【问题标题】:How to auto play iframe youtube on webview android如何在 webview android 上自动播放 iframe youtube
【发布时间】:2014-07-25 03:53:02
【问题描述】:

我在我的应用中使用 android webview 来显示来自 youtube 的视频,效果很好。

但我希望它是自动播放的。

这是我的活动,我将 "?autoplay=1" 附加到 videoUrl 但没有任何改变,它仍然不是自动播放。

public class LandVideoAct extends Activity {
    WebView mWebView;
    String videoURL = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.landfull);
        videoURL = "http://www.youtube.com/embed/VYIi49czywo?autoplay=1";
        mWebView = (WebView) findViewById(R.id.fullwebview);

        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);
        }
        mWebView.loadData(vid, "text/html", "UTF-8");
    }
}

【问题讨论】:

    标签: android iframe webview youtube


    【解决方案1】:

    我认为这在 webview 或 android 浏览器中是不可能的。要实现自动播放,我认为您需要“YOUTUBE API”。

    查看以下链接:

    1]There's no way method to do autoplay video on android platform?

    2]Youtube Api android autostart

    以上这些链接将让您了解自动播放以及 youtube api。

    【讨论】:

      【解决方案2】:

      查看this question。有一些建议可能对你有用,但是提出这个问题的人没有说它是否对他们有用。

      我读到的大部分内容是说大多数移动平台都会阻止自动播放以避免糟糕的用户体验。

      你可以试试下面这段 javascript 代码:

      var myvideo = document.getElementsByTagName('video')[0]; myvideo.play();
      

      对于 Android 4.2.2+,请尝试在您的本机代码中添加:

      WebView.getSettings().setMediaPlaybackRequiresUserGesture(false);
      

      还可以查看this page。其中添加了以下代码以自动播放视频:

      webview.setWebViewClient(new WebViewClient() {
              // autoplay when finished loading via javascript injection
              public void onPageFinished(WebView view, String url) { webview.loadUrl("javascript:(function() { document.getElementsByTagName('video')[0].play(); })()"); }
          });
          webview.setWebChromeClient(new WebChromeClient());
      
          webview.loadUrl("http://html5demos.com/video");
      }
      

      【讨论】:

      • 我尽量按照你的建议去做。但它仍然没有自动播放。请在我的问题中看到我根据您的建议对其进行编辑。我检查我的 SDK 版本是 18
      • @user2955394 - 你找到解决方案了吗?
      【解决方案3】:

      这样做。希望对你有帮助

      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/"
                      + "J2fB5XWj6IE?autoplay=1"
                      + "&fs=0\" frameborder=\"0\">\n"
                      + "</iframe>\n";
      

      来自下面的链接

      在 Chrome 中,自动播放也被禁用

      (https://code.google.com/p/chromium/issues/detail?id=159336)

      我相信最新版本的默认设置也会发生同样的情况 Android 网络浏览器。

      【讨论】:

      • 谢谢你,但它对我不起作用(不是错误但仍然不是自动播放)
      • 当我运行我的应用程序时,视频显示播放按钮,当我点击播放按钮时,它运行良好。但我想自动播放它不想点击播放按钮。
      【解决方案4】:

      根据操作系统原因默认禁用。默认情况下,Chrome 也会禁用内容。您可以尝试编写自己的应用程序或改用 Java、Javascript 和 YouTube-API。也许 webkit 会让你允许你在未来根据你的电池状态来决定玩什么。

      【讨论】:

        【解决方案5】:

        这段代码可以解决问题,我使用的是 jquery,但可以使用纯 javascript 完成。

        <iframe id="myvideo" src="https://www.youtube-nocookie.com/embed/Vhh_GeBPOhs?autoplay=1&amp;rel=0&amp;controls=0&amp;showinfo=0&amp;rel=0&amp;loop=1&amp;modestbranding=1&amp;wmode=transparent&amp;mute=1amp;enablejsapi=1" width="560" height="315" frameborder="0" allowfullscreen></iframe>
        <script>
        setInterval(function(){
          $('#myvideo')[0].contentWindow.postMessage('{"event":"command","func":"playVideo","args":""}', '*');
         }, 250);
        </script>
        

        【讨论】:

          【解决方案6】:

          在 WebView 上使用桌面模式。 Youtube 将自动播放。添加这个:

          webView.getSettings().setUserAgentString("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.137 Safari/537.36")
          

          像这样:

          val webView: WebView = findViewById(R.id.webView)
          webView.settings.javaScriptEnabled = true
          webView.settings.domStorageEnabled = true
          webView.loadUrl("http://your.web.site/")
          webView.webChromeClient = object : WebChromeClient() {}
          webView.settings.setPluginState(WebSettings.PluginState.ON)
          webView.settings.setPluginState(WebSettings.PluginState.ON_DEMAND)
          webView.settings.setUserAgentString("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.137 Safari/537.36")
          if(android.os.Build.VERSION.SDK_INT>16){webView.settings.setMediaPlaybackRequiresUserGesture(false)}
          webView.webViewClient = object : WebViewClient() {
              override fun onPageFinished(webView: WebView, url: String) {
                  super.onPageFinished(webView, url)
              }
          }
          

          【讨论】:

            【解决方案7】:

            有点晚了,但我希望这会有所帮助。

            页面加载完成后运行:-

             yourWebView.loadUrl("javascript:(function() { document.getElementsByClassName('ytp-large-play-button ytp-button')[0].click(); })()");
            

            【讨论】:

              猜你喜欢
              • 2019-02-23
              • 2013-05-01
              • 2013-03-18
              • 2016-10-25
              • 2017-12-23
              • 2023-04-09
              • 2015-04-11
              • 2012-10-06
              • 1970-01-01
              相关资源
              最近更新 更多