GB28181协议下的RTP传输
1. RTP协议概述
RTP(Real-Time Transport Protocol)基于RFC 3550,专为实时音视频传输设计,通常运行于UDP或TCP之上,结合RTCP实现质量控制。GB28181中主要封装方式:
- PS封装:遵循ISO/IEC 13818-1,将音视频打包为PS包再封装为RTP负载,适用于复杂流场景(如多路复用)。
- 基本流封装:直接封装H.264/H.265的NALU或G.711音频帧,减少协议开销。
2. 支持的音视频格式
视频编码
编码格式 | PS封装负载类型 | 基本流负载类型 | 规范文件 | 关键特性 |
---|---|---|---|---|
H.264 | 96 | 98 (FU-A分片) | RFC 6184 | 支持NALU分片(FU-A/FU-B) |
H.265 | 96 | 98 | RFC 7798 | 高压缩效率,需携带VPS/SPS/PPS |
SVAC | 96 | 20 | GB/T 25724-2017 | 国标专用编码格式 |
音频编码
编码格式 | 负载类型 | 采样率 | 帧长 | 规范文件 |
---|---|---|---|---|
G.711A | 8 | 8 kHz | 160字节 | ITU-T G.711 |
G.723.1 | 4 | 8 kHz | 30 ms帧 | ITU-T G.723.1 |
AAC | 动态分配 | 16-48 kHz | 1024样本 | RFC 3640 |
3. 打包传输方式
PS封装流程
- 生成PS包:
- 每个PS包由系统头、PSM(Program Stream Map)和多个PES包组成。
- 关键帧(如H.264 I帧)需携带SPS/PPS信息。
- RTP分片:
- PS包长度超过MTU时,按RFC 3984分片,使用分片标识(FU Indicator和FU Header)。
- 示例:H.264 FU-A分片头部结构:
FU Indicator (F|NRI|Type=28) → FU Header (S|E|Type) → NALU Payload
基本流封装
- H.264/H.265:直接发送NALU或分片单元,无需PS层。
- 音频:G.711每帧160字节,对应单个RTP包。
4. RTP传输模式
GB28181支持 UDP 和 TCP 两种传输层协议,TCP分为 主动模式(Active) 和 被动模式(Passive)。
(1) RTP over UDP
- 特点:
- 默认模式,低延迟但可能丢包。
- 依赖RTCP反馈网络质量(如丢包率、抖动)。
- SDP示例:
m=video 5004 RTP/AVP 96
a=rtpmap:96 PS/90000
a=fmtp:96 profile-level-id=420029; packetization-mode=1
(2) RTP over TCP
- 协议规范:遵循RFC 4571,通过
$
分隔符标识数据块长度(格式:$[长度][数据]
)。 - 传输模式:
- 主动模式(Active) :设备主动发起TCP连接。
m=video 2000 TCP/RTP/AVP 96
a=setup:active // 设备主动连接
a=connection:new // 新建连接
- 被动模式(Passive) :设备监听端口等待连接。
m=video 3000 TCP/RTP/AVP 96
a=setup:passive // 设备被动等待
a=connection:new
- 适用场景:
- 主动模式:设备具备公网IP或直连能力(如专线网络)。
- 被动模式:设备位于NAT后,需端口映射或反向代理。
5. RTCP协议功能
-
质量控制:通过SR(Sender Report)和RR(Receiver Report)交换以下信息:
字段 说明 丢包率 接收端统计的丢包比例 抖动(Jitter) 数据包到达时间波动 延迟 端到端传输延迟 -
同步机制:通过NTP时间戳和RTP时间戳对齐音视频流。
-
带宽自适应:根据网络状况动态调整编码码率或分片策略。
6. SDP描述详解
关键字段
- 媒体行(
m=
):m=video 5004 RTP/AVP 96
→ 视频流,UDP端口5004,负载类型96。m=video 2000 TCP/RTP/AVP 96
→ 视频流,TCP端口2000。
- 属性(
a=
):a=rtpmap:96 PS/90000
→ 负载类型96对应PS封装,时钟频率90kHz。a=fmtp:96 profile-level-id=420029
→ H.264的SPS参数。a=setup:active/passive
→ 指定TCP连接模式。
完整SDP示例(TCP被动模式)
v=0
o=34020000001320000001 0 0 IN IP4 192.168.1.100
s=GB28181 Stream
c=IN IP4 192.168.1.100
t=0 0
m=video 3000 TCP/RTP/AVP 96
a=setup:passive
a=connection:new
a=rtpmap:96 PS/90000
a=fmtp:96 streamtype=1; profile=1; sprop-parameter-sets=Z0IAH5WoFAFuQA==,aM4yyA==
m=audio 3002 TCP/RTP/AVP 8
a=setup:passive
a=connection:new
a=rtpmap:8 PCMA/8000
7. 传输模式选择建议
模式 | 延迟 | 可靠性 | 适用场景 |
---|---|---|---|
UDP | 低 | 低 | 局域网、专线网络 |
TCP主动 | 中 | 高 | 设备直连服务器(无NAT) |
TCP被动 | 中 | 高 | 设备位于内网(需端口映射) |
8. 开发注意事项
- 分片处理:H.264/H.265大帧需分片传输,需正确处理FU-A头部标记(S/E位)。
- 时间戳同步:RTP时间戳需基于90kHz时钟(视频)或8kHz(音频),避免音画不同步。
- NAT穿透:TCP被动模式需配置端口映射或使用云网关。
- 错误恢复:TCP模式下需实现连接重试和断线重传机制。