You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中ExoPlayer无法播放YouTube链接,使用youtubeExtractor提取失败

解决YouTubeExtractor提取ytFiles为null的问题

1. 检查库版本兼容性

YouTube的页面结构和接口会频繁更新,旧版本的youtubeExtractor可能已失效。确保使用最新稳定版依赖:

// Groovy
implementation 'com.github.HaarigerHarald:android-youtubeExtractor:2.1.0'

// Kotlin DSL
implementation("com.github.HaarigerHarald:android-youtubeExtractor:2.1.0")

2. 确认网络权限配置

在AndroidManifest.xml中必须添加网络相关权限,否则无法请求YouTube资源:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

注意:Android 6.0+中INTERNET属于正常权限,无需动态申请,但要确保应用未被系统禁用网络权限。

3. 完善错误处理定位问题

原代码未处理提取失败的场景,重写onError方法并补充空值判断,获取具体错误信息:

fun extractYouTube(
    context: Context,
    url: String,
    onSuccess: (String) -> Unit,
    onError: (String) -> Unit
) {
    object : YouTubeExtractor(context) {
        override fun onExtractionComplete(
            ytFiles: SparseArray<YtFile>?,
            videoMeta: VideoMeta?
        ) {
            ytFiles?.get(22)?.url?.let(onSuccess) ?: run {
                videoMeta?.errorMessage?.let(onError) ?: onError("未知提取错误")
            }
        }

        override fun onError(errorCode: Int, errorMessage: String?) {
            super.onError(errorCode, errorMessage)
            onError(errorMessage ?: "错误码:$errorCode")
        }
    }.extract(url, true, true)
}

调用时传入错误回调,可直接定位是链接无效、地区限制还是其他问题。

4. 验证链接有效性

确保传入的URL是标准有效链接:

  • 标准格式:https://www.youtube.com/watch?v=dQw4w9WgXcQ
  • 短链接格式:https://youtu.be/dQw4w9WgXcQ
    若链接带额外参数(如播放列表参数),建议提取纯视频ID后重新构造标准链接再尝试。

5. 检查视频可用性

部分视频存在地区限制、年龄限制或已被删除,这类视频youtubeExtractor无法提取到有效资源,需先确认视频在当前网络环境下可正常访问。

6. 尝试禁用缓存

extract方法第三个参数为useCache,若缓存的旧数据导致提取失败,可传入false禁用缓存:

.extract(url, true, false)

内容的提问来源于stack exchange,提问作者Gayorgy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 07:37:18