Youtube 嵌入视频在 webview 中不起作用。这段代码有啥问题?

Posted

技术标签:

【中文标题】Youtube 嵌入视频在 webview 中不起作用。这段代码有啥问题?【英文标题】:Youtube embed videos not working in webview. What's wrong with this code?Youtube 嵌入视频在 webview 中不起作用。这段代码有什么问题? 【发布时间】:2011-12-28 16:02:08 【问题描述】:

我是安卓新手。我现在面临两个问题1。我解析了 xml 文件并将其显示在包含视频和文本的 webview 中。当我点击视频时它不会播放。在 xml 视频中嵌入了 youtube。

为什么会这样?

1.第一个问题:代码和图像

protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.web_view);
    Intent intent=getIntent();
    String urlsting=intent.getStringExtra("str"); 
    mWebView = (WebView) findViewById(R.id.webview);
    mWebView.getSettings().setjavascriptEnabled(true);
    mWebView.getSettings().setPluginState(PluginState.ON);
    mWebView.getSettings().setPluginsEnabled(true);
    mWebView.setInitialScale(100);
    mWebView.getSettings().setBuiltInZoomControls(true);
    mWebView.loadDataWithBaseURL(null, urlsting,"text/html", "utf-8", null);

当我点击视频时,它开始浏览并只显示黑屏,然后什么都不会发生。

![][1]

2. 我有你在 html 标签中给出的嵌入视频网址,并尝试加载它。它们也不适合我。我检查了问题和博客的数量,也没有进行任何设置,然后也无法显示视频。帮助将不胜感激。在此先感谢。

String video= "<table bgcolor=\"#666666\"><tr><td><iframe width=\"300\" height=\"260\"     frameborder=\"0\" id=\"player\" type=\"text/html\"src=\"http://www.youtube.com/embed/iiLepwjBhZE?enablejsapi=1&origin=example.com\"></iframe></td></tr><tr><td><iframe width=\"300\" height=\"260\" frameborder=\"0\" id=\"player\" type=\"text/html\"src=\"http://www.youtube.com/embed/lBMMTeuJ_UQ?enablejsapi=1&origin=example.com\"></iframe></td></tr><tr><td><iframe width=\"300\" height=\"260\" frameborder=\"0\" id=\"player\" type=\"text/html\"src=\"http://www.youtube.com/embed/BZMkY3y7nM0?enablejsapi=1&origin=example.com\"></iframe></td></tr><tr><td></table>"; 

    mWebView = (WebView) findViewById(R.id.webview);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.getSettings().setPluginState(PluginState.ON);
    mWebView.getSettings().setPluginsEnabled(true);
    //mWebView.loadDataWithBaseURL(null,load,"text/html","UTF-8",null);
    mWebView.loadData(video,"text/html","UTF-8");

在这种情况下,我将 youtube 嵌入视频加载到 webview,但它们也无法正常工作。

![][2]

我使用的是 android 2.3.3 版本。我还想澄清在模拟器上安装 adobe flash 播放器是否有任何要求,但我认为没有,因为视频在浏览器中工作。谁能告诉我是对还是错??请尝试给我解决方案,因为我很久以前就遇到了这个问题..

我也尝试过如下使用对象标签:

        String obj="<object width=\"300\" height=\"260\"><param name=\"movie\" value=\"http://www.youtube.com/embed/iiLepwjBhZE?enablejsapi=1&origin=example.com\"?version=3&amp;hl=pt_BR&amp;rel=0\"></param><param name=\"allowFullScreen\" value=\"true\"></param><param name=\"allowscriptaccess\" value=\"always\"></param><embed src=\"http://www.youtube.com/embed/iiLepwjBhZE?enablejsapi=1&origin=example.com\" ?version=3&amp;hl=pt_BR&amp;rel=0\" type=\"application/x-shockwave-flash\" width=\"480\" height=\"330\" allowscriptaccess=\"always\" allowfullscreen=\"true\" /></object>";

【问题讨论】:

***.com/questions/6556802/… 检查一次。 你有解决办法吗? 【参考方案1】:

你需要

为您的 WebView 设置一个 WebChromeClient

    web.setWebChromeClient(new WebChromeClient());

并开启硬件加速值

<application
android:hardwareAccelerated="true"...

查看http://developer.android.com/reference/android/webkit/WebView.html 并阅读 HTML5 视频支持部分。

这对我有用...

【讨论】:

