通过命令:
ffmpeg -re -i /home/zhe/Videos/12.mp4 -an -c copy -f rtp rtp://127.0.0.1:10086
推出rtp流,抓包如下:
首先第一个rtp流的载荷如下:
payload=41

18 00 19 67 64 00 32 AC 2C 6A 
80 A0 02 D6 9B 80 80 80 A0 00 
00 E1 00 00 2B F2 00 80 00 04 
68 EE 3C B0 00 05 06 E5 01 C3 
80

nal header start code 18
nal type is PPS 25字节
nal type is SPS 4字节
nal type is SEI 5字节
25+2+4+2+5+2=41字节
type is 24, STAP-A NAL packet

发现第一个包是STAP-A类型的。
开始是4个字节的RTP头,接着1字节NAL单元类型,应该是24,然后2字节表示第1个NALU长度,接着1字节表示第1个NALU类型,然后若干个字节的NALU负载数据,以此类推。

其中rtp头的M是0,一般只要不是IDR帧M都是0,P好像都是0,没有遇到过1
P:填充标志,占1位,如果P=1,则在该报文的尾部填充一个或多个额外的八位组,它们不是有效载荷的一部分。
M: 标记,占1位,不同的有效载荷有不同的含义,对于视频,标记一帧的结束;对于音频,标记会话的开始

剩下的就是FU-A类型,当rtp包的hasMark为1时,NAL刚好E也是1

更多推荐