网络流媒体协议 RTSP协议
RTSP(Real-Time Stream Protocol)协议是一个基于文本的多媒体播放控制协议,属于应用层。RTSP以客户端方式工作,对流媒体提供播放、暂停、后退、前进等操作。该标准由IETF指定,对应的协议是RFC2326。
RTSP作为一个应用层协议,提供了一个可供扩展的框架,使得流媒体的受控和点播变得可能,它主要用来控制具有实时特性的数据的发送,但其本身并不用于传送流媒体数据,而必须依赖下层传输协议(如RTP/RTCP)所提供的服务来完成流媒体数据的传送。RTSP负责定义具体的控制信息、操作方法、状态码,以及描述与RTP之间的交互操作。RTSP媒体服务协议框架如下:
RTSP包含Normal RTSP(数据通过RTP传输,应用厂商有苹果和微软等),以及Real-RTSP(数据通过RDT传输)。本篇我们主要讲Normal RTSP。
RTSP传输的一般是TS、MP4格式的流,其传输一般需要2~3个通道,命令和数据通道分离。使用RTSP协议传输流媒体数据需要有专门的媒体播放器和媒体服务器,也就是需要支持RTSP协议的客户端和服务器。
客户端要播放RTSP媒体流,就需要知道媒体源的URL,RTSP的URL格式一般如下:
rtsp://host[:port]/[abs_path]/content_name
host: 有效的域名或IP地址;
port: 端口号,缺省为554,若为缺省可不填写,否则必须写明。
例如,一个完整的RTSP URL可写为:
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_stream
rtsp://admin:12345@192.168.1.67/mpeg4/ch1/sub/av_stream
RTSP报文
对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
OPTIONS请求是客户端向服务器询问可用的方法,请求和回复实例如下:
C->S: OPTIONS rtsp://example.com/media.mp4 RTSP/1.0CSeq: 1Require: implicit-playProxy-Require: gzipped-messagesS->C: RTSP/1.0 200 OKCSeq: 1Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE
- DESCRIBE
客户端向服务器请求媒体资源描述,服务器端通过SDP(Session Description Protocol)格式回应客户端的请求。资源描述中会列出所请求媒体的媒体流及其相关信息,典型情况下,音频和视频分别作为一个媒体流传输。实例如下:
C->S: DESCRIBE rtsp://example.com/media.mp4 RTSP/1.0CSeq: 2S->C: RTSP/1.0 200 OKCSeq: 2Content-Base: rtsp://example.com/media.mp4Content-Type: application/sdpContent-Length: 460m=video 0 RTP/AVP 96a=control:streamid=0a=range:npt=0-7.741000a=length:npt=7.741000a=rtpmap:96 MP4V-ES/5544a=mimetype:string;"video/MP4V-ES"a=AvgBitRate:integer;304018a=StreamName:string;"hinted video track"m=audio 0 RTP/AVP 97a=control:streamid=1a=range:npt=0-7.712000a=length:npt=7.712000a=rtpmap:97 mpeg4-generic/32000/2a=mimetype:string;"audio/mpeg4-generic"a=AvgBitRate:integer;65790a=StreamName:string;"hinted audio track"
- SETUP
SETUP请求确定了具体的媒体流如何传输,该请求必须在PLAY请求之前发送。SETUP请求包含媒体流的URL和客户端用于接收RTP数据(audio or video)的端口以及接收RTCP数据(meta information)的端口。服务器端的回复通常包含客户端请求参数的确认,并会补充缺失的部分,比如服务器选择的发送端口。每一个媒体流在发送PLAY请求之前,都要首先通过SETUP请求来进行相应的配置。
C->S: SETUP rtsp://example.com/media.mp4/streamid=0 RTSP/1.0CSeq: 3Transport: RTP/AVP;unicast;client_port=8000-8001S->C: RTSP/1.0 200 OKCSeq: 3Transport: RTP/AVP;unicast;client_port=8000-8001;server_port=9000-9001;ssrc=1234ABCDSession: 12345678
- PLAY
客户端通过PLAY请求来播放一个或全部媒体流,PLAY请求可以发送一次或多次,发送一次时,URL为包含所有媒体流的地址,发送多次时,每一次请求携带的URL只包含一个相应的媒体流。PLAY请求中可指定播放的range,若未指定,则从媒体流的开始播放到结束,如果媒体流在播放过程中被暂停,则可在暂停处重新启动流的播放。
C->S: PLAY rtsp://example.com/media.mp4 RTSP/1.0CSeq: 4Range: npt=5-20Session: 12345678S->C: RTSP/1.0 200 OKCSeq: 4Session: 12345678RTP-Info: url=rtsp://example.com/media.mp4/streamid=0;seq=9810092;rtptime=3450012
- PAUSE
PAUSE请求会暂停一个或所有媒体流,后续可通过PLAY请求恢复播放。PAUSE请求中携带所请求媒体流的URL,若参数range存在,则指明在何处暂停,若该参数不存在,则暂停立即生效,且暂停时长不确定。
C->S: PAUSE rtsp://example.com/media.mp4 RTSP/1.0CSeq: 5Session: 12345678S->C: RTSP/1.0 200 OKCSeq: 5Session: 12345678
- TEARDOWN
结束会话请求,该请求会停止所有媒体流,并释放服务器上的相关会话数据。
C->S: TEARDOWN rtsp://example.com/media.mp4 RTSP/1.0CSeq: 8Session: 12345678S->C: RTSP/1.0 200 OKCSeq: 8
- GET_PARAMETER
检索指定URI数据中的参数值。不携带消息体的GET_PARAMETER可用来测试服务器端或客户端是否可通(类似ping的功能)。
S->C: GET_PARAMETER rtsp://example.com/media.mp4 RTSP/1.0CSeq: 9Content-Type: text/parametersSession: 12345678Content-Length: 15packets_receivedjitterC->S: RTSP/1.0 200 OKCSeq: 9Content-Length: 46Content-Type: text/parameterspackets_received: 10jitter: 0.3838
- SET_PARAMETER
用于设置指定媒体流的参数。
C->S: SET_PARAMETER rtsp://example.com/media.mp4 RTSP/1.0CSeq: 10Content-length: 20Content-type: text/parametersbarparam: barstuffS->C: RTSP/1.0 451 Invalid ParameterCSeq: 10Content-length: 10Content-type: text/parametersbarparam
- REDIRECT
重定向请求,用于服务器通知客户端新的服务地址,客户端需要向这个新地址重新发起请求。重定向请求中可能包含Range参数,指明重定向生效的时间。客户端若需向新服务地址发起请求,必须先teardown当前会话,再向指定的新主机setup一个新的会话。
S->C: REDIRECT rtsp://example.com/media.mp4 RTSP/1.0CSeq: 11Location: rtsp://bigserver.com:8001Range: clock=19960213T143205Z-
- ANNOUNCE
ANNOUNCE请求有两个用途:(1)C->S:客户端向服务器端发布URL指定的媒体信息描述;(2) S->C:实时更新对话描述。若媒体表示中新增了一个媒体流,例如在直播过程中,则整个媒体表示的description都要被重新发送,而不是只发送新增部分。
C->S: ANNOUNCE rtsp://example.com/media.mp4 RTSP/1.0CSeq: 7Date: 23 Jan 1997 15:35:06 GMTSession: 12345678Content-Type: application/sdpContent-Length: 332v=0o=mhandley 2890844526 2890845468 IN IP4 126.16.64.4s=SDP Seminari=A Seminar on the session description protocolu=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.pse=mjh@isi.edu (Mark Handley)c=IN IP4 224.2.17.12/127t=2873397496 2873404696a=recvonlym=audio 3456 RTP/AVP 0m=video 2232 RTP/AVP 31S->C: RTSP/1.0 200 OKCSeq: 7
- RECORD
请求录制指定范围的媒体数据,请求中可指定录制的起止时间戳;若未指定时间范围,则使用presentation description中的开始和结束时间,这种情况下,如果会话已开始,则立即启动录制操作。
C->S: RECORD rtsp://example.com/media.mp4 RTSP/1.0CSeq: 6Session: 12345678S->C: RTSP/1.0 200 OKCSeq: 6Session: 12345678
以上就是RTSP中常用的命令及其实例介绍。最后,来看一段实际使用的RTSP命令交互过程,该过程是通过PC对海康摄像头视频流的拉取和播放,并通过Wireshark抓取客户端的数据得到的:
OPTIONS rtsp://10.3.8.202:554 RTSP/1.0
CSeq: 2
User-Agent: LibVLC/2.2.8 (LIVE555 Streaming Media v2016.02.22)RTSP/1.0 200 OK
CSeq: 2
Public: OPTIONS, DESCRIBE, PLAY, PAUSE, SETUP, TEARDOWN, SET_PARAMETER, GET_PARAMETER
Date: Mon, Jan 29 2018 16:56:47 GMTDESCRIBE rtsp://10.3.8.202:554 RTSP/1.0
CSeq: 3
User-Agent: LibVLC/2.2.8 (LIVE555 Streaming Media v2016.02.22)
Accept: application/sdpRTSP/1.0 401 Unauthorized
CSeq: 3
WWW-Authenticate: Digest realm="IP Camera(10789)", nonce="6b9a455aec675b8db81a9ceb802e4eb8", stale="FALSE"
Date: Mon, Jan 29 2018 16:56:47 GMTDESCRIBE rtsp://10.3.8.202:554 RTSP/1.0
CSeq: 4
Authorization: Digest username="admin", realm="IP Camera(10789)", nonce="6b9a455aec675b8db81a9ceb802e4eb8", uri="rtsp://10.3.8.202:554", response="3fc4b15d7a923fc36f32897e3cee69aa"
User-Agent: LibVLC/2.2.8 (LIVE555 Streaming Media v2016.02.22)
Accept: application/sdpRTSP/1.0 200 OK
CSeq: 4
Content-Type: application/sdp
Content-Base: rtsp://10.3.8.202:554/
Content-Length: 551v=0
o=- 1517245007527432 1517245007527432 IN IP4 10.3.8.202
s=Media Presentation
e=NONE
b=AS:5050
t=0 0
a=control:rtsp://10.3.8.202:554/
m=video 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:5000
a=recvonly
a=x-dimensions:2048,1536
a=control:rtsp://10.3.8.202:554/trackID=1
a=rtpmap:96 H264/90000
a=fmtp:96 profile-level-id=420029; packetization-mode=1; sprop-parameter-sets=Z00AMp2oCAAwabgICAoAAAMAAgAAAwBlCA==,aO48gA==
a=Media_header:MEDIAINFO=494D4B48010200000400000100000000000000000000000000000000000000000000000000000000;
a=appversion:1.0SETUP rtsp://10.3.8.202:554/trackID=1 RTSP/1.0
CSeq: 5
Authorization: Digest username="admin", realm="IP Camera(10789)", nonce="6b9a455aec675b8db81a9ceb802e4eb8", uri="rtsp://10.3.8.202:554/", response="ddfbf3e268ae954979407369a104a620"
User-Agent: LibVLC/2.2.8 (LIVE555 Streaming Media v2016.02.22)
Transport: RTP/AVP;unicast;client_port=57844-57845RTSP/1.0 200 OK
CSeq: 5
Session: 1273222592;timeout=60
Transport: RTP/AVP;unicast;client_port=57844-57845;server_port=8218-8219;ssrc=5181c73a;mode="play"
Date: Mon, Jan 29 2018 16:56:47 GMTPLAY rtsp://10.3.8.202:554/ RTSP/1.0
CSeq: 6
Authorization: Digest username="admin", realm="IP Camera(10789)", nonce="6b9a455aec675b8db81a9ceb802e4eb8", uri="rtsp://10.3.8.202:554/", response="b5abf0b230de4b49d6c6d42569f88e91"
User-Agent: LibVLC/2.2.8 (LIVE555 Streaming Media v2016.02.22)
Session: 1273222592
Range: npt=0.000-RTSP/1.0 200 OK
CSeq: 6
Session: 1273222592
RTP-Info: url=rtsp://10.3.8.202:554/trackID=1;seq=65373;rtptime=3566398668
Date: Mon, Jan 29 2018 16:56:47 GMTGET_PARAMETER rtsp://10.3.8.202:554/ RTSP/1.0
CSeq: 7
Authorization: Digest username="admin", realm="IP Camera(10789)", nonce="6b9a455aec675b8db81a9ceb802e4eb8", uri="rtsp://10.3.8.202:554/", response="bb2309dcd083b25991c13e165673687b"
User-Agent: LibVLC/2.2.8 (LIVE555 Streaming Media v2016.02.22)
Session: 1273222592RTSP/1.0 200 OK
CSeq: 7
Date: Mon, Jan 29 2018 16:56:47 GMTTEARDOWN rtsp://10.3.8.202:554/ RTSP/1.0
CSeq: 8
Authorization: Digest username="admin", realm="IP Camera(10789)", nonce="6b9a455aec675b8db81a9ceb802e4eb8", uri="rtsp://10.3.8.202:554/", response="e08a15c27d3daac14fd4b4bcab424a5e"
User-Agent: LibVLC/2.2.8 (LIVE555 Streaming Media v2016.02.22)
Session: 1273222592RTSP/1.0 200 OK
CSeq: 8
Session: 1273222592
Date: Mon, Jan 29 2018 16:57:03 GMT
网络流媒体协议 RTSP协议相关推荐
- 最详细的流媒体传输协议-rtsp协议详解
流媒体传输协议-rtsp协议详解 参阅:RTSP协议详解和分析从零开始写一个RTSP服务器(一)RTSP协议讲解关于RTSP_RTP_RTCP协议的深刻初步介绍 rtsp RTSP出现以前,最热的大概 ...
- [Rtsp]海康网络摄像头基于RTSP协议的windows平台监控
[Rtsp]海康网络摄像头基于RTSP协议的windows平台监控 基于RTSP协议的windows平台监控. 1. 基于RTSP协议的windows平台监控. 1.1 选取海康网络摄像头(支持RT ...
- 海康、大华、星邦网络摄像头的 RTSP协议 地址与格式
一.简介 1.RTSP(Real Time Streaming Protocol)是由Real Network和Netscape共同提出的如何有效地在IP网络上传输流媒体数据的应用层协议.RTSP对流 ...
- HTTP协议/RTSP协议/RTMP协议的区别
RTSP. RTMP.HTTP的共同点.区别 共同点: 1:RTSP RTMP HTTP都是在应用应用层. 2: 理论上RTSP RTMP HTTP都可以做直播和点播,但一般做直播用RTSP RTM ...
- RTSP协议探秘:从原理到C++实践,解锁实时流媒体传输之道
目录标题 引言 RTSP协议基础 RTSP协议的组成与工作原理 RTSP协议的组成 RTSP协议的工作原理 RTSP协议与其他流媒体协议的比较 RTSP协议的基本功能与用途 RTSP协议详解 RTSP ...
- 国标28181:什么是RTSP协议
前言 RTSP出现之前,最热的大概就是HTTP协议.想象一下,当你需要欣赏网络中的某一段视频,通过HTTP协议访问其URL.开始下载.下载完成之后播放.对于早期的视频采集设备.网络带宽或是负责渲染的显 ...
- RTSP协议 RTP协议
RTSP(Real-Time Streaming Protocol)实时流式协议 需要注意的是,RTSP本身不传输数据,音视频流数据是通过RTP传输的. C/S请求应答整体流程: 客户端->&g ...
- 网络流媒体协议之——RTSP协议
原文连接:https://www.cnblogs.com/linhaostudy/p/11140823.html 阅读目录 RTSP报文 正文 RTSP(Real-Time Stream Protoc ...
- 网络流媒体协议的联系与区别(RTP RTCP RTSP RTMP HLS)
简结">三句话简结 RTP RTCP RTSP RTMP HLS区别与联系 RTP传输流媒体数据.RTCP对RTP进行控制,同步.RTSP发起/终止流媒体 RTP和RTCP互为姐妹关系 ...
最新文章
- EBS报表 查看输出 FNDWRR.exe
- sublime中利用正则批量修改数据
- 学习opencv 英文版_B站上适合程序员的学习资源【赶紧收藏!】
- hadoop 回收站Trash
- C++ 直接插入排序
- PHP调微信小程序接口生成access_token
- MAC终端使用SSH连接远程服务器
- 代码版本控制用SVN还是Git好?
- 2022茶艺师(中级)考试题及答案
- contest12 CF514div2 ooxxx oooox ooooo
- mug网络用语_日常聊天常见网络用语(Daily chat common Internet slang).doc
- 自己想要什么 过什么样的生活
- JAVA学习记录day07
- [转] 一个女生写给男朋友的!!!~~有点现实、冷静的语言,却让人感觉很温暖!!!
- 滴滴云千万补贴,助力中小企业数字化转型
- ZW32-12型户外柱上高压真空断路器
- 碳足迹软件市场现状研究分析-
- JAVADOC注释详解
- Shell从小白牛到大黑牛你只差这一步
- 基于php学生信息管理系统——计算机毕业设计
热门文章
- 案例 | 华仁药业数字化转型 致远互联打造数字化“中台”一条直线,映射出软件产业发展的辛酸与瓶颈。...
- 编写测试用例的常用方法
- 有人买不?没人的话我待会儿再来问问 价值6.11亿美元的入侵工具无人问津
- TurnipBit:可以带着孩子一起玩编程的MicroPython开发板!
- 英国EE:启动TechCity 2.0 首期将部署LTE-Advanced Pro
- 成功企业的核心思维逻辑
- 42.虚拟内存如何设置:
- Android 数据存储 Room
- Windows同时安装python3.0和python2.7
- Redis 系列之一