为啥 Youtube 视频没有在 webview android 中播放

Posted

技术标签:

【中文标题】为啥 Youtube 视频没有在 webview android 中播放【英文标题】: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">

提前致谢

【问题讨论】:

inducesmile.com/android/… 【参考方案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 我试试看

以上是关于为啥 Youtube 视频没有在 webview android 中播放的主要内容,如果未能解决你的问题,请参考以下文章

在 WebView 中播放 youtube 视频

如何在没有 UIWebView 的情况下播放 youtube 视频或在 youtube 视频开始使用 webview 播放时检测视频播放器?

如何在我的应用程序中播放 Youtube 视频而不使用 Webview

Android webView 播放 YouTube 视频

WebView - Youtube 视频在后台播放并最小化

React Native:如何使用 expo 在 webview 中制作全屏 youtube 嵌入视频(没有 react-native 链接)