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

Media3 ExoPlayer不支持av01.0.04M.08编解码器,如何添加支持?

解决ExoPlayer不支持AV1编解码器(av01.0.04M.08)的问题

你的推测完全正确:av01.0.04M.08是AV1视频编码格式,Media3 ExoPlayer 1.0.1默认不包含AV1解码支持,因此会跳过视频轨只播放音频。以下是添加支持的具体步骤:

1. 添加AV1解码扩展依赖

在项目的build.gradle.kts中添加AV1硬解码扩展;若需要适配无AV1硬解码能力的设备,再额外添加libgav1软解码库:

// Media3 ExoPlayer AV1硬解码扩展(版本需与你使用的Media3版本匹配)
implementation("androidx.media3:media3-exoplayer-av1:1.0.1")
// 可选:AV1软解码库(适配无硬解码的设备,性能略差)
implementation("com.google.android.exoplayer:exoplayer-av1-gav1:2.19.1")

2. 配置ExoPlayer启用扩展渲染器

修改ExoPlayer构建代码,设置渲染器工厂并启用扩展渲染器模式,确保AV1解码器被加载:

val renderersFactory = DefaultRenderersFactory(context)
    // 强制启用扩展渲染器,优先使用硬解码
    .setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_ON)

val mediaSource = DashMediaSource
    .Factory(DefaultHttpDataSource.Factory())
    .createMediaSource(MediaItem.Builder()
        .setUri(url)
        .setMimeType(MimeTypes.APPLICATION_MPD)
        .build())

exoPlayer = ExoPlayer.Builder(context, renderersFactory)
    .build()
    .apply {
        trackSelectionParameters = trackSelectionParameters
            .buildUpon()
            .setMaxVideoSizeSd()
            .build()
        addAnalyticsListener(EventLogger())
        setMediaSource(mediaSource)
        prepare()
    }
binding.player.player = exoPlayer

3. 验证支持情况

  • 硬解码支持:仅在Android 10+且设备芯片支持(如骁龙855/天玑1000及以上)的设备上可用
  • 软解码支持:添加libgav1后,几乎所有Android设备都能解码AV1,但高分辨率视频可能出现卡顿
  • 可通过EventLogger输出的日志查看实际使用的解码器(日志中会显示AV1Decoder相关信息)

内容的提问来源于stack exchange,提问作者Ядовитое Сердце

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 01:39:57