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

ExoPlayer无法播放本地MOV及远程MOV/本地MP4文件问题咨询

关于ExoPlayer播放本地MOV文件的问题解答

首先明确回答你:ExoPlayer是支持播放本地MOV文件的,你遇到的UnrecognizedInputFormatException异常,大概率是文件编码、读取权限或文件本身的问题,而非ExoPlayer不支持MOV容器本身。

为什么会抛出这个异常?

MOV本质是QuickTime容器格式,ExoPlayer的Mp4Extractor(你异常信息里列出的Extractors之一)是支持解析MOV容器的。抛出该异常通常意味着:

  • 文件的视频/音频编码不在ExoPlayer支持的范围内
  • App没有足够的权限读取本地文件
  • 文件本身损坏或格式不标准
  • 自定义了ExtractorsFactory,意外排除了Mp4Extractor

排查和解决步骤

  • 检查文件编码兼容性:
    MOV只是容器,里面的视频(比如ProRes、H.264)和音频(比如PCM、AAC)编码才是关键。ExoPlayer默认支持H.264/H.265视频编码,以及AAC/MP3/PCM等音频编码。如果你的MOV用了ProRes这类特殊编码,需要引入ExoPlayer的扩展库(比如exoplayer-ext-prores)才能支持。你可以用MediaInfo这类工具查看文件的编码信息。

  • 确认本地文件读取权限:

    • Android 9及以下:确保App申请了READ_EXTERNAL_STORAGE权限,并且用户已授权。
    • Android 10及以上:建议使用Scoped Storage,通过ContentResolver获取文件Uri,不要直接使用文件路径(直接用路径可能会因为权限限制导致无法读取文件内容,Extractor无法解析)。
  • 验证ExoPlayer配置和版本:

    • 确保使用的是ExoPlayer最新稳定版,旧版本可能对某些MOV变种支持不足。
    • 检查是否自定义了ExtractorsFactory,如果是,要确保包含Mp4Extractor(默认配置已经包含,除非你主动移除)。
  • 测试标准MOV文件:
    找一个标准的MOV文件(比如用手机拍摄的MOV,一般是H.264+AAC编码)进行测试,排除你当前文件损坏或格式异常的问题。

正确加载本地MOV的代码示例

Android 9及以下(文件路径方式)

val file = File(Environment.getExternalStorageDirectory().absolutePath, "test.mov")
val mediaItem = MediaItem.fromUri(Uri.fromFile(file))
player.setMediaItem(mediaItem)
player.prepare()
player.play()

Android 10及以上(Scoped Storage方式,通过文件选择器获取Uri)

// 假设从文件选择器的返回结果中获取Uri
val selectedUri = data?.data ?: return
val mediaItem = MediaItem.fromUri(selectedUri)
player.setMediaItem(mediaItem)
player.prepare()
player.play()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:22:40