H264的RTP载荷格式
H264中对于数据的存储分为两层,分别是 VCL: video coding layer 视频编码层 这是h264中block, macro block 以及 slice级别的定义,目的是为了独立网络传输,进行高效的编解码 NAL: network abstraction layer 网络提取层 NAL层的不同是为了根据不同的网络把VCL数据进行打包成不同的格式,进行传输 NAL H264中的数据分组有头部(譬如: pkt->data),解码器可以很方便的检测到NAL的分界,依次去除NAL进行解码,但为了节省码流,NAL没有在数据头部设立特定元素,如果编码数据存储在介质上,NAL依次紧密相连(这时就无法通过对象取读取一个nal数据了),就无法区分出不同的nal单元,为了解决该问题,存储的时候会在每一个nal前添加0x000001或0x000000。 但数据内部也可能出现0x000001或0x000000,为此nal中规定不能出现0x000001或0x000000,源数据需要进行如下变换: 原数据 替换数据 0X000000 0X00000300 0X000001 0X00000301 0X000002 0X00000302 0X000003 0X00000303 在网络传输过程中, NAL中的数据被分成NALU(nal unit)单元,然后由RTP进行封装传输 如上图所示