首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以使用NVENC删除开始代码?

是否可以使用NVENC删除开始代码?
EN

Stack Overflow用户
提问于 2014-09-26 11:23:47
回答 1查看 2.1K关注 0票数 1

我使用NVENC SDK对OpenGL帧进行编码,并在RTSP上对它们进行流。NVENC以几个NAL单元的形式给我编码数据。为了使用Live555对它们进行流处理,我需要找到启动码 (0x000x000x01)并删除它。我想避免这次手术。

NVENC有一个sliceOffset属性,我可以参考,但它表示片,而不是NAL单元。它只指向SPS和PPS头的结尾,实际数据从这里开始。我知道一个片段不等于一个NAL (如果我错了,请纠正我)。我已经在强制对编码数据进行单片处理。

有下列任何一种可能吗?

  1. 强迫NVENC编码单个NAL单元
  2. 强制NVENC指示每个编码数据块中的NAL单元位于何处
  3. 使Live555接受流的序列参数
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-26 18:46:49

似乎有一个点,每一个人试图在RTSP/RTP上做H.264可以归结为这个问题。这是我的两分钱:

1)有一个接入单元的概念。接入单元是一组表示编码帧的NAL单元(也可以是唯一的)。这就是你应该工作的逻辑层次。如果您想要编码器给您单个NAL单元,那么当编码过程从一个原始帧(例如SPS + PPS +编码图片)产生多个NAL单元时,您期望的是什么行为。尽管如此,还是有一些方法可以配置编码器以减少访问单元中的NAL单元数量(比如不包括AUD NAL,不重复SPS/PPS,不包括SEI NAL )--有了这些知识,您实际上可以知道期望什么,并强制编码器为每个帧提供单个NAL(当然,这并不适用于所有帧,但有了您对解码器所能处理的了解)。我不是NVENC的专家,我也刚刚开始使用它,但至少对于Intel Quick,关闭AUD,SEI和禁用PPS/SPS的重复使用给了我大约1 NAL的帧2 N.

2)无法回答这个问题,因为正如我所提到的,我对API并不熟悉,但我对此深表怀疑。

3) SPS和PPS应该位于第一个访问单元(从编码器获得的第一个比特流),您可以在比特流中找到正确的NAL并提取它们,或者可能有一个特殊的API调用来从编码器获取它们。

尽管如此,我并不认为实际运行比特流、解析开始代码和提取NAL单元的代码并将它们一个接一个地提供给Live555并不难。当然,如果编码器提供以AVCC格式输出比特流(与起始代码或附件B相比,它使用NAL单元之间的交错长度值,所以您可以跳到下一个单元而不查找前缀),那么您应该使用它。当只是RTP时,很容易自己实现传输,因为我在GStreamer方面运气不好,它没有对FU-A分组化的适当支持,如果使用RTSP,传输基础设施的开销更大,使用第三方库(如Live555 )是合理的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26058428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档