【问题标题】:why Youtube Video is Not Playing in webview android为什么 Youtube 视频没有在 webview android 中播放
【发布时间】:2017-12-29 14:50:44
【问题描述】:

我在 android 中有简单的 webView,我想通过 URL 播放视频。 但它显示错误视频无法在 webview 中播放。 this error is coming while playing

这是我的源代码:-

WebView webView;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.livepage);
    //Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_bottom7);
    webView = (WebView)findViewById(R.id.webView);
    WebSettings webSettings = webView.getSettings();
    webSettings.setPluginState(WebSettings.PluginState.ON);
    webSettings.setJavaScriptEnabled(true);
    webSettings.setUseWideViewPort(true);
    webSettings.setLoadWithOverviewMode(true);
    webView.setLayerType(View.LAYER_TYPE_SOFTWARE,null);
    webView.loadUrl("https://www.youtube.com/channel/UCLmI8_hVUqA251PzK7OSvQw");
    webView.setWebChromeClient(new WebChromeClient());
    webView.setWebViewClient(new loadWebView());
}

private class loadWebView extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return false;
    }
}

这里是清单:-

<application
   ...
   android:supportsRtl="true"
   android:largeHeap="true"
   android:hardwareAccelerated="true">

提前致谢

【问题讨论】:

标签: android webview youtube sdk html5-video


【解决方案1】:

是的,我找到了这个问题的解决方案, 这里的解决方案,

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_bottom7);
    webView = (WebView)findViewById(R.id.videoView);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setDomStorageEnabled(true);
    webView.loadUrl("https://www.youtube.com/channel/UCLmI8_hVUqA251PzK7OSvQw");

    webView.setWebViewClient(new loadWebView());
}
private class loadWebView extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}

需要补充

webSetting.setDomStorageEnable(true);

对我来说工作得很好!!!!!

【讨论】:

    【解决方案2】:

    根据您的问题,您尚未添加 youtube 视频链接。您正在使用 youtube 频道网址。无论如何试试这个。效果很好。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        String frameVideo = "<html><body><iframe width=\"420\" height=\"315\" src=\"https://www.youtube.com/embed/PMBcMBhsm80\" frameborder=\"0\" allowfullscreen></iframe></body></html>";
    
        WebView displayYoutubeVideo = (WebView) findViewById(R.id.mWebView);
        displayYoutubeVideo.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return false;
            }
        });
        WebSettings webSettings = displayYoutubeVideo.getSettings();
        webSettings.setJavaScriptEnabled(true);
        displayYoutubeVideo.loadData(frameVideo, "text/html", "utf-8");
    }
    

    【讨论】:

    • 首先我想打开我的频道,然后我想播放视频。
    • 你是否在manifest中添加了Internet权限和相关权限?
    • 是的..我已经添加了权限..我的频道页面正在打开,但是在播放视频时它正在显示..发生错误
    • @Abhay - 我已经用真实设备测试了你的代码。首先它显示了一个 youtube 频道,当我点击它时,视频工作正常。请在其他设备上进行测试
    • 我要去看看
    【解决方案3】:

    首先启用

    webview.getSettings().setJavaScriptEnabled(true);
    

    然后

    如果您单击 WebView 网页内的任何链接,该页面将不会加载到您的 WebView 中。为此,您需要从 WebViewClient 扩展您的类并覆盖其方法。它的语法是:

    private class MyBrowser extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    

    【讨论】:

      【解决方案4】:

      试试这个

       String frameVideo = "<html><body>Video From YouTube<br><iframe width=\"420\" height=\"315\" src=\"https://www.youtube.com/embed/47yJ2XCRLZs\" frameborder=\"0\" allowfullscreen></iframe></body></html>";
      
          WebView displayYoutubeVideo = (WebView) findViewById(R.id.mWebView);
          displayYoutubeVideo.setWebViewClient(new WebViewClient() {
              @Override
              public boolean shouldOverrideUrlLoading(WebView view, String url) {
                  return false;
              }
          });
          WebSettings webSettings = displayYoutubeVideo.getSettings();
          webSettings.setJavaScriptEnabled(true);
          displayYoutubeVideo.loadData(frameVideo, "text/html", "utf-8");
      

      或者你可以试试这个集成 youtube api 是的!查看 Android Youtube Player API 和 YouTube API。

      Android Player:

      YouTube API:

      YouTube Player API Sample

      and follow this link to get video from channel

      【讨论】:

      • @Abhay 你有没有得到任何错误,因为它在我的真实设备上工作只是签入到真实设备
      • 你能检查一下我的网址吗..我想先打开频道然后点击它应该播放的视频..
      • @Abhay 我试试看
      猜你喜欢
      • 2012-12-14
      • 1970-01-01
      • 2017-12-23
      • 2012-09-24
      • 2013-07-13
      • 2014-02-10
      • 2013-07-20
      • 1970-01-01
      • 2011-06-24
      相关资源
      最近更新 更多