当前位置: 首页 > 知识库问答 >
问题:

如何减少MediaCodec H264编码器延迟

何承
2023-03-14

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

零件代码为:

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

编码器以320×480 60 fps的速度由屏幕表面馈入,通过dequeueOutputBuffer()输出流数据。大约有6个帧的数据没有被dequeueOutputBuffer()及时返回到编码器。换句话说,当馈送第n帧时,编码器输出第(N-6)帧的数据。

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

当表面图形内容突然变得静态时,没有更多的帧被馈送到编码器。奇怪的是,最新的6帧数据不能以它的“通常的速度”输出,他们是缓慢的输出在10秒左右。

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

共有1个答案

吕奇
2023-03-14

缓冲由视频编码器决定。我不认为有很多你可以做的,除了选择一个视频编码器,不是这样的行为。

如果您不希望输出暂停,那么最简单的修复方法就是不暂停输入。继续输入同一帧。编码器应该认识到没有任何变化,并且生成很少的输出。screenrecord不是以这种方式工作的--它只是在获取帧时提交帧--所以您必须添加一个重新提交帧的超时。

 类似资料:
  • 问题内容: 让我们比较一下c:Hello_world.c: Hello_world.go: 都编译: 还有,这是什么? 大约1Mb的世界。你在跟我开玩笑吗?我做错了什么? (仅限Hello_go-> 893K) 问题答案: 文件较大是否有问题?我不知道Go,但是我认为它会静态链接某些运行时库,而C程序则不是这种情况。但是,只要程序变大,就不必担心。 如上所述这里,静态链接Go运行时是默认的。该页面

  • Redux 很大部分 受到 Flux 的启发,而最常见的关于 Flux 的抱怨是必须写一大堆的样板代码。在这章中,我们将考虑 Redux 如何根据个人风格,团队偏好,长期可维护性等自由决定代码的繁复程度。 Actions Actions 是用来描述在 app 中发生了什么的普通对象,并且是描述突变数据意图的唯一途径。很重要的一点是 不得不 dispatch 的 action 对象并非是一个样板代码

  • 本文向大家介绍如何减少浏览器的reflow和repaint,包括了如何减少浏览器的reflow和repaint的使用技巧和注意事项,需要的朋友参考一下 1.避免在document上直接进行频繁的DOM操作,如果确实需要可以采用off-document的方式进行,具体的方法包括但不完全包括以下几种: (1). 先将元素从document中删除,完成修改后再把元素放回原来的位置 (2). 将元素的di

  • 问题内容: 假设我有一个布尔值流,而我正在编写的reduce操作是||(OR)。我是否可以这样编写它:如果true遇到值,则放弃对至少某些元素的求值? 我正在寻找某种程度的优化(也许是并行流),不一定要完全优化,尽管后者会很棒。 问题答案: 我怀疑您想要这种构造。 你可以看一下 Stream.of(1, 2, 3, 4).peek(System.out::println).anyMatch(i -

  • 问题内容: 我无法在快速工作区中渲染更少的CSS。 这是我当前的配置 (我的css / less文件 位于 “ public / stylo /”中) : 这是我的 main.jade文件 : 这是我的 main.less CSS : 这是我的好 东西 。 很酷的交易。现在: 我通过npm安装的次数较少, 并且从另一篇帖子中听说@imports应该引用而不是。在任何情况下,我已经试过了 组合 开关

  • 问题内容: 下面的程序根据需要运行,但是如何减少if语句的数量。有人告诉我,如果您的函数包含2个或更多if语句,那么您做错了。有什么建议?我试过使用switch语句,但这没有用,因为大小写不能是布尔值。 问题答案: 如何为案例创建方法: 然后,不是一堆东西,而是两个方法的调用集。您甚至可以创建一个调用上述两个方法的单个方法。 在上面的代码中,对我来说,问题的数量比重复代码的数量少。