【发布时间】:2014-04-10 22:44:34
【问题描述】:
当使用表面作为输入时,是否可以触发编码器发送 i 帧? 我知道在对输入缓冲区进行排队时这是可能的,但是在使用 createInputSurface 时我没有找到这样做的方法。
【问题讨论】:
标签: android android-mediacodec
当使用表面作为输入时,是否可以触发编码器发送 i 帧? 我知道在对输入缓冲区进行排队时这是可能的,但是在使用 createInputSurface 时我没有找到这样做的方法。
【问题讨论】:
标签: android android-mediacodec
您不能在缓冲区上设置标志。这也会影响BUFFER_FLAG_END_OF_STREAM,但为此您需要调用signalEndOfInputStream()。
I 帧将在每个 KEY_FRAME_RATE * KEY_I_FRAME_INTERVAL 缓冲区发送一次。 (我不知道这有多坚定——我怀疑它们在实践中可能或多或少地出现。)
【讨论】:
setParameters() API 是在 API 19 中添加的,因此在 Surface 输入所在的任何地方都无法使用(在 API 18 中添加)。 API 只说它会尝试“很快”发送一个同步帧,因此您实际上无法完全控制哪些帧是 I 帧。