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

ExoPlayer 2.18.1初始化适配:报错修复后无媒体播放求助

ExoPlayer 2.18.1 升级适配与播放故障修复

原代码错误原因解析

升级到ExoPlayer 2.18.1后,原初始化代码的三个错误均由API变更导致:

  • Unresolved reference: ExoPlayerFactory:ExoPlayerFactory已被官方废弃,需改用ExoPlayer.Builder创建播放器实例
  • Type mismatch: Uri vs MediaItem:ProgressiveMediaSource.Factory.createMediaSource()方法不再直接接收Uri,必须传入MediaItem对象
  • Variable expected:旧版本中repeatMode的设置语法在新版中调整,需确保正确引用播放器实例的属性

适配后的正确代码(保留原逻辑)

以下代码完全保留原函数的自定义DataSource、ProgressiveMediaSource等核心逻辑,适配2.18.1版本API并修复播放问题:

private fun initializeExoPlayer(soundFile: String): ExoPlayer {
    // 替代废弃的ExoPlayerFactory,保留原逻辑的渲染器和轨道选择器配置
    val exoPlayer = ExoPlayer.Builder(this)
        .setRenderersFactory(DefaultRenderersFactory(this))
        .setTrackSelector(DefaultTrackSelector())
        .build()

    // 保留自定义DataSourceFactory的逻辑
    val dataSourceFactory = DefaultDataSourceFactory(
        this,
        Util.getUserAgent(this, getString(R.string.app_name))
    )

    // 修正assets Uri格式(错误写法:assets:///,正确写法:asset:///)
    val mediaItem = MediaItem.fromUri(Uri.parse("asset:///$soundFile"))
    // 适配新版API,用MediaItem创建ProgressiveMediaSource
    val mediaSource = ProgressiveMediaSource.Factory(dataSourceFactory)
        .createMediaSource(mediaItem)

    Log.d("MAIN", "loading $soundFile")
    // 正确设置媒体源并准备播放
    exoPlayer.setMediaSource(mediaSource)
    exoPlayer.prepare()
    // 设置无限循环模式
    exoPlayer.repeatMode = Player.REPEAT_MODE_ALL

    return exoPlayer
}

关键修复点说明

  1. 播放器实例化:用ExoPlayer.Builder替代废弃的ExoPlayerFactory,通过setRenderersFactory和setTrackSelector保留原代码的自定义配置
  2. 媒体源构建:先将Uri转换为MediaItem,再传入ProgressiveMediaSource.Factory.createMediaSource(),同时保留原自定义DefaultDataSourceFactory的使用(解决原修改代码中dataSource未被使用的问题)
  3. Uri格式修正:用户修改后的代码错误使用assets:///作为协议头,正确的assets文件Uri协议为asset:///,这是媒体无法播放的核心原因
  4. 播放准备逻辑:新版API推荐使用setMediaSource()设置媒体源后再调用prepare(),确保媒体源正确加载

注意事项

  • 确保soundFile参数为assets目录下的完整文件名(包含后缀,如bgm.mp3)
  • 若需添加多个媒体项,可调用addMediaItem(),但单媒体源场景下使用setMediaSource()更符合原逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:35:56