目录
MediaCodec
解码器状态
MediaCodec
Android 平台提供的硬解统一接口,接口内部实现采用异步消息制
官方文档:
MediaCodec
相关源码:
https://android.googlesource.com/platform/frameworks/base/+/master/media
,
https://android.googlesource.com/platform/frameworks/av/+/master/media/
Android平台MediaCodec避坑指北
解码器状态
解码器状态图:
解码器存有缓存,输入帧与输出帧并不是一一对应对应输出,中间会差个几帧,只有收到EOS才会把缓冲帧全部输出。
如果要实现播放器暂停时,调整滚动条的一帧画面显示预览,得如下操作:
flush, 清除之前的缓冲帧
input, 输入当前的一帧关键帧
input, 输入EOS 流结束标志
接收 output 画面,直到收到 EOS
flush, 让解码器从 EOS 状态转为 Flushed 状态
input, 输入与第二步同样的关键帧,因为播放器此时从暂停转为继续播放的话,会省略之前已发送的帧。如果解码器不先输入关键帧的话,后续的画面会花屏一阵子。