RTSP over UDP与RTSP over TCP取流对比
1、RTSP(Real Time Streaming Protocol) 应用层协议—流媒体服务器远程控制
0、其语法和运作和http 1.1相似
1、提供流媒体服务器的远程控制(诸如暂停,快进等控制,而它本身并不传输数据)
服务器端可以自行选择使用TCP或UDP来传送串流内容,它的语法和运作跟HTTP 1.1类似,但并不特别强调时间同步,所以比较能容忍网络延迟。
2、允许同时多个串流需求控制(Multicast),除了可以降低服务器端的网络用量,还可以支持多方视频会议(Video onference)。
//因为与HTTP1.1的运作方式相似,所以代理服务器《Proxy》的快取功能《Cache》也同样适用于RTSP,并因RTSP具有重新导向功能,可视实际负载情况来转换提供服务的服务器,以避免过大的负载集中于同一服务器而造成延迟。
1.1 rtsp和http的区别和联系
相同点:均用纯文本来发送消息,且语法类似。Rtsp这样设计是为了能够兼容使用以前的HTTP协议代码 。
区别:
rtsp有状态(当前状态影响RTSP的命令的执行)👉rtsp的命令之间有先后依赖关系
Rtsp不管处于什么状态都不会去断掉连接。
RTSP协议的双方都能发送reuest请求,而http中只有客户端能发送请求
http不保存状态,不保持连接状态(发送命令后连接就会断开),且命令之间没有依赖性。
rtsp协议使用554端口,http使用80端口。
RTSP使用URI请求时包含绝对URI。而由于历史原因造成的向后兼容性问题,HTTP/1.1只在请求中包含绝对路径,把主机名放入单独的标题域中;
在RTSP协议中,载荷数据一般是通过带外方式来传送的(除了交织的情况),及通过RTP协议在不同的通道中来传送载荷数据。而HTTP协议的载荷数据都是通过带内方式传送的,比如请求的网页数据是在回应的消息体中携带的。
1.2 rtsp和sip的区别和联系
SIP(Session Initiation Protocol),是基于IP的一个应用层控制协议。由于SIP是基于纯文本的信令协议,可以管理不同接入网络上的会话等。会话可以是终端设备之间任何类型的通信,如视频会话、既时信息处理或协作会话。该协议不会定义或限制可使用的业务,传输、服务质量、计费、安全性等问题都由基本核心网络和其它协议处理。
(1)联系:sip和rtsp都是应用层的控制协议,负责一次通信过程的建立和控制和结束,不负责中间的传输部分。他们都是基于纯文本的信令协议,穿墙性能良好。支持tcp、udp,支持多方通信。他们都需要服务器支持,都支持会话中重定向。sip和rtsp 都使用sdp协议来传送媒体参数,使用rtp(rtcp)协议来传输媒体流。
(2)区别:rtsp是专门为流媒体制定的协议,在多个媒体流的时间同步方面比sip强大。rtsp还提供网络负载均衡的功能,减轻服务器压力和网络带宽要求。sip一般用来创建一次音频、视频通话(双向),而rtsp一般用来做视频点播、视频监控等(单向)。当然,从原理上讲,rtsp也可以做双向的视频通话。
1.3 RTSP和RTP(RTCP)的关系
rtsp负责建立和控制会话,rtp负责多媒体的传输,rtcp配合rtp做控制和流量统计,他们是合作的关系。
RTSP的URL
rtsp_URL = (“rtsp:”| “rtspu:”) “//” host [“:”port”] /[abs_path]/content_name
host:可以是一个有效的域名或是IP地址。
port:端口号,对于RTSP协议来说,缺省的端口号为554,即如HTTP的缺省端口号是80一样。
当端口号为554时可省略,反之必须在RTSP_URL中指明
2、RTSP的消息 = 请求消息(request) + 回应消息(response)
请求消息格式:
Method 空格 Request-URI 空格 RTSP-Version CRLF
方法 URI RTSP版本 CR LF
消息头 CR LF
CR LF
消息体 CR LF
1、Method包括OPTIONS、SETUP、PLAY、TEARDOWN等
2、Request-URI是请求媒体存放的绝对路径 例如:rtsp://192.168.22.136:5000/v0
3、每行后面的CR LF表示回车换行,需要接收端有相应的解析,最后一个消息头需要有两个CR LF。
回应消息格式:
RTSP-Version 空格 Status-Code 空格 Reason-Phrase CRLF
消息头 CR LF
CR LF
消息体 CR LF
1、RTSP-Version一般都是RTSP/1.0
2、Status-Code是一个三位数,一共有5种: 解释是与状态码对应的文本解释。
1XX:保留,将来使用;
2XX:成功,操作被接收、理解、接受(received,understand,accepted);
3XX:重定向,要完成操作必须进行进一步操作;
4XX:客户端出错,请求有语法错误或无法实现;
5XX:服务器出错,服务器无法实现合法的请求。
常见Status-Code如 “200” :OK
“400” :Bad Request
“404” :Not Found
“500” Internal Server Error
3、Reason-Phrase:status-Code的文本解释。
实例:
sprintf(pTemp,“RTSP/1.0 200 OK\r\nCSeq: %s\r\n%sRange: npt=0.000-\r\nSession: %d\r\nRTP-Info: url=rtsp://%s/%s;seq=0\r\n\r\n”, cseq,dateHeader(),SessionId,localip,urlPre);
排版后:
RTSP/1.0 200 OK
CSeq: ?
dateHeader()Range: npt=0.000-\r\n
Session: ?
RTP-Info: url=rtsp://本地IP/urlPre;seq=0
\r\n
\r\n
3、RTSP交互方法
rtsp中定义的方法有:OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, SCALE, GET_PARAMETER ,SET_PARAMETER
3.1 OPTION:查询服务器端可用方法
C->S:OPTIONrequest //询问S有哪些方法可用
S->C:OPTIONresponse //S回应信息的public头字段中包括提供的所有可用方法
OPTIONS rtsp://192.168.20.136:5000/xxx666 RTSP/1.0
CSeq: 1 //每个消息都有序号来标记,第一个包通常是option请求消息
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)
RTSP/1.0 200 OK
Server: UServer 0.9.7_rc1
Cseq: 1 //每个回应消息的cseq数值和请求消息的cs