当前位置: 代码迷 >> Android >> 如何减少 MediaCodec H264 编码器延迟
  详细解决方案

如何减少 MediaCodec H264 编码器延迟

热度:83   发布时间:2023-08-04 10:45:11.0

我正在尝试使用 Android6.0 的 MediaCodec 以实时低延迟将 h264 编码为流。 编码器大约有 6 帧延迟,我想知道如何减少

代码来自

部分代码是:

while (true) {
     encoder->dequeueOutputBuffer(&bufIndex);
}

编码器由屏幕表面以 320x480 60 fps 馈送,并通过 dequeueOutputBuffer() 输出流数据。 大约有 6 帧馈送到编码器,其数据不会立即被 dequeueOutputBuffer() 返回。 换句话说,当输入第 N 帧时,编码器输出第 (N-6) 帧的数据。

问题 1 - 如何减少编码器中缓冲的帧数? 是否可以在第 N 帧馈入编码器后立即输出第 N 帧?

PS:问题 1 与相同。(尚无好的解决方案)。

当表面图形内容突然变为静态时,不再有帧被馈送到编码器。 奇怪的是,最新的6帧数据并不能以它的“正常速度”输出,它们在大约10秒内缓慢输出。

问题 2 - 当编码器突然没有数据馈送时,如何减少最新帧输出的延迟?

缓冲由视频编码器决定。 我认为除了选择一个不以这种方式运行的视频编码器之外,您无能为力。

如果您不想暂停输出,最简单的解决方法是不暂停输入。 继续输入相同的帧。编码器应该认识到没有任何变化并且产生很少的输出。 screenrecord 不是这样工作的——它只是在收到帧时提交帧——所以你必须添加一个超时来重新提交帧。

  相关解决方案