当前位置:网站首页>RTP协议浅析
RTP协议浅析
2022-08-11 11:32:00 【blackstar】
基础概念
全称: 实时传输协议,是一个网络协议;由IETF多媒体传输工作小组在 1996年中公布 作用: 详细说明了在互联网上传输音频和视频的标准数据包格式 协议栈: 位于传输层上,属于传输层的子层。主要使用传输层的 多播和 单播
使用场景
简单多播音频会议 音视频会议 混合器和转发器
数据包格式
RTP头格式
大小:固定最小12个字节 报文格式
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X| CC |M| PT | sequence number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| timestamp |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| synchronization source (SSRC) identifier |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
| contributing source (CSRC) identifiers |
| .... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
报文字段说明
version(V):2bits, RTP版本号;当前版本号位2 padding(P):1bit,填充位;如果该为被设置,则RTP报文包尾包含一个或多个额外的非有效载荷的字节 extension(X):1bit,扩展位;如果该位被设置,则固定头后必须紧跟一个扩展头,格式如下:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| defined by profile | length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| header extension |
| .... |CSRC count(CC):4bits,CSRC计数器;记录了CSRC (贡献源标识符列表,与混合器有关) 标识符列表的长度 marker(M):1bit,标记位;由配置文件解释,它的目的是允许在包流中标记诸如帧边界之类的重要事件 payload type(PT):7bits,有效载荷类型;规范了RTP有效载荷数据 (音频或视频) 的格式,详情可参考 RFC 3551 sequence number:16bits,包序列号,递增;接收器可以根据序列号进行数据包丢失检测和包顺序的恢复 timestamp:32bits,包采集时间点;单独线性递增 synchronization source identifier(SSRC):32bits,同步源标识符;包来源标识符,随机生成;同一会话中的任意两个同步源标识符不可相同,必须做好冲突检测和解决冲突 contributing source identifiers(CSRC):每项32bits,共0~15项,贡献源标识符列表;如果超过15个贡献源,只使用15个;混合器使用贡献源的SSRC标识符插入到CSC表示中
RTP有效载荷
| 规范了音频或视频数据的标准格式
音频编码的有效载荷类型列表
PT encoding media type clock rate channels
name (Hz)
___________________________________________________
0 PCMU A 8,000 1
1 reserved A
2 reserved A
3 GSM A 8,000 1
4 G723 A 8,000 1
5 DVI4 A 8,000 1
6 DVI4 A 16,000 1
7 LPC A 8,000 1
8 PCMA A 8,000 1
9 G722 A 8,000 1
10 L16 A 44,100 2
11 L16 A 44,100 1
12 QCELP A 8,000 1
13 CN A 8,000 1
14 MPA A 90,000 (see text)
15 G728 A 8,000 1
16 DVI4 A 11,025 1
17 DVI4 A 22,050 1
18 G729 A 8,000 1
19 reserved A
20 unassigned A
21 unassigned A
22 unassigned A
23 unassigned A
dyn G726-40 A 8,000 1
dyn G726-32 A 8,000 1
dyn G726-24 A 8,000 1
dyn G726-16 A 8,000 1
dyn G729D A 8,000 1
dyn G729E A 8,000 1
dyn GSM-EFR A 8,000 1
dyn L8 A var. var.
dyn RED A (see text)
dyn VDVI A var. 1
视频编码的有效载荷类型列表
PT encoding media type clock rate
name (Hz)
_____________________________________________
24 unassigned V
25 CelB V 90,000
26 JPEG V 90,000
27 unassigned V
28 nv V 90,000
29 unassigned V
30 unassigned V
31 H261 V 90,000
32 MPV V 90,000
33 MP2T AV 90,000
34 H263 V 90,000
35-71 unassigned ?
72-76 reserved N/A N/A
77-95 unassigned ?
96-127 dynamic ?
dyn H263-1998 V 90,000
关于 G.711.1 音频编码载荷类型的举例说明
有效载荷头
0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|0 0 0 0 0| MI |
+-+-+-+-+-+-+-+-+| mode index(MI):模式索引,标识音频帧的模式;只能使用标准中指定的值,其他值作为保留值,备将来使用
音频数据
| 紧跟在有效载荷头后,连续的音频帧按时间顺序打包。所有帧必须具有相同的模式,由有效载荷头的 MI 指示
| 一帧的数据大小由模式给出:
nb_frames = (size_of_audio_data) / (size_of_frame)
R1模式
+-------------------------------+
| L0 |
+-------------------------------+R2a模式
+-------------------------------+--------+
| L0 | L1 |
+-------------------------------+--------+R2b模式
+-------------------------------+--------+
| L0 | L2 |
+-------------------------------+--------+R3模式
+-------------------------------+--------+--------+
| L0 | L1 | L2 |
+-------------------------------+--------+--------+音频参数映射到SDP参数
| SDP协议相关知识,本文章不做详细赘述,只做用例说明
m=audio 54874 RTP/AVP 96 8
a=rtpmap:96 PCMA-WB/16000
a=rtpmap:8 PCMA/8000
RTP报文结构
完整的报文格式
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<+
|V=2|P|X| CC |M| PT | sequence number | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| timestamp | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| synchronization source (SSRC) identifier | |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ |
| contributing source (CSRC) identifiers | |
| .... | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| RTP extension (OPTIONAL) | |
+>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| | payload ... | |
| | +-------------------------------+ |
| | | RTP padding | RTP pad count | |
+>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<+
抽象的报文结构
+-+-+-+-+-+-+-+-+-+-+
| header | payload |
+-+-+-+-+-+-+-+-+-+-+
协议栈
安全性
| SRTP: 安全实时传输协议,数据包格式如下:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<+
|V=2|P|X| CC |M| PT | sequence number | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| timestamp | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| synchronization source (SSRC) identifier | |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ |
| contributing source (CSRC) identifiers | |
| .... | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| RTP extension (OPTIONAL) | |
+>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| | payload ... | |
| | +-------------------------------+ |
| | | RTP padding | RTP pad count | |
+>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<+
| ~ SRTP MKI (OPTIONAL) ~ |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| : authentication tag (RECOMMENDED) : |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| |
+- Encrypted Portion* Authenticated Portion ---+
| 安全性相关协议,超出本文章范围,不做详细说明;后续根据需要,单独进行说明。
参考文献
边栏推荐
猜你喜欢
随机推荐
从零开始配置 vim(11)——插件管理
[Study Notes] Maximum matching of general graphs
巧用自定义函数,文本控件秒变高速缓存
Volatile关键字的作用
Starting from zero configuration vim (11) -- plug-in management
悠漓带你玩转C语言(详解操作符1)
2.MySQL ---- 修改数据库的字符集(日常小技巧)
沃土云创计划重磅来袭
pgr_createTopology
去年今日我凭借这份文档,摇身一变成了被BAT大牛们看中的幸运儿
学习二叉树
StratoVirt 中的虚拟网卡是如何实现的?
Bitmap这个“内存刺客”你也要小心
分析 Flink 任务如何超过 YARN 容器内存限制
PerfView专题 (第一篇):如何寻找热点函数
自动售货机
【毕业设计】远程智能浇花灌溉系统 - stm32 单片机 嵌入式 物联网
Kubernetes应用发布思路分析
【学习笔记】一般图最大匹配
98转出0转入,985高校土木工程沦为“天坑”引热议