另外,MediaCodec 也存在相应的 生命周期,如下图所示:
当创建了 MediaCodec 之后,是处于未初始化的 Uninitialized
状态,调用 configure 方法之后就处于 Configured
状态,调用了 start 方法之后,就处于 Executing
状态。
在 Executing
状态下开始处理数据,它又有三个子状态,分别是:
-
Flushed
-
Running
-
End of Stream
当一调用 start 方法之后,就进入了 Flushed
状态,从输入缓冲区队列中取出一个缓冲区就进入了 Running
状态,当入队的缓冲区带有 EOS
标志时, 就会切换到 End of Stream
状态, MediaCodec 不再接受入队的缓冲区,但是仍然会对已入队的且没有进行编解码操作的缓冲区进行操作、输出,直到输出的缓冲区带有 EOS
标志,表示编解码操作完成了。
在 Executing
状态下可以调用 flush 方法,使 MediaCodec 切换到 Flushed
状态。
在 Executing
状态下可以调用 stop 方法,使 MediaCodec 切换到 Uninitialized
状态,然后再次调用 configure 方法进入 Configured
状态。另外,当调用 reset 方法也会进入到 Uninitialized
状态。
当不再需要 MediaCodec 时,调用 release 方法将它释放掉,进入 Released
状态。
当 MediaCodec 工作
《Android学习笔记总结+最新移动架构视