RTSP(Real-Time Stream Protocol)协议是一个基于文本的多媒体播放控制协议,属于应用层 。RTSP以客户端方式工作,对流媒体提供播放、暂停、后退、前进等操作 。该标准由IETF指定,对应的协议是RFC2326 。
RTSP作为一个应用层协议,提供了一个可供扩展的框架,使得流媒体的受控和点播变得可能,它主要用来控制具有实时特性的数据的发送,但其本身并不用于传送流媒体数据,而必须依赖下层传输协议(如RTP/RTCP)所提供的服务来完成流媒体数据的传送 。RTSP负责定义具体的控制信息、操作方法、状态码,以及描述与RTP之间的交互操作 。RTSP媒体服务协议框架如下:
文章插图
客户端要播放RTSP媒体流,就需要知道媒体源的URL,RTSP的URL格式一般如下:
rtsp://host[:port]/[abs_path]/content_name
- host: 有效的域名或IP地址;
- port: 端口号,缺省为554,若为缺省可不填写,否则必须写明 。
rtsp://192.168.1.67:554/test又如目前市面上常用的海康网络摄像头的RTSP地址格式为:
rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream示例:
rtsp://admin:12345@192.168.1.67:554/h264/ch1/main/av_streamrtsp://admin:12345@192.168.1.67/mpeg4/ch1/sub/av_streamRTSP报文
对RTSP协议的使用有了一个大概的了解之后,我们来看一下RTSP报文结构 。
RTSP是一种基于文本的协议,用CRLF(回车换行)作为每一行的结束符,其好处是,在使用过程中可以方便地增加自定义参数,也方便抓包分析 。从消息传送方向上来分,RTSP的报文有两类:请求报文和响应报文 。请求报文是指从客户端向服务器发送的请求(也有少量从服务器向客户端发送的请求),响应报文是指从服务器到客户端的回应 。
RTSP请求报文的常用方法与作用:
文章插图
一次基本的RTSP交互过程如下,C表示客户端,S表示服务端 。
文章插图
首先客户端连接到流媒体服务器并发送一个RTSP描述请求(DESCRIBE request),服务器通过一个SDP(Session DescriptionProtocol)描述来进行反馈(DESCRIBEresponse),反馈信息包括流数量、媒体类型等信息 。客户端分析该SDP描述,并为会话中的每一个流发送一个RTSP连接建立请求(SETUPrequest),该命令会告诉服务器用于接收媒体数据的端口,服务器响应该请求(SETUP response)并建立连接之后,就开始传送媒体流(RTP包)到客户端 。在播放过程中客户端还可以向服务器发送请求来控制快进、快退和暂停等 。最后,客户端可发送一个终止请求(TEARDOWN request)来结束流媒体会话 。
下面我们通过具体的消息实例来进一步了解一下RTSP的工作过程:
- OPTIONS
C->S: OPTIONS rtsp://example.com/media.mp4 RTSP/1.0 CSeq: 1 Require: implicit-play Proxy-Require: gzipped-messages S->C: RTSP/1.0 200 OK CSeq: 1 Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE
- DESCRIBE
C->S: DESCRIBE rtsp://example.com/media.mp4 RTSP/1.0 CSeq: 2 S->C: RTSP/1.0 200 OK CSeq: 2 Content-Base: rtsp://example.com/media.mp4 Content-Type: Application/sdp Content-Length: 460m=video 0 RTP/AVP 96 a=control:streamid=0 a=range:npt=0-7.741000 a=length:npt=7.741000 a=rtpmap:96 MP4V-ES/5544 a=mimetype:string;"video/MP4V-ES" a=AvgBitRate:integer;304018 a=StreamName:string;"hinted video track" m=audio 0 RTP/AVP 97 a=control:streamid=1 a=range:npt=0-7.712000 a=length:npt=7.712000 a=rtpmap:97 mpeg4-generic/32000/2 a=mimetype:string;"audio/mpeg4-generic" a=AvgBitRate:integer;65790 a=StreamName:string;"hinted audio track"
- SETUP
推荐阅读
- 路由器到底需不需要关闭?
- 明星|明星赵露思告P图造谣网友胜诉 曾引发舆论海啸:网络不是随便传谣地方
- 揭开人肉搜索团队的面纱 人肉搜索网络团队
- 电脑无法连接上网络的原因有哪些?
- 首款利用DNS over HTTPS隐藏网络流量的恶意软件Godlua已经现身
- Mozilla向Android平台推出Firefox专用网络服务
- 细讲交换机配置,什么样的网络能互通,什么样的网络不能互通?
- HTTP协议的那54个状态码,你确定都完全理解了吗
- HTTP协议又冷又实用的技能大全
- 基于隐私保护技术的DNS通信协议