网站管理系统有哪些,做聊天网站的视频教程,广告公司图片大全,wordpress ip 地址修改密码音视频入门基础#xff1a;H.264专题系列文章#xff1a;
音视频入门基础#xff1a;H.264专题#xff08;1#xff09;——H.264官方文档下载
音视频入门基础#xff1a;H.264专题#xff08;2#xff09;——使用FFmpeg命令生成H.264裸流文件
音视频入门基础…
音视频入门基础H.264专题系列文章
音视频入门基础H.264专题1——H.264官方文档下载
音视频入门基础H.264专题2——使用FFmpeg命令生成H.264裸流文件
音视频入门基础H.264专题3——EBSP, RBSP和SODB 一、NALU
H.264码流中所有的数据都被封装成一个个NALU又叫NAL Unit全称为Network Abstraction Layer Unit中文被翻译为网络抽象层单元。而目前 H.264 流行的包装方式分别为AnnexB和avcC。对于AnnexB格式的H.264码流来讲为了分割各个 NALU 编码时在每个 NALU 前面加上0x000001或0x00000001作为startcode起始码。解码时要将带有startcode的NALU 去掉 startcode变为不带startcode的NALU 二、EBSP
去掉startcode后NALU 的第一个字节 为 占用 1 位的forbidden_zero_bit 占用 2 位 的nal_ref_idc 占用 5 位的nal_unit_type。它们加起来刚好8位也就是1个字节一般被我们称为NALU HeaderNAL Unit Header。解码时去掉startcode然后去掉NALU Header后的NALU负载被我们称为EBSPEncapsulate Byte Sequence Payload 三、RBSP
由于去掉startcode然后去掉NALU Header后的NALU负载 中可能存在形式为0x00000X其中X为0、1、2或3的数据为了防止它们跟startcode冲突编码时会在0x0000之后添加一个emulation_preventon_three_byte (防竞争字节值为0x03)使其变为0x0000030X就像下面这样
0x000000 0x00000300 0x000001 0x00000301 0x000002 0x00000302 0x000003 0x00000303 解码时将EBSP中的防竞争字节去掉就是RBSPRaw Byte Sequence Payload 四、SODB
SODB是真正的未加工过的H.264流。H.264 码流中的操作单位是位而不是字节。因为视频的传输和存贮是十分在乎体积的对于每一个比特bit要格外珍惜。所以H.264 中的操作单位是比特。比如H.264中的sps它的constraint_set0_flag等属性就只占了1比特。 这就导致可能出现一种情况H.264数据写完后写入的数据量不满一个字节。所以编码时要在未加工过的H.264流之后添加一个值等于1的尾部来表示H.264流的结束该位称为停止位(rbsp_stop_one_bit)。然后为了字节对齐在停止位值为1之后添加0位使得8位对齐简单来讲就是为了让H.264数据写完后最后写入的数据满一个字节。编码时通过补齐让H.264流从位流SODB变为字节流RBSP以便每个语法的第一个位始终与字节的第一个位对齐。RBSP 去掉补齐的数据后就是 SODBString of Data Bits 五、总结 六、参考文章
《H.264 stream structure》
《H.264中NALU、RBSP、SODB的关系》
《Introduction to H.264: (1) NAL Unit》 《H264 - what, why and how》