目录
1 rtsp简介
RTSP(Real-TimeStream Protocol ),RFC2326,实时流传输协议,是一种基于文本的应用层协议,一般用在视频监控领域,在语法及一些消息参数等方面,RTSP协议与HTTP协议类似。RTSP以C/S模式工作,它是一个多媒体播放控制协议,主要用来使用户在播放流媒体时可以像操作本地的影碟机一样进行控制,即可以对流媒体进行暂停/继续、后退和前进等控制。尽管有时可以把RTSP控制信息和媒体数据流交织在一起传送,但一般情况RTSP本身并不用于转送媒体流数据。媒体数据的传送可通过RTP/RTCP等协议来完成。
RTSP在制定时较多地参考了HTTP/1.1协议,甚至许多描述与HTTP/1.1完全相同。RTSP之所以特意使用与HTTP/1.1类似的语法和操作,在很大程度上是为了兼容现有的Web基础结构,正因如此,HTTP/1.1的扩展机制大都可以直接引入到RTSP中。
1 RTSP引入了几种新的方法,比如DESCRIBE、PLAY、SETUP 等,并且有不同的协议标识符,RTSP为rtsp 1.0,HTTP为http 1.1;
2 HTTP是无状态的协议,而RTSP为每个会话保持状态;
3 RTSP协议的客户端和服务器端都可以发送Request请求,而在HTTPF协议中,只有客户端能发送Request请求。
4 在RTSP协议中,载荷数据一般是通过带外方式来传送的(除了交织的情况),及通过RTP协议在不同的通道中来传送载荷数据。而HTTP协议的载荷数据都是通过带内方式传送的,比如请求的网页数据是在回应的消息体中携带的。
5 使用ISO10646(UTF-8) 而不是ISO 8859-1,以配合当前HTML的国际化;
6 RTSP使用URI请求时包含绝对URI。而由于历史原因造成的向后兼容性问题,HTTP/1.1只在请求中包含绝对路径,把主机名放入单独的标题域中;
RTSP方法
RTSP请求包括:OPTIONS,DESCRIBE,SETUP,PLAY,GET_PARAMETER,TEARDOWN。
服务器接收到OPTIONS请求后,将服务器能够提供的消息传给客户端。
服务器接收到DESCRIBE请求后,将SDP信息传给客户端。
服务器接收到SETUP请求后,建立RTP套接字,连接客户端RTP端口,等待发送RTP包。
服务器接收到拉流端PALY请求后,开始发送RTP包。
服务器接收到PAUSE 请求后,临时停止发送RTP包。使用 PLAY 来重新启动数据交互。
ANNOUNCE:(1)C->S:客户端向服务器端发布URL指定的媒体信息描述;(2) S->C:实时更新对话描述。
RECORD:请求录制指定范围的媒体数据,请求中可指定录制的起止时间戳;若未指定时间范围,则使用presentation description中的开始和结束时间,这种情况下,如果会话已开始,则立即启动录制操作。
服务器接收到GET_PARAMETER请求后,将当前时间传递给客户端。
服务器接收到TEARDOWN请求后,停止发送RTP包,释放资源,停止接收RTSP请求,进入等待客户端连接状态。
2 rtsp推拉流
zlmediakit流媒体服务器启动
cd /release/linux/Debug
sudo ./MediaServer -s default.pem
rtsp推流
ffmpeg -re -i "/abc.mp4" -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/buji1
推流后,在live目录中会新建buji1目录,buji1目录中生成m3u8直播素材
abc.mp4文件放在release/linux/Debug/www/buji目录下,
浏览器访问http://127.0.0.1/buji/abc.mp4,点播
wireshark抓包示例1
wireshark抓包示例2-1
wireshark抓包示例2-2
wireshark抓包示例2-3
3 SDP协议
SDP 信息是文本信息,UTF-8 编码采用 ISO 10646 字符设置。SDP 会话描述如下(标注*符号的表示可选字段):
- v= (协议版本)
- o= (所有者/创建者和会话标识符)
- s= (会话名称)
- i=* (会话信息)
- u=* (URI 描述)
- e=* (Email 地址)
- p=* (电话号码)
- c=* (连接信息 ― 如果包含在所有媒体中,则不需要该字段)
- b=* (带宽信息)
一个或更多时间描述(如下所示):
- z=* (时间区域调整)
- k=* (加密密钥)
- a=* (0个或多个会话属性线路)
- 0个或多个媒体描述(如下所示)
时间描述
- t= (会话活动时间)
- r=* (0或多次重复次数)
媒体描述
- m= (媒体名称和传输地址)
- i=* (媒体标题)
- c=* (连接信息 — 如果包含在会话层则该字段可选)
- b=* (带宽信息)
- k=* (加密密钥)
- a=* (0个或多个会话属性线路)
v=0
o=mhandley 2890844526 2890842807 IN IP4 126.16.64.4
s=SDP Seminar
i=A Seminar on the session description protocol
u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps
e=mjh@isi.edu (Mark Handley)
c=IN IP4 224.2.17.12/127
t=2873397496 2873404696
a=recvonly
m=audio 49170 RTP/AVP 0
m=video 51372 RTP/AVP 31
m=application 32416 udp wb
a=orient:portrait
//字段解释
V=0 ;Version 给定了SDP协议的版本
o=<username><session id> <version> <network type> <address type>
<address>; Origin ,给定了会话的发起者信息
s=<sessionname> ;给定了Session Name
i=<sessiondescription> ; Information 关于Session的一些信息
u=<URI> ; URI
e=<emailaddress> ;Email
c=<networktype> <address type> <connection address> ;Connect Data包含连接数据
t=<start time><stop time> ;Time
a=<attribute> ; Attribute
a=<attribute>:<value>
m=<media><port> <transport> <fmt list> ; MediaAnnouncements