【问题标题】: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>";

【问题讨论】:

标签: android video youtube embed android-webview


【解决方案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 width="480" height="330"><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" width="480" height="330" 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");
      

      【讨论】:

        猜你喜欢
        • 2011-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-18
        • 2019-08-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多