rtsp协议之数据传输方式

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字段之后的数据长度

原文链接:,转发请注明来源!