You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在 Android Kotlin 应用中嵌入 YouTube 播放时出现错误 152-4,即使 onReady 事件已触发。

在 Android Kotlin 应用中嵌入 YouTube 播放时出现错误 152-4,即使 onReady 事件已触发

看起来你遇到的这个 YouTube 播放错误 152-4 确实挺棘手的,结合你已经做的大量排查工作,我来帮你拆解下问题本质和针对性的验证、解决思路:

错误 152-4 的核心含义

这个错误是 YouTube 针对第三方嵌入场景的专属限制类错误,结合你的极简测试环境,主要指向三个方向:

  • 视频本身的嵌入权限被禁用:视频上传者可能在 YouTube 后台关闭了「允许嵌入」的开关,导致无法在第三方应用的 WebView(也就是你用的这个库的底层实现)中播放。
  • YouTube 对 Android 嵌入的管控收紧:近年 YouTube 对非官方认证的 WebView 嵌入行为限制更严格,尤其是未通过 YouTube Data API 认证的应用,可能会直接拦截播放请求。
  • 第三方库的兼容性滞后:你使用的 com.pierfrancescosoffritti.androidyoutubeplayer:core 库,可能因为 YouTube 嵌入页面的结构/API 悄悄更新,导致旧版本库无法正常发送播放指令,最终触发「UNKNOWN」错误。

针对性验证方案

1. 先确认目标视频的嵌入权限

你可以直接在网页端验证这个视频的嵌入能力:

  • 打开 YouTube 官方嵌入测试工具,输入你的视频 ID rDo-GlvNsUc,看能否正常播放。
  • 或者自己写一个极简 HTML 页面测试官方 iframe 嵌入:
<iframe width="560" height="315" src="https://www.youtube.com/embed/rDo-GlvNsUc" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

如果网页端也无法播放,那 100% 是视频本身的嵌入权限问题,需要联系上传者开启权限。

2. 用官方测试视频排除库的问题

换一个 YouTube 官方默认允许嵌入的测试视频 ID(比如 M7lc1UVf-VE,这是 YouTube 官方演示视频),替换你代码中的 ID 测试:

override fun onReady(youTubePlayer: YouTubePlayer) {
    Log.d("YT", "onReady fired")
    youTubePlayer.cueVideo("M7lc1UVf-VE", 0f)
}

如果这个视频能正常播放,说明你的库配置、代码逻辑完全没问题,问题就出在目标视频的权限上;如果还是报错,那大概率是库的兼容性或者 WebView 配置问题。

具体解决方法

如果是视频权限问题

  • 联系视频上传者:在 YouTube Studio 的「视频设置-嵌入」选项中,勾选「允许嵌入到任何网站」。
  • 临时替换:先使用已开启嵌入权限的视频 ID 推进开发,等权限问题解决后再换回目标视频。

如果是库/兼容性问题

  • 升级到最新版本的库:去 库的 GitHub 仓库 查看最新版本,替换你的 Gradle 依赖(比如当前最新稳定版是 12.1.0):
implementation "com.pierfrancescosoffritti.androidyoutubeplayer:core:12.1.0"
  • 尝试官方 YouTube Android Player API:如果第三方库一直有兼容性问题,可以切换到 Google 官方的 YouTube Android Player API,虽然需要配置 API Key,但稳定性和兼容性更有保障。
  • 手动强化 WebView 配置:这个库底层依赖 WebView,你可以手动补充关键配置(虽然库本身应该已经做了,但可以再确认):
val webView = youtubePlayerView.webView
webView.settings.javaScriptEnabled = true
webView.settings.domStorageEnabled = true
webView.settings.mediaPlaybackRequiresUserGesture = false // 针对自动播放/预加载的补充

额外注意点

  • 确保应用已申请网络权限:在 AndroidManifest.xml 中确认添加了:
<uses-permission android:name="android.permission.INTERNET" />
  • 绝对不要用模拟器测试!模拟器的 WebView 环境和真实设备差异极大,很多 YouTube 嵌入问题都是模拟器专属的,一定要用真实 Android 设备验证。

按照这个步骤排查,应该能快速定位到问题根源,有新的测试结果可以再反馈~

火山引擎 最新活动