标签:码流 编码 slice 字节 h264 VCL NAL
H264码流分层
1.NAL层(主要用于网络传输)
Network Abstraction Layer,视频数据网络抽象层。
方便于在网络传输视频流,因为在网络传输时,经常出现丢包,延迟,乱序,如果只传输二进制的数据,如果出现了乱序,重传,丢包,则没有纠错的能力,有了NAL层之后,接收端就能根据这个NAL头判断出有没有丢失,有没有乱序,有没有重传。然后进行相应的处理,如重传某个包。
2.VCL层
Video Coding Layer,视频数据编码层。
帧内编码,帧间编码,熵编码打包成的数据就是这一层。(实际的图像数据)
VCL结构关系
1.每个被压缩后的视频帧是由一个或多个slice组成的,
(对于h264,一般一个帧由一个slice组成,但是也可以由多个slice组成,slice作用时将帧分成多个小条,方便网络传输,但是大多数一帧由一个slice组成)。
2.每个slice由多个宏块组成。默认16x16像素一个宏块。
码流的基本概念
1.SODB(string of Data Bits)
原始数据比特流(二进制数据串),长度不一定是8的倍数,故需要补齐。它是由VCL层产生的。
(帧内编码,帧间编码,熵编码出来的没有做任何处理的二进制数据串。这个数据串是以位码在一起的,因为一位一位的才能压缩的紧密,如果是按照字节,如果一个字节只用了前三位,后面五位空了都是0,那就浪费了很多空间,浪费了很多有效的数据,但是用位码在一起的时候长度很可能不是8的整数倍,计算机以字节为单位进行处理比较好处理,如果都是位来处理计算,计算机也很麻烦)。
按位计算。
2.RBSP (Raw Byte Sequence Payload)
让原始数据按照字节的顺序组装起来。
SODB + trailing bits
算法是如果SODB最后一个字节不对齐,则补1和多个0。
例:
(如果差三位,则补1个1,两个0)
(如果差五位,则补1个1和4个0)
按字节计算,分配内存也好分配了。
3.NALU
NAL Header(1 BYTE)+RBSP
所谓的NAL层就是1个byte的header+H264编码器编出的RBSP( 也就是VCL)
一个个NALU组成了H264 码流。
标签:码流,编码,slice,字节,h264,VCL,NAL 来源: https://blog.csdn.net/qq_43559669/article/details/121238776
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。