天哪!!我不得不承认我 100% 悲观这会起作用,但它刚刚开始在我的三星 Note 2 上以 web 视图播放 youtube 视频!哇。附言我没有为整个应用启用硬件加速,而是仅为显示 youtube 视频的 Activity 启用它。 不幸的是,当我播放第二个视频时,我在 webkit 中遇到了异常! android.view.WindowManager$BadTokenException: 无法添加窗口 -- 令牌 null 无效;您的活动正在运行吗?在 android.view.ViewRootImpl.setView(ViewRootImpl.java:798) 在 android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:288) 在 android.view.WindowManagerImpl.addView(WindowManagerImpl.java:73) 在 android.widget。 MediaController.show(MediaController.java:374) 在 android.webkit.HTML5VideoFullScreen.showControllerInFullScreen(HTML5VideoFullScreen.java:425) 在 android.webkit.HTML5VideoViewProxy$VideoPlayer.end(HTML5VideoViewProxy.java:343) 查看高亮部分:为了在您的应用程序中支持内联 HTML5 视频,您需要开启硬件加速,并设置 WebChromeClient。对于全屏支持,onShowCustomView(View, WebChromeClient.CustomViewCallback)onHideCustomView() 的实现是必需的,getVideoLoadingProgressView() 是可选的。【参考方案2】:

我猜,您在 html 代码中使用了 iframe 标记。用对象标签改变它。我的意思是,您必须使用对象而不是 iframe。这里有一个例子:

<object  ><param name="movie" 
value="http://www.youtube.com/v/"here is your video id"?version=3&amp;hl=pt_BR&amp;rel=0">   
</param><param name="allowFullScreen" value="true"></param>
<param name="allowscriptaccess" value="always"></param>
<embed src="http://www.youtube.com/v/"here is your video id"?version=3&amp;hl=pt_BR&amp;rel=0" 
type="application/x-shockwave-flash"   allowscriptaccess="always" allowfullscreen="true" /></object>

使用下面的代码:

webview.getSettings().setPluginsEnabled(true);
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setAllowFileAccess(true);
webview.loadUrl(url);

如果你的问题解决了,试试这个并把它加粗:)

【讨论】:

感谢您的回复。它无法在视频中显示问题标记???? 我猜你在问这句话:“here is your video id” -> 一定是这样的-> 7wfYIMyS_dI youtube.com/watch?v=7wfYIMyS_dI 不,我也会尝试使用上面提到的对象标签,然后显示?代替视频,请检查已编辑的问题。 对不起,我没听懂你想说什么,请简单解释一下。谢谢。 我已经帮不上忙了。我在我的应用程序中使用它并且它正在工作。我猜你错过了一些东西。我建议您再次检查您的 java 和 html 代码。【参考方案3】:

您是否在实际设备上测试过您的应用?因为像这样嵌入的视频,即 iFrame 需要更多时间来加载。在我的情况下,同样的事情发生了,然后我将 webview 设置更改为,

getSettings().setPluginsEnabled(true);

但之后它无法在模拟器上运行,而在设备中它正在加载,所以我认为它无法运行,但就在今天我尝试了同样的事情,它运行良好,令我惊讶。所以你只需要添加这行代码即可。

第二件事是只有那些嵌入在 iframe 标签中的视频才支持通过使插件为 true。

【讨论】:

【参考方案4】:

这样做:

myWebView.getSettings().setPluginState(PluginState.ON);
        myWebView.getSettings().setJavaScriptEnabled(true);
        myWebView.getSettings().setAllowFileAccess(true);
        myWebView.setWebChromeClient(new WebChromeClient());

并启用硬件加速!

【讨论】:

【参考方案5】:

关注这个来源,Youtube 视频应该会播放

        String youtubeId = "iiLepwjBhZE";
        int width = rl.getWidth();
        int height = rl.getHeight();

        WebChromeClient mWebChromeClient = new WebChromeClient()

            public void onProgressChanged(WebView view, int newProgress) 
                /*
                view.loadUrl("javascript:(function()  " +  
                        "document.querySelector('iframe').setAttribute('style', 'width: 1080px; height: 1920px'); " + 
                        ")()");
                */
            
        ;

        String video= "<table bgcolor=\"#666666\"><tr><td><iframe width=\"" +
                width +
                "\" height=\"" +
                height +
                "\"frameborder=\"0\" id=\"player\" type=\"text/html\"src=\"http://www.youtube.com/embed/" +
                youtubeId +
                "?enablejsapi=1&origin=example.com\"></iframe> </td> </tr><tr><td></table>"; 

//

        webView.getSettings().setPluginState(PluginState.ON);
        webView.setWebChromeClient(mWebChromeClient);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setAppCacheEnabled(true);
        webView.setInitialScale(1);
        webView.getSettings().setLoadWithOverviewMode(true);
        webView.getSettings().setUseWideViewPort(true);
        //mWebView.loadDataWithBaseURL(null,load,"text/html","UTF-8",null);
        webView.loadData(video,"text/html","UTF-8");

【讨论】:

以上是关于Youtube 嵌入视频在 webview 中不起作用。这段代码有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章

android webview youtube嵌入视频自动播放不起作用

Iframe 中的 YouTube 嵌入播放器在 iOS6 中不起作用

Youtube嵌入在Firefox中不起作用

嵌入的 YouTube 视频在 iframe HTML 中不可用

在 React Native 的 Webview 中嵌入 youtube 视频

将 Youtube 视频嵌入到 WebView(Appcelerator)不显示(黑屏)