RTSP流媒体数据传输的两种方式(TCP和UDP)
1.传输协议
通常情况下rtsp协议中数据传输的实现是UDP,因工作需要,想让rtsp的数据传输部分用TCP实现。
1.1 RTSP - RTP over UDP
要使用UDP连接,RTSP客户端需要在SETUP阶段请求UDP连接。SETUP命令中应该包括如下格式的Transport:
Transport: RTP/AVP;unicast;client_port=8000-8001
使用偶数信道作为数据传输信道,使用奇数信道作为控制信道(数据信道 + 1)。比如上面8000是RTP数据端口,8001是RTCP控制端口
UDP SETUP命令示例
RTP Data
SETUP之后,RTP数据将通过用来发送RTSP命令的UDP Socket进行发送。RTP数据将以如下格式进行封装:
data
data - 数据,比如说RTP包数据
1.2 RTSP - RTP over TCP
要使用TCP连接,RTSP客户端需要在SETUP阶段请求TCP连接。SETUP命令中应该包括如下格式的Transport:
Transport: RTP/AVP/TCP;interleaved=0-1
上述Transport将告诉服务端使用TCP协议发送媒体数据,并且使用信道 0 和 1 对流数据以及控制信息进行交织。详细说来,使用偶数信道作为数据传输信道,使用奇数信道作为控制信道(数据信道 + 1)。所以,如果你设定数据信道为 0 ,那控制信道应该是 0 + 1 = 1。
TCP SETUP命令示例
RTP Data
SETUP之后,RTP数据将通过用来发送RTSP命令的TCP Socket进行发送。RTP数据将以如下格式进行封装:
| magic number | channel number | embedded data length | data |
magic number - 1字节,值为0x24,RTP数据标识符,"$"
channel number - 1字节,信道数字 - 1个字节,用来指示信道
embedded data length - 2字节,数据长度,用来指示插入数据长度
data - 数据,比如说RTP包数据,总长度与上面的数据长度相同
2.区别
参考RFC2326的10.12那一节,Embedded (Interleaved) Binary Data。
区别1:
使用TCP传输数据,RTSP、RTP和RTCP都使用同一个端口。媒体数据作为RTSP的Response传输到Client。
使用UDP传输数据,RTSP、RTP和RTCP都使用不同端口。
区别2:
RTP包头差异
rtp基于tcp的包头比基于udp的包头多了4个字节:
* magic固定为0x24,
* channel用来区分音视频等多路流媒体的通道,其中偶数通道为流媒体内容,奇数通道为RTCP
* len表示数据包的长度减去开始的4个字节,即len字段之后的数据长度