NALU
buff :NAL数据buff
len :NAL数据长度
cnt :包数
max_fu_size :每包长度,一般1400
nalu_type :NAL类型
cnt = ((len % max_fu_size) == 0) ? (len / max_fu_size) : ((len / max_fu_size) + 1)
nalu_type = buff[0] & 0x1F //得出NAL类型
FU Indicator = buff[0] & 0xE0 | 0x1C; //0x1C数FU打包类型,28
FU Header = ((i == 0) ? (0x80) : 0x00) | /*S*/
((i == (cnt - 1)) ? (0x40) : (0x00)) | /*E*/
nalu_type;
首包:
0x7c 0x85
0111110010000101
0 是F
11 是NRI
11100 是FU Type,这里是28,即FU-A
1 是S,Start,说明是分片的第一包
0 是E,End,如果是分片的最后一包,设置为1,这里不是尾包
0 是R,Remain,保留位,总是0
00101 是NAl Type,这里是5,说明是关键帧
中间的N个包:
0x7c 0x05
0111110000000101
0 是F
11 是NRI
11100 是FU Type,这里是28,即FU-A
0 是S,Start,说明是分片的第一包
0 是E,End,如果是分片的最后一包,设置为1,这里不是尾包
0 是R,Remain,保留位,总是0
00101 是NAl Type,这里是5,说明是关键帧
尾包:
0x7c 0x45
0111110001000101
0 是F
11 是NRI
11100 是FU Type,这里是28,即FU-A
0 是S,Start,说明是分片的第一包
1 是E,End,如果是分片的最后一包,设置为1,这里是尾包
0 是R,Remain,保留位,总是0
00101 是NAl Type,这里是5,说明是关键帧
SPS的NAL单元的首字节为0x67,nal type 为 7。
FU Indicator的前三位NAL单元的首字节的前三位,后五位为NAL单元的类型,刚好与NAL单元的首字节是一致。所以单包时,RTP包头后直接跟H264数据即可。
转载请标明出处,谢谢!