Pet*_*ter 4 android android-mediacodec
在我的 Android 应用程序中,我使用 MediaCodec 以 webm (vp8) 格式编码一些媒体。编码按预期工作。但是,我需要确保偶尔创建一个同步帧。这是我所做的:
encoder.queueInputBuffer(..., MediaCodec.BUFFER_FLAG_SYNC_FRAME);
Run Code Online (Sandbox Code Playgroud)
在代码的后面,我检查同步帧:
encoder.dequeueOutputBuffer(bufferInfo, 0);
boolean isSyncFrame = (bufferInfo.flags & MediaCodec.BUFFER_FLAG_SYNC_FRAME);
Run Code Online (Sandbox Code Playgroud)
问题是 isSyncFrame 永远不会得到真正的值。
我想知道我是否在编码配置中犯了错误。可能有更好的方法告诉编码器偶尔创建一个同步帧。
我希望这不是 MediaCodec 中的错误。预先感谢您的帮助。
没有(从 Android 4.3 开始)使用 MediaCodec 编码器请求按需同步帧的方法。这部分是由于 OMX(Android 中的底层编解码器实现)没有提供指定应将哪个输入帧编码为同步帧的方法;尽管它有一种方法可以“在不久的将来”触发同步帧。
feisal 的回答是目前唯一支持的控制同步帧的方法,但您必须在配置时进行。
==编辑回复:jesup
您可以在不久的将来使用 MediaCodec.setParameter 触发同步帧:
Bundle params = new Bundle();
params.putInt(MediaCodec.PARAMETER_KEY_REQUEST_SYNC_FRAME, 0);
mCodec.setParameters(syncFrame);
Run Code Online (Sandbox Code Playgroud)
不幸的是,除了通过检查字节码自行完成之外,没有(可靠的)方法可以在 MediaCodec 中判断编码缓冲区是否是同步帧。
| 归档时间: |
|
| 查看次数: |
2620 次 |
| 最近记录: |