【问题标题】:force i-frame when using mediacodec with createInputSurface使用带有 createInputSurface 的 mediacodec 时强制 i-frame
【发布时间】:2014-04-10 22:44:34
【问题描述】:

当使用表面作为输入时,是否可以触发编码器发送 i 帧? 我知道在对输入缓冲区进行排队时这是可能的,但是在使用 createInputSurface 时我没有找到这样做的方法。

【问题讨论】:

    标签: android android-mediacodec


    【解决方案1】:

    您不能在缓冲区上设置标志。这也会影响BUFFER_FLAG_END_OF_STREAM,但为此您需要调用signalEndOfInputStream()

    I 帧将在每个 KEY_FRAME_RATE * KEY_I_FRAME_INTERVAL 缓冲区发送一次。 (我不知道这有多坚定——我怀疑它们在实践中可能或多或少地出现。)

    【讨论】:

    • 不是那个参数 PARAMETER_KEY_REQUEST_SYNC_FRAME 吗?
    • setParameters() API 是在 API 19 中添加的,因此在 Surface 输入所在的任何地方都无法使用(在 API 18 中添加)。 API 只说它会尝试“很快”发送一个同步帧,因此您实际上无法完全控制哪些帧是 I 帧。
    猜你喜欢
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-10
    相关资源
    最近更新 更多