Android WebView使用YouTube IFrame API播放视频出现错误码153的问题求助
Android WebView使用YouTube IFrame API播放视频出现错误码153的问题求助
大家好,我现在在做Android WebView内嵌YouTube IFrame API播放视频的功能,初始化流程看起来是正常的,但偶尔会触发错误码153的报错。目前我用了跳转到移动YouTube页面的兜底方案,但这样会丢失WebView里的自定义控制逻辑,不是最优解,想请教下有没有更好的解决办法?
先给大家看下我的WebView配置和内嵌的HTML代码:
WebView初始化配置
binding?.playerWebview?.apply { with(settings) { javaScriptEnabled = true mediaPlaybackRequiresUserGesture = false domStorageEnabled = true allowFileAccess = true allowContentAccess = true setSupportZoom(false) loadWithOverviewMode = true useWideViewPort = true mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW cacheMode = WebSettings.LOAD_DEFAULT } webChromeClient = WebChromeClient() webViewClient = object : WebViewClient() { override fun onPageFinished(view: WebView?, url: String?) { if (isYouTube) { evaluateJavascript("player.playVideo();", null) } } override fun onReceivedError( view: WebView?, request: WebResourceRequest?, error: WebResourceError? ) { super.onReceivedError(view, request, error) binding?.pbLoading?.isVisible = false } } addJavascriptInterface(VideoBridge(), "Android") val html = """ <!DOCTYPE html> <html> <body> <div id="player"></div> <script src="https://www.youtube.com/iframe_api"></script> <script> var player; function onYouTubeIframeAPIReady() { player = new YT.Player('player', { videoId: '$videoSource', playerVars: { autoplay: 1, controls: 0, playsinline: 1, enablejsapi: 1 }, events: { onReady: function(event) { event.target.playVideo(); Android.onPlayerReady(); }, onError: function(error) { Android.onPlayerError(error.data); if (error.data === 101 || error.data === 150 || error.data === 153) { // 目前的兜底方案:跳转到移动端YouTube window.location.href = "https://m.youtube.com/watch?v=$videoSource"; } } } }); } </script> </body> </html> """.trimIndent() loadDataWithBaseURL(null, html, "text/html", "UTF-8", null) }
目前遇到的问题
- 错误码153偶尔触发,根据YouTube的错误码说明,这个错误和101/150类似,应该是视频的播放权限限制(比如部分地区不可看,或者视频所有者禁止嵌入播放)
- 现在的兜底方案是跳转到YouTube原生页面,虽然能播放,但完全脱离了我们自己的WebView控制逻辑,体验不够好
- 试过在错误回调里重复调用
playVideo()重试,但效果不稳定
想请教的问题
- 有没有办法在WebView内解决153错误,不用跳转到外部页面?
- 如果必须处理权限限制,有没有更优雅的兜底方案?比如在WebView内提示用户,而不是直接跳转?
- 我的WebView配置或者IFrame的playerVars参数有没有配置不当的地方,导致触发这个错误?
麻烦各位大佬帮忙看看,谢谢啦!




