encode - 安卓媒体编解码器 : how to request a key frame when encoding

标签 encode android-4.2-jelly-bean

在Android4.1中,实时编码应用中经常会请求关键帧。但是如何使用 MediaCodec 对象呢?当前的 Android4.2 SDK 似乎不支持它。

最佳答案

可以 通过在排队输入缓冲区时指定 MediaCodec.BUFFER_FLAG_SYNC_FRAME 来生成随机关键帧:

MediaCodec codec = MediaCodec.createDecoderByType(type);
codec.configure(format, ...);
codec.start();
ByteBuffer[] inputBuffers = codec.getInputBuffers();
for (;;) {
  int inputBufferIndex = codec.dequeueInputBuffer(timeoutUs);
  if (inputBufferIndex >= 0) {
    // fill inputBuffers[inputBufferIndex] with valid data
    ...
    codec.queueInputBuffer(inputBufferIndex, 0, inputBuffers[inputBufferIndex].limit(), presentationTime,
        isKeyFrame ? MediaCodec.BUFFER_FLAG_SYNC_FRAME : 0);
  }

}

在 Galaxy Nexus 上编码视频时偶然发现需要插入随机关键帧。
在它上面,MediaCodec 没有在视频开始时自动生成关键帧。

关于encode - 安卓媒体编解码器 : how to request a key frame when encoding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13698893/

相关文章:

python - 在 JSON 中编码嵌套的 python 对象

mongodb - 如何使用Golang在MongoDB中存储UUID?

python - 无论我做什么都无法将数据 append 到文件

java - Google Now 更改命令

android - Jelly Bean (api 16) 的 READ_LOGS 权限

php - 对 URL 进行编码,包括其在 php 中的路径

php - 编码路径以用作 html 有效 "id"或 "name"标记的最佳方法

android - 在 Windows 7 上使用 Jelly Bean 4.1 模拟器在 ADB 中运行 systrace 工具时出错

安卓 : Content Provider : Uri Type Wrong on Jellybean 4. 2.2

android - TimePickerDialog 和 Jelly Bean,onTimeSet 在取消时触发