在MediaCodec和MediaPlayer之间共享MP4文件

时间:2014-03-21 17:32:59

标签: android android-mediaplayer mediacodec

尝试使用MediaCodec(解码器)实例读取同一个MP4文件 MediaPlayer实例无法按预期工作。暂停(或寻找)然后恢复播放时,MediaPlayer的位置是不可预测的,并且通常会在MediaCodec解码器之前跳过100-500毫秒。

在我的应用程序中,解码器正在处理H.264视频帧,而MediaPlayer正在播放AAC音频。两者都已使用相同的设备上MP4文件初始化。

一些观察结果:

  • 从文件开头播放(不暂停或搜索)工作正常
  • 在寻求或暂停后,音频几乎总是跳到视频之前
  • 分析表明,“跳转”似乎是在恢复播放后发生的;在恢复之前,两个组件都报告相同的播放位置。在恢复之后,MediaPlayer的位置发生了巨大而突然的变化。
  • 跳转后音频保持在视频前方一定的数量

让每个组件使用自己相同的MP4副本工作正常,这就是我现在解决问题的方法。我知道MediaCodec可用于处理音频,但我宁愿避免这种做法。

在梳理完相关的AOSP代码(MediaCodecMediaPlayer和一些JNI类)之后,我不清楚这些组件是如何相互干扰的。他们共享一个低级别的Binder对象吗? MediaPlayer以某种方式(重新)使用MediaCodec解码器用来填充其输入缓冲区的光标吗?

0 个答案:

没有答案