如何在webview android上自动播放iframe youtube

时间:2014-07-25 03:53:03

标签: android iframe webview youtube

我在我的应用中使用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");
    }
}

7 个答案:

答案 0 :(得分: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");
}

答案 1 :(得分: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 :(得分:0)

这样做。希望它有所帮助

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 Web浏览器。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

此代码可以解决问题,我使用的是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>

答案 5 :(得分:-1)

在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)
    }
}

答案 6 :(得分:-2)

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

页面加载完成后运行: -

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