首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在NALU之后,如果不在附件B字节流中,是否允许额外的空字节?

在NALU之后,如果不在附件B字节流中,是否允许额外的空字节?
EN

Stack Overflow用户
提问于 2022-10-18 14:19:51
回答 2查看 70关注 0票数 0

我们有一个设备,可以创建包含H.264视频数据的MP4文件格式的视频文件。

现在我们注意到,在第一个AVCC块中,在SPS之后有4个空字节(00000000)。(我知道在视频数据中,SPS在技术上是不需要的,但也不是不允许的)在stsd头中,在AVCConfigurationBox中,我们也看到这些额外的空字节。

问题是:这些标准在技术上是允许的吗?我们有一些python代码来检查这个,然后抱怨。那么,我们需要更改设备中的代码还是检查代码?

在附件B字节流中,它们是允许的,但我认为这里不允许。

他们不可能是NALU的一部分,或者他们应该被模仿-阻止到00 0 0 3 00 00。

ffmpeg和vlc一点也不抱怨,但它们可能会更加健壮,以便尽可能多地播放视频文件。

编辑

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-27 07:48:44

在将代码传递给ffmpeg库之前,由于一些不必要的遗留原因,代码的某些部分进行了64位对齐。

因此,空字节不属于那里,而且肯定不是SPS的一部分。

票数 0
EN

Stack Overflow用户

发布于 2022-10-18 23:03:05

“我们有一个设备,可以创建包含H.264视频数据的MP4文件格式的视频文件。

两种可能性:

最不可能..。

(1) (1)那些空字节似乎是填充的,使所有32位对齐。通过这种方式,您可以以4字节块(使用一些readInt()命令或类似的)读取SPS。

如果您的长度为52个字节(0x34),您将得到13个整数/块。

PS:字节也可以是零填充,直到NALU开始在新的行/行。

(例如:如果显示在传统的十六进制数据的“每一行16字节”视图中,则很明显)。

很有可能..。

(2) (2)这4个零字节是SPS的有效字节,因为NALU大小将它们封装在SPS数据中。这将回答您的问题:"Are these technically allowed by the standard?" as 是,因为它们是实际SPS数据本身的一部分。您在不知情的情况下用“在stsd标头中,在AVCConfigurationBox__中,”确认了这一点,我们也看到了这些额外的空字节。

..。

“在附件B字节流中,它们是允许的,但我认为这里不允许。”

注意:SPS被称为Codec专用数据,可以存储为附件B或AVCC格式,而不管MP4本身的格式如何(例如:它们可以混合在一些MP4文件中)。

..。

“我们有一些Python检查并抱怨,那么我们需要更改设备中的代码还是检查代码呢?”

我会保留MP4字节的原样(从设备?)把检查边修好。例如,,它实际上对有什么抱怨?如果大小为52个字节,则必须将52个字节作为SPS内容读取。然后,它可以通过跳过+4个字节来确认一个新的NALU (跳过“长度大小”字节,并检查它是否具有用于SEI的0x06、用于关键帧的0x65或用于P/B帧的0x41

在您的图像中:看起来您有52字节的SPS,然后是4字节的PPS,然后是36字节的SEI。

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

https://stackoverflow.com/questions/74112580

复制
相关文章

相似问题

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