RTP H264封包和解包分析

基础理论

RTSP RTP RTCP SDP基础知识-CSDN博客

RTP协议回顾以及网络知识补充

举例:在客户端向服务器发送 1MB 数据的过程中,涉及到多个网络层次的概念,包括数据切割、最大传输单元(MTU)、最大段大小(MSS)等。以下是这个过程的详细说明:

1.应用层 :客户端准备要发送的 1MB 文件。

2.传输层 :客户端使用 send 函数向服务器发送数据。每次发送 2KB(2048 字节)数据。调用 send(socket, data_buffer, 2048, 0);

3.传输层最大段大小(MSS):设置为 512 字节。根据 TCP 协议,MSS 是 TCP 层面上最大可发送数据段的大小。所以将每次发送的 2048 字节数据包切割成多个 512 字节的数据段。

4.链路层

  • MTU:设定为 1500 字节,指的是数据链路层能够传输的最大数据包大小。
  • 在链路层,数据包会被进一步封装,确保每个传输的数据包(帧)不超过 MTU 的限制。
  • TCP 头大小:20 字节,IP 头大小:20 字节,可用数据大小: 1500 -20 -20 =1460 字节。

5.物理层:链路层生成的帧通过物理介质(如电缆、无线等)传输。每个 512 字节的段被封装在链路层的帧中,并通过物理层发送到目标地址。

rtp传输h264如下:

​ 引出问题,当nalu.size过大如何发?

RTP之H264封包和解包

H264分析-CSDN博客

回顾NALU的基本格式是:NALU Header +RBSP

NALU Header类型1-5: 编码的图像数据(IDR、P、B帧等)

类型6-12: 辅助数据(SEI、SPS、PPS等)

类型14-18: 扩展数据

这里重点关注28FU-A分包模式

现在我们可以回答" 引出问题,当nalu.size过大如何发?"

当nalu.size过大我么可以通过分片的方式进行发送。

rtp发包方式

1.Single NAL Unit单一模式

当rtp<=1400 单包发(rtp:nalu) 1 : 1

RTP Header + NALU Header + NALU Data; (不包括startcode)

2. 非交错(non-interleaved)封包模式

在视频监控领域摄像头通过RTP 传输码流的打包⽅式都是基本这种,这种打包⽅案简单容易实现,⼜满⾜需要。

当rtp>1400 分包处理(rtp:nalu) n : 1

把⼀个⼤的NALU进⾏了切分,最后接收⽅则进⾏了合并,把多个RTP包合并成⼀个完整的NALU即可。因为底层MTU⼤⼩值固定为1500,从传输效率讲,这⾥⽤1400作为切分条件。如何切分?

RTP header + FU indicator + Fu header

FU indication

F和NRI已经在NALU的Header解释清楚了,就是NALU头的前⾯三个bit位,后⾯的

TYPE就是NALU的FU-A类型28。这样在RTP固定头后⾯第⼀字节的后⾯5bit提取出来就确认了该RTP包承载的不是⼀个完整的NALU,

FU header

S: 1 bit 当设置成1,开始位指示分⽚NAL单元的开始。当跟随的FU荷载不是分⽚NAL单元荷载的开

始,开始位设为0。

E: 1 bit 当设置成1, 结束位指示分⽚NAL单元的结束,即, 荷载的最后字节也是分⽚NAL单元的最后⼀个字节,当跟随的FU荷载不是分⽚NAL单元的最后分⽚,结束位设置为0。

也就是说**⼀个NALU切⽚时,第⼀个切⽚的SE是10,然后中间的切⽚是00,最后⼀个切⽚时11。**

R: 1 bit

保留位必须设置为0,接收者必须忽略该位。

Type: 5 bits

此处的Type就是NALU头中的Type,取1-23的那个值,表示 NAL单元荷载类型定义,

小结:

对于⽐较⼤的NLAU进⾏FU-A切⽚时,其中NALU的Header字段在RTP打包时划分为两个字节

1、NALU header的前3bit为RTP固定头后⾯第⼀个字节FU-indication的前3bit,后⾯5bit后⾯跟了FU-A打包这种类型28;

2、NALU header的后⾯5bit变成了RTP固定头第⼆字节的后⾯5bit,其中前3bit标识了分⽚的开始和结束。

3.交错(interleaved)封包模式

sps、pps、sei帧一起发送,简化 nalu (rtp:nalu) 1 : n

如何实现?可使用28方式

24-stap-a

如有一个 H.264 的 NALU 是这样的:

00 00 00 01 67 42 A0 1E 23 56 0E 2F ...

00 00 00 01 68 42 B0 12 58 6A D4 FF ...

封装成 RTP 包将如下:

RTP Header \] \[78 (STAP-A头,占用1个字节)\] \[第一个NALU长度 (占用两个字节)\] \[ 67 42 A0 1E 23 56 0E 2F \] \[第二个NALU长度 (占用两个字节)\] \[68 42 B0 12 58 6A D4 FF ...

67和68属于NALU 1 HDR

0x78 = ‭01111000‬, 低5bit即是十进制24

优点:网络传输效率高;

缺点:多帧缓存后再发送容易产生延迟

h264封包解包代码流程图

代码

jbjnb/rtsp-aac-264封包解包 - 码云 - 开源中国 (gitee.com)

参考

RTP协议全解(H264码流和PS流)------看完这篇可以毕业 - STN_LCD - 博客园 (cnblogs.com)

RTP分包模式(H264/H265) - 奔涌吧,后浪 - 博客园 (cnblogs.com)

学习资料分享

0voice · GitHub

相关推荐
纽格立科技2 小时前
动力的转向:当智能不再依赖碳基
车载系统·音视频·信息与通信·传媒
烟雨江南7852 小时前
会议语音识别私有化部署方案:音频不出内网,如何接入现有会议系统
人工智能·websocket·音视频·语音识别·ai客服
镭封17 小时前
短剧多人对白怎么配?一人完成多角色配音的办法
人工智能·音视频·语音识别·媒体
技灵AI18 小时前
Wan 3.0 API怎么做多参考商品视频?从图片、视频、音频分工到30秒交付
人工智能·prompt·aigc·音视频·wan 3.0
赛博仓鼠20 小时前
MiniMax H3 实测:8GB显存跑2K视频+原生音频,开源视频生成的新卷王
开源·aigc·音视频
byte轻骑兵21 小时前
【LE Audio】PBP精讲[4]: 公共广播通告的设计逻辑与数据交互流程
人工智能·音视频·le audio·低功耗蓝牙音频
hz5678921 小时前
手术室视频示教系统解决方案:让临床教学突破空间限制
安全·音视频·实时音视频·信息与通信·智能硬件
可乐鸡翅yeah_1 天前
混合内容 Mixed‑Content 安全策略,HLS HTTPS 页面加载 HTTP 资源排错实战
运维·ffmpeg·音视频·媒体·m3u8
揽秀亭长1 天前
音轨分离处理方案及效果测试分析
人工智能·音视频
美狐美颜SDK开放平台1 天前
直播APP如何兼顾画质与低延迟?视频美颜SDK性能优化开发思路
人工智能·深度学习·音视频·美颜sdk·第三方美颜sdk