AVC1与AVC与H264
AVC1和H264有什么区别
AVC1、AVC和H264是同一视频编码标准的不同名称或标识。
H264是一种广泛使用的视频压缩标准,全称为高级视频编码(Advanced Video Coding)。它是ITU-T(国际电信联盟电信标准化部门)和ISO/IEC(国际标准化组织/国际电工委员会)共同开发的视频编码标准,旨在提供比早期标准如MPEG-2更高的编码效率和更好的视频质量。H264因其优秀的压缩性能和广泛的应用范围,已成为许多视频传输和存储的首选格式。
AVC(Advanced Video Coding)是H264的另一个名称,两者实际上是同一个标准。AVC是H264标准在制定过程中的名称,而H264则是该标准最终发布时的名称。在很多技术文档和场合中,AVC和H264会交替使用,指的是同一个视频编码标准。
AVC1通常是在特定上下文中使用的H264/AVC的标识,特别是在某些文件格式或容器中。例如,在MP4文件格式中,AVC1经常作为视频流的标识符出现。这并不意味着AVC1是一个新的或不同的标准,而只是H264/AVC在不同环境中的一种表示方式。
AVC1、AVC和H264实际上是同一视频编码标准的不同称呼或表示方式。它们在技术上是等价的,只是根据不同的应用场景和上下文,可能会有不同的命名或标识。无论是在学术研究、工业应用还是日常生活中,这些名称都可以互换使用,指的是同一种高效、先进的视频编码技术。
H264格式Annex-B与 AVCC区别
H264格式中Annex-B与AVCC的区别
AVCC格式:也叫AVC1格式或MPEG-4格式,是字节对齐的,因此也被称为Byte-Stream Format。它主要用于mp4、flv、mkv等文件格式中,同时也被VideoToolbox等工具所支持。
Annex-B格式:也被称为MPEG-2 transport stream format格式(ts格式)或ElementaryStream格式。
使用start code分隔NAL(Network Abstraction Layer)单元。start code为三字节或四字节,通常是四字节(0x000001或0x00000001)。
SPS(Sequence Parameter Set)和PPS(Picture Parameter Set)按流的方式写在头部。
使用NALU(Network Abstraction Layer Unit)长度(固定字节,通常为4字节)来分隔NAL单元。
在头部包含extradata(或sequence header)的结构体。extradata包含分隔的字节数、SPS和PPS等信息。
在AVCC格式中,extradata的结构体包含了多个关键信息,包括版本、AVC profile、AVC compatibility、AVC level等,以及NAL单元长度所占的字节数(NALULengthSizeMinusOne+1)、SPS和PPS的数量及其数据。
extradata结构体解析:version:版本号为1,对应二进制表示为0x01。
avc profile、avc compatibility、avc level:这些值来自SPS的之一个元素,分别表示编码器的配置、兼容性和级别。
NALULengthSizeMinusOne:表示每个NALU数据长度所占的字节数减1。例如,如果NALULengthSizeMinusOne的值为3,则每个NALU的数据长度占4个字节。
reserved:保留位,通常所有位置1。
number of SPS NALUs和number of PPS NALUs:分别表示SPS和PPS的数量,通常为1。
SPS size和PPS size:分别表示SPS和PPS的长度。
SPS NALU data和PPS NALU data:分别表示SPS和PPS的实际数据。
以一张Mp4文件的原始数据为例,可以逐字节解析出extradata中的各个字段:
version:01,表示版本号为1。avc profile:64,表示编码器的配置。avc compatibility:00,表示兼容性。avc level:0A,表示编码级别。NALULengthSizeMinusOne:FF,转换为二进制后为0b11111111,与0x3进行AND运算后加1,得到NAL单元长度占4个字节。number of SPS NALUs:E1的低位5位为0x1,表示有1个SPS。SPS size:00 19,表示SPS的长度为25字节。SPS NALU data:随后的25字节为SPS的实际数据。number of PPS NALUs:01,表示有1个PPS。PPS size:00 07,表示PPS的长度为7字节。PPS NALU data:随后的7字节为PPS的实际数据。后续的数据则根据NAL单元长度进行解析,每个NALU的数据长度由前面的4个字节指定。
H264格式中的Annex-B与AVCC在定义、结构和具体内容上存在显著差异。Annex-B使用start code分隔NAL单元,并将SPS和PPS写在头部;而AVCC则使用NALU长度分隔NAL单元,并在头部包含extradata结构体来存储SPS、PPS等信息。这些差异使得两种格式在应用场景和解析方式上有所不同。