尝试使用MediaCodec
(解码器)实例读取同一个MP4文件和 MediaPlayer
实例无法按预期工作。暂停(或寻找)然后恢复播放时,MediaPlayer
的位置是不可预测的,并且通常会在MediaCodec
解码器之前跳过100-500毫秒。
在我的应用程序中,解码器正在处理H.264视频帧,而MediaPlayer
正在播放AAC音频。两者都已使用相同的设备上MP4文件初始化。
一些观察结果:
MediaPlayer
的位置发生了巨大而突然的变化。让每个组件使用自己相同的MP4副本工作正常,这就是我现在解决问题的方法。我知道MediaCodec
可用于处理音频,但我宁愿避免这种做法。
在梳理完相关的AOSP代码(MediaCodec,MediaPlayer和一些JNI类)之后,我不清楚这些组件是如何相互干扰的。他们共享一个低级别的Binder对象吗? MediaPlayer
以某种方式(重新)使用MediaCodec
解码器用来填充其输入缓冲区的光标吗?