H264视频传输、编解码----RTP/RTCP/RTSP协议数据传输基于UDP or TCP

用一句简单的话总结:RTSP发起/终结控制流媒体、RTP传输流媒体数据 、RTCP对RTP数据进行控制,同步。

一般情况下,RTSP协议采用TCP协议传输控制流媒体的指令,RTP/RTCP协议采用UDP方式传输控制指令。但是有时候RTSP协议数据也可以使用UDP,或者RTP/RTCP也可以使用TCP;

1、RTSP协议采用TCP协议传输控制流媒体的指令,RTP/RTCP协议采用UDP方式传输控制指令

  •  TCP协议基于链接,提供可靠服务,RTSP协议的控制指令可以发送/接收成功
  • UDP无链接,不提供可靠服务,有丢包的可能。
  • RTSP协议需要1对端口,RTP/RTCP需要2对端口;(客户端和服务端)

2、RTSP/RTP/RTCP都是用UDP传输:

  • 需要三对端口;
  • UDP无链接,不提供可靠服务,有丢包的可能。

3、RTSP/RTP/RTCP都是用TCP传输

  • RTSP/RTP的控制命令和数据都通过一个端口,即RTSP的端口(默认为554),进行交互。RTCP使用一对端口;
  • TCP协议提供可靠的流传输,丢包可以重传;
  • TCP包更容易穿透中间网络路由器。
  • 使得RTSP/RTP/RTCP的打包、解包更加复杂,增大编码难度,二元交织,需要额外的协议支持;
  • 启动速度慢,TCP报文头比UDP包头要大,占用带宽资源,会影响RTP流媒体数据的实时性,导致实时流的延时。

但是使用TCP传输RTSP/RTP还是存在的,看一下这个过程是如何执行的:

当使用TCP协议承载RTSP/RTP时,所有的RTSP命令和RTP流媒体数据都将通过RTSP端口(通常是554)进行发送。同时,数据将经过可以区分两种数据的协议处理后才能进行发送;

接下来看一下通知服务端使用TCP承载RTSP/RTP的主要过程

SETUP

要使用TCP连接,RTSP客户端需要在SETUP阶段请求TCP连接。SETUP命令中应该包括如下格式的Transport: 
 

Transport: RTP/AVP/TCP;interleaved=0-1

上述Transport将告诉服务端使用TCP协议发送媒体数据,并且使用信道 0 和 1 对流数据以及控制信息进行交织。详细说来,使用偶数信道作为数据传输信道RTP,使用奇数信道作为控制信道(数据信道 + 1)RTSP。所以,如果你设定数据信道为 0 ,那控制信道应该是 0 + 1 = 1。

SETUP rtsp://192.168.100.123:554/mpeg4cif/track1 RTSP/1.0
CSeq: 4
User-Agent: LibVLC/2.2.4 (LIVE555 Streaming Media v2016.02.22)
Transport: RTP/AVP/TCP;unicast;interleaved=0-1  //RTP/AVP 默认为UDP

SETUP之后,RTP数据将通过用来发送RTSP命令的TCP Socket进行发送。RTP数据将以如下格式进行封装:

| magic number | channel number | data length | data  | 

magic number:   RTP数据标识符,"$" 一个字节
channel number: 信道数字 - 1个字节,用来指示信道
data length :   数据长度 - 2个字节,用来指示插入数据长度
data :          数据 - ,比如说RTP包,总长度与上面的数据长度相同

RTP,RTCP数据和RTSP数据共享TCP数据通道,所以必须有一个标识来区别三种数据。

RTP和RTCP数据会以$符号+1个字节的通道编号+2个字节的数据长度,共4个字节的前缀开始,RTSP数据是没有前缀数据的。RTP数据和RTCP数据的区别在于第二个字节的通道编号.

下面给出一个完整的交互过程:

OPTIONS rtsp://222.201.145.236/slamtv60.264 RTSP/1.0
CSeq: 2
User-Agent: LibVLC/1.1.11 (LIVE555 Streaming Media v2011.05.25)

RTSP/1.0 200 OK
CSeq: 2
Date: Wed, Mar 07 2012 03:48:07 GMT
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER
DESCRIBE rtsp://222.201.145.236/slamtv60.264 RTSP/1.0
CSeq: 3
User-Agent: LibVLC/1.1.11 (LIVE555 Streaming Media v2011.05.25)
Accept: application/sdp

RTSP/1.0 200 OK
CSeq: 3
Date: Wed, Mar 07 2012 03:48:07 GMT
Content-Base: rtsp://222.201.145.236/slamtv60.264/
Content-Type: application/sdp
Content-Length: 527

v=0
o=- 1331092087436965 1 IN IP4 222.201.145.236 
s=H.264 Video, streamed by the LIVE555 Media Server
i=slamtv60.264//媒体名称
a=type:broadcast  广播方式
a=control:*
a=range:npt=0-
m=video 0 RTP/AVP 96 //媒体类型+端口+传输协议+格式列表
c=IN IP4 0.0.0.0
b=AS:500
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=4D4033;sprop-parameter-sets=Z01AM5JUDAS0IAAAAwBAAAAM0eMGVA==,aO48gA==
a=control:track1
SETUP rtsp://222.201.145.236/slamtv60.264/track1 RTSP/1.0
CSeq: 4
User-Agent: LibVLC/1.1.11 (LIVE555 Streaming Media v2011.05.25)
Transport: RTP/AVP/TCP;unicast; interleaved=0-1
//Transport:传输协议+传播方式(单播或多播)+通道号。

RTSP/1.0 200 OK
CSeq: 4
Date: Wed, Mar 07 2012 03:48:18 GMT
Transport: RTP/AVP/TCP;unicast;destination=125.216.243.188;source=222.201.145.236;interleaved=0-1
Session: 289BFEAE
RTP/AVP/TCP;unicast; interleaved=0-1
//Transport:传输协议+传播方式(单播或多播)+通道号。
PLAY rtsp://222.201.145.236/slamtv60.264/ RTSP/1.0
CSeq: 5
User-Agent: LibVLC/1.1.11 (LIVE555 Streaming Media v2011.05.25)
Session: 289BFEAE
Range: npt=0.000-

RTSP/1.0 200 OK
CSeq: 5
Date: Wed, Mar 07 2012 03:48:18 GMT
Range: npt=0.000-
Session: 289BFEAE
RTP-Info: url=rtsp://222.201.145.236/slamtv60.264/track1;seq=61622;rtptime=1335382752

http://blog.csdn.net/machh

https://github.com/EasyDarwin/Course

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值