1、rtsp介绍
RTSP协议是有状态的协议,而HTTP是无状态的协议。RTSP通过维护一个session来维护其状态的转换。RTSP协议的默认端口是554,默认的承载协议为TCP。
RTSP消息格式:
RTSP的消息有两大类,一是请求消息(request),一是回应消息(response),两种消息的格式不同。
请求消息(客户端向服务器发送的套接字内容):
方法 URI RTSP版本 CR LF
消息头 CR LF CR LF
消息体 CR LF
其中方法包括服务器响应OPTIONS命令后回应客户端的所有方法(OPTIONS也是一种方法,方法也可以称为命令),URI是接收方(服务端)的地址, RTSP版本一般都是RTSP/1.0。每行后面的CR LF表示回车换行,需要接收端有相应的解析,最后一个消息头需要有两个CR LF
回应消息(服务器向客户端发送的套接字内容):
RTSP版本 状态码 解释 CR LF
消息头 CR LF CR LF
消息体 CR LF
其中RTSP版本一般都是RTSP/1.0,状态码是一个数值,200表示成功,解释是与状态码对应的文本解释。
2、消息头(Header)字段
常用Header字段:
CSeq:顺序号,每次递增
User-Agent:客户程序信息
Server:服务程序信息
Session:标记一次点播过程
某些命令特有的Header字段:
Transport:SETUP时协商通道信息
Range:PLAY时标记播放位置
应用自定义字段(x-开头):
x-retransmit:Darwin的RUDP重传协商标记
3、RTSP协议:常用命令
DESCRIBE 询问媒体信息,
SETUP 创建传输通道
PLAY 开始播放
PAUSE 暂停播放
TEARDOWN 结束播放
OPTIONS 询问能力
ANNOUNCE 主动发布媒体
GET_PARAMETER 查询参数
SET_PARAMETER 设置参数
RTSP协议:DESCRIBE命令
获取媒体的描述信息:有哪些track,各个track的格式,控制方式等
请求消息:
DESCRIBE rtsp://192.168.182.8:8888/sample.mp4 RTSP/1.0
CSeq: 1
Accept: application/sdp
Bandwidth: 384000
Accept-Language: hr-HR
User-Agent: QuickTime/7.5.5 (qtver=7.5.5;os=Windows NT 5.2Service Pack 2)
RTSP协议:DESCRIBE命令应答
RTSP/1.0 200 OK
Server: DSS/6.0.3
Cseq: 1
Content-length: 753
Content-Type: application/sdp
Content-Base: rtsp://192.168.182.8:8888/sample.mp4/
v=0
<……skip……>
Content-Base用于后续SETUP命令构建URL
BODY信息中是SDP描述
SDP协议:参考http://blog.csdn.net/qq_39660930/article/details/77717190
一份全局信息,多份媒体信息
v=0
o=StreamingServer 3440750359 1231761553000 IN IP4 192.168.182.8
s=/home/drangon/sample_h264_100kbit.mp4
u=http:///
e=admin@
c=IN IP4 0.0.0.0
b=AS:2097172
t=0 0
a=control:*
a=isma-compliance:2,2.0,2
a=range:npt=0- 70.00000
m=video 0 RTP/AVP 96
a=3GPP-Adaptation-Support:1
a=rtpmap:96 H264/90000
a=control:trackID=3
a=framesize:96 192-242
a=fmtp:96 packetization-mode=1;profile-level-id=4D400C;sprop-parameter-sets=J01ADKkYYELxCA==,KM4JiA==
a=mpeg4-esid:201
rtpmap:RTP包说明,封装格式(h264),timestamp单位
control:track的控制信息
fmtp:媒体格式相关的参数,封装、解码相关
RTSP协议:SETUP命令
SETUP rtsp://192.168.182.8:8888/sample.mp4/trackID=3 RTSP/1.0
CSeq: 3
Transport: RTP/AVP;unicast;client_port=6972-6973
x-retransmit: our-retransmit
x-dynamic-rate: 1
x-transport-options: late-tolerance=1.400000
Session: 5154404056653789650
User-Agent: QuickTime/7.5.5
URL的计算,如何指定track?
DESCRIBE应答中:
Content-Base: rtsp://192.168.182.8:8888/sample.mp4/
SDP中:a=control:trackID=3
Transport,UDP传输方式,unicast,client_port
RTSP协议:SETUP命令的应答
RTSP/1.0 200 OK
Server: DSS/6.0.3
Cseq: 3
Session: 5154404056653789650
Transport: RTP/AVP;unicast;source=192.168.182.8;client_port=6972-6973;server_port=6970-6971;ssrc=18512542
x-Transport-Options: late-tolerance=1.400000
x-Retransmit: our-retransmit
x-Dynamic-Rate: 1
Transport,传输方式的协商结果,确认client_port,增加server_port,RTP/AVP表示传输方式为UDP方式
RTSP协议:SETUP的TCP传输
SETUP命令协商使用TCP方式
Transport: RTP/AVP/TCP;interleaved=2-3
RTSP连接中,内嵌二进制数据
四字节头,首字节“$”(0x24),用来区分正常RTSP请求还是内嵌二进制数据
第二字节是channel值,(interleaved时协商)
第三、四字节是长度,network order
后面是二进制数据(RTP、RTCP包)
RTSP协议:PLAY命令
PLAY rtsp://192.168.182.8:8888/sample.mp4 RTSP/1.0
CSeq: 4
Range: npt=5.000000-70.000000
x-prebuffer: maxtime=2.000000
x-transport-options: late-tolerance=10
Session: 5154404056653789650
User-Agent: QuickTime/7.5.5
Range,指定播放位置,实现SEEK操作,实时监视不支持
Speed,指定播放速度,实现快放慢放
连续多个PLAY的语义—播放列表
RTSP协议:其他命令
PAUSE命令:暂停(直播不支持)
OPTIONS命令:查询支持能力,返回支持的命令清单。有时会用来做TCP保活
SET_PARAMETER和GET_PARAMETER:参数读写,一般用于应用层
ANNOUNCE命令,一般用于录制,类似DESCRIBE,但方向不同,请求者直接提供SDP信息
undefined