Real Time Streaming Protocol或者RTSP(实时流媒体协议),是由Real network 和 Netscape共同提出的如何有效地在IP网络上传输流媒体数据的应用层协议。RTSP提供一 种可扩展的框架,使能够提供可控制的,按需传输实时数据,比如音频和视频文件。源数据可以包括现场数据的反馈和存贮的文件。rtsp对流媒体提供了诸如暂停,快进等控制,而它本身并不传输数据,rtsp作用相当于流媒体服务器的远程控制。传输数据可以 
通过传输层的tcp,udp协议,rtsp也提供了基于rtp传输机制的一些有效的方法。

RTSP消息格式: 

RTSP的消息有两大类,一是请求消息(request),一是回应消息(response),两种消息的格式不同. 
请求消息: 
方法 URI RTSP版本 CR LF 
消息头 CR LF CR LF 
消息体 CR LF 
其中方法包括OPTION回应中所有的命令,URI是接受方的地址,例如 
:rtsp://192.168.20.136 
RTSP版本一般都是 RTSP/1.0.每行后面的CR LF表示回车换行,需要接受端有相应的解 
析,最后一个消息头需要有两个CR LF 
回应消息: 
RTSP版本 状态码 解释 CR LF 
消息头 CR LF CR LF 
消息体 CR LF 
其中RTSP版本一般都是RTSP/1.0,状态码是一个数值,200表示成功,解释是与状态码对应 
的文本解释.

简单的rtsp交互过程: 

C表示rtsp客户端,S表示rtsp服务端 
1.C->S:OPTION request //询问S有哪些方法可用 
1.S->C:OPTION response //S回应信息中包括提供的所有可用方法

2.C->S:DESCRIBE request //要求得到S提供的媒体初始化描述信息 
2.S->C:DESCRIBE response //S回应媒体初始化描述信息,主要是sdp

3.C->S:SETUP request //设置会话的属性,以及传输模式,提醒S建立会 
话 
3.S->C:SETUP response //S建立会话,返回会话标识符,以及会话相关信息

4.C->S:PLAY request //C请求播放 
4.S->C:PLAY response //S回应该请求的信息

S->C:发送流媒体数据 
5.C->S:TEARDOWN request //C请求关闭会话 
5.S->C:TEARDOWN response //S回应该请求

上述的过程是标准的、友好的rtsp流程,但实际的需求中并不一定按部就班来。 
其中第3和4步是必需的!第一步,只要服务器客户端约定好,有哪些方法可用,则option请求可以不要。第二步,如果我们有其他途径得到媒体初始化描述信息(比如http请求等等),则我们也不需要通过rtsp中的describe请求来完成。第五步,可以根据系统需求的设计来决定是否需要。

rtsp中常用方法: 

1.OPTION 
目的是得到服务器提供的可用方法: 
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数值和请求消息的cseq相对应 
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, SCALE, 
GET_PARAMETER //服务器提供的可用的方法 
2.DESCRIBE 
C向S发起DESCRIBE请求,为了得到会话描述信息(SDP): 
DESCRIBE rtsp://192.168.20.136:5000/xxx666 RTSP/1.0

CSeq: 2 
token: 
Accept: application/sdp 
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)

服务器回应一些对此会话的描述信息(sdp): 
RTSP/1.0 200 OK 
Server: UServer 0.9.7_rc1 
Cseq: 2 
x-prev-url: rtsp://192.168.20.136:5000 
x-next-url: rtsp://192.168.20.136:5000 
x-Accept-Retransmit: our-retransmit 
x-Accept-Dynamic-Rate: 1 
Cache-Control: must-revalidate 
Last-Modified: Fri, 10 Nov 2006 12:34:38 GMT 
Date: Fri, 10 Nov 2006 12:34:38 GMT 
Expires: Fri, 10 Nov 2006 12:34:38 GMT 
Content-Base: rtsp://192.168.20.136:5000/xxx666/ 
Content-Length: 344 
Content-Type: application/sdp

v=0 //以下都是sdp信息 
o=OnewaveUServerNG 1451516402 1025358037 IN IP4 192.168.20.136 
s=/xxx666 
u=http:/// 
e=admin@ 
c=IN IP4 0.0.0.0 
t=0 0 
a=isma-compliance:1,1.0,1

a=range:npt=0- 
m=video 0 RTP/AVP 96 //m表示媒体描述,下面是对会话中视频通道的媒体描述 
a=rtpmap:96 MP4V-ES/90000 
a=fmtp:96 
profile-level-id=245;config=000001B0F5000001B509000001000000012000C888B0E0E0FA62D089028307

a=control:trackID=0//trackID=0表示视频流用的是通道0

3.SETUP 
客户端提醒服务器建立会话,并确定传输模式: 
SETUP rtsp://192.168.20.136:5000/xxx666/trackID=0 RTSP/1.0 
CSeq: 3 
Transport: RTP/AVP/TCP;unicast;interleaved=0-1 
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10) 
//uri中带有trackID=0,表示对该通道进行设置。Transport参数设置了传输模式,包 
的结构。接下来的数据包头部第二个字节位置就是interleaved,它的值是每个通道都 
不同的,trackID=0的interleaved值有两个0或1,0表示rtp包,1表示rtcp包,接受端 
根据interleaved的值来区别是哪种数据包。

服务器回应信息: 
RTSP/1.0 200 OK 
Server: UServer 0.9.7_rc1 
Cseq: 3 
Session: 6310936469860791894 //服务器回应的会话标识符 
Cache-Control: no-cache 
Transport: RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=6B8B4567 
4.PLAY 
客户端发送播放请求: 
PLAY rtsp://192.168.20.136:5000/xxx666 RTSP/1.0 
CSeq: 4 
Session: 6310936469860791894 
Range: npt=0.000- //设置播放时间的范围 
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10) 
服务器回应信息: 
RTSP/1.0 200 OK 
Server: UServer 0.9.7_rc1 
Cseq: 4 
Session: 6310936469860791894 
Range: npt=0.000000- 
RTP-Info: url=trackID=0;seq=17040;rtptime=1467265309 
//seq和rtptime都是rtp包中的信息 
5.TEARDOWN 
客户端发起关闭请求: 
TEARDOWN rtsp://192.168.20.136:5000/xxx666 RTSP/1.0 
CSeq: 5 
Session: 6310936469860791894 
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10) 
服务器回应: 
RTSP/1.0 200 OK 
Server: UServer 0.9.7_rc1 
Cseq: 5 
Session: 6310936469860791894 
Connection: Close

以上方法都是交互过程中最为常用的,其它还有一些重要的方法如 
get/set_parameter,pause,redirect等等 
ps: 
sdp的格式 
v=<version> 
o=<username> <session id> <version> <network type> <address type> <address> 
s=<session name> 
i=<session description> 
u=<URI> 
e=<email address> 
p=<phone number> 
c=<network type> <address type> <connection address> 
b=<modifier>:<bandwidth-value> 
t=<start time> <stop time> 
r=<repeat interval> <active duration> <list of offsets from start-time> 
z=<adjustment time> <offset> <adjustment time> <offset> .... 
k=<method> 
k=<method>:<encryption key> 
a=<attribute> 
a=<attribute>:<value> 
m=<media> <port> <transport> <fmt list> 
v = (协议版本) 
o = (所有者/创建者和会话标识符) 
s = (会话名称) 
i = * (会话信息) 
u = * (URI 描述) 
e = * (Email 地址) 
p = * (电话号码) 
c = * (连接信息) 
b = * (带宽信息) 
z = * (时间区域调整) 
k = * (加密密钥) 
a = * (0 个或多个会话属性行) 
时间描述: 
t = (会话活动时间) 
r = * (0或多次重复次数) 
媒体描述: 
m = (媒体名称和传输地址) 
i = * (媒体标题) 
c = * (连接信息 — 如果包含在会话层则该字段可选) 
b = * (带宽信息) 
k = * (加密密钥) 
a = * (0 个或多个媒体属性行) 
参考文章:rfc2326(rtsp);rfc2327(sdp) 
RTSP点播消息流程实例(客户端:VLC, RTSP服务器:LIVE555 Media Server)

1)C(Client)-> M(Media Server) 
OPTIONS rtsp://192.168.1.109/1.mpg RTSP/1.0 
CSeq: 1 
user-Agent: VLC media player(LIVE555 Streaming Media v2007.02.20)

1)M -> C 
RTSP/1.0 200 OK 
CSeq: 1 
Date: wed, Feb 20 2008 07:13:24 GMT 
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE

2)C -> M 
DESCRIBE rtsp://192.168.1.109/1.mpg RTSP/1.0 
CSeq: 2 
Accept: application/sdp 
User-Agent: VLC media player(LIVE555 Streaming Media v2007.02.20)

2)M -> C 
RTSP/1.0 200 OK 
CSeq: 2 
Date: wed, Feb 20 2008 07:13:25 GMT 
Content-Base: rtsp://192.168.1.109/1.mpg/ 
Content-type: application/sdp 
Content-length: 447 
v=0 
o =- 2284269756 1 IN IP4 192.168.1.109 
s=MPEG-1 or 2 program Stream, streamed by the LIVE555 Media Server 
i=1.mpg 
t=0 0 
a=tool:LIVE555 Streaming Media v2008.02.08 
a=type:broadcast 
a=control:* 
a=range:npt=0-66.181 
a=x-qt-text-nam:MPEG-1 or Program Stream, streamed by the LIVE555 Media Server 
a=x-qt-text-inf:1.mpg 
m=video 0 RTP/AVP 32 
c=IN IP4 0.0.0.0 
a=control:track1 
m=audio 0 RTP/AVP 14 
c=IN IP4 0.0.0.0 
a=control:track2

3)C -> M 
SETUP rtsp://192.168.1.109/1.mpg/track1 RTSP/1.0 
CSeq: 3 
Transport: RTP/AVP; unicast;client_port=1112-1113 
User-Agent: VLC media player(LIVE555 Streaming Media v2007.02.20)

3)M -> C 
RTSP/1.0 200 OK 
CSeq: 3 
Date: wed, Feb 20 2008 07:13:25 GMT 
Transport: RTP/AVP;unicast;destination=192.168.1.222;source=192.168.1.109;client_port=1112-1113;server_port=6970-6971 
Session: 3

4)C -> M 
SETUP rtsp://192.168.1.109/1.mpg/track2 RTSP/1.0 
CSeq: 4 
Transport: RTP/AVP; unicast;client_port=1114-1115 
Session: 3 
User-Agent: VLC media player(LIVE555 Streaming Media v2007.02.20)

4)M -> C 
RTSP/1.0 200 OK 
CSeq: 4 
Date: wed, Feb 20 2008 07:13:25 GMT 
Transport: RTP/AVP;unicast;destination=192.168.1.222;source=192.168.1.109;client_port=1114-1115;server_port=6972-6973 
Session: 3

5)C -> M 
PLAY rtsp://192.168.1.109/1.mpg/ RTSP/1.0 
CSeq: 5 
Session: 3 
Range: npt=0.000- 
User-Agent: VLC media player(LIVE555 Streaming Media v2007.02.20)

5)M -> C 
RTSP/1.0 200 OK 
CSeq: 5 
Range: npt=0.000- 
Session: 3 
RTP-Info: url=rtsp://192.168.1.109/1.mpg/track1;seq=9200;rtptime=214793785,url=rtsp://192.168.1.109/1.mpg/track2;seq=12770;rtptime=31721

(开始传输流媒体...)

rtsp交互命令简介及过程参数描述相关推荐

  1. 1623_MIT 6.828 在JOS中增加一条交互命令

    全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 在lab1中有一个实现要 ...

  2. 批处理常用命令总结 - 批处理命令简介

    bat 批处理切换到当前脚本所在文件夹 切换到当前脚本所在的文件夹 1 cd  %~dp0 另外附上一些bat基本内容 ------------------------------ 批处理常用命令总结 ...

  3. 计算机基础知识——DOS命令简介

    1.DOS简介 1.1.什么是DOS DOS是英文Disk Operating System的缩写,意思是"磁盘操作系统",它是一个单用户单任务操作系统,它直接操纵管理硬盘的文件, ...

  4. 计算机基础知识——Linux命令简介

    1.Linux操作系统基础知识 在了解linux命令之前,我们先了解一点基本概念. 1.1.操作系统概念 操作系统(operating system 简称OS)是一个大型的程序系统,他负责计算机的全部 ...

  5. vsearch2.8.1使用和命令简介——中文帮助文档(免费64位版usearch)

    简介 主要功能和命令行格式 嵌合体检测 聚类 去冗余 序列操作 屏蔽序列 两两比对 搜索 重排与排序 抽样 物种分类 处理UDB数据库索引 描述 输入 参数 通用参数 嵌合体检测参数 聚类参数 序列去 ...

  6. Wireshark 抓包分析 RTSP/RTP/RTCP 基本工作过程

    整体而言,RTSP 通常工作于可靠的传输协议 TCP 之上,就像 HTTP 那样,用于发起/结束流媒体传输,交换流媒体元信息.RTP 通常工作于 UDP 之上,用于传输实际的流媒体数据,其中的载荷格式 ...

  7. Linux常用命令简介

    su  su命令是最基本的命令之一,常用于不同用户间切换.例如,如果登录为 user1,要切换为user2,只要用如下命令:  $su user2  然后系统提示输入user2口令,输入正确的口令之后 ...

  8. linux expect 自动交互命令 总结

    如何从机器A上ssh到机器B上,然后执行机器B上的命令?如何使之自动化完成?看完下面的文章你就明白了 一.安装 expect 是基于tcl 演变而来的,所以很多语法和tcl 类似 sudo apt-g ...

  9. find与grep命令简介及正则表达式(转)

    find与grep命令简介及正则表达式 两个更为有用的命令和正则表达式 在我们开始学习新的Shell编程知识之前,我们先来看一下两个更为有用的两个命令,这两个命令虽然并不是Shell的一部分,但是在进 ...

最新文章

  1. linux启动运行级别上机,linux的启动及其运行级别
  2. [原创] hadoop学习笔记:wordcout程序实践
  3. malloc 结构体_算法与数据结构——结构体变量
  4. Ookla speedtest网速测试算法实现
  5. js中split字符串分割示例
  6. linux / pkg-config 原理及用法
  7. 合并BN层到卷积层的原理及实验
  8. MFC六大核心机制之三:动态创建
  9. 测试必备:if条件测试( if-else语句、if-elif-else语句、多个elif代码块、省略else代码块、测试多个条件)
  10. 爱了!华为nova 5细节曝光:外观配置堪比Mate 20 Pro
  11. sql载取最后出现字符前的字符
  12. pandas如何去掉时间列的小时只保留日期
  13. 华为Fusioncompute 安装windows虚拟机tools安装失败和硬盘不识别问题解决
  14. python项目运行的软硬件环境_开发时的软硬件环境和运行时的软硬件环境分别是什么...
  15. 几大图片加载框架比较
  16. Udacity Self-Driving数据集介绍
  17. 墨菲定律和海恩法则、事故调查“四不放过”原则--运维
  18. 利用 Eclipse Visual Editor 项目构建 GUI 应用程序
  19. 2021-11-02
  20. 淘宝、一淘、淘宝商城 - 马云内部邮件谈分拆

热门文章

  1. jQuery UI resizble、draggable的div包含iframe导致缩放和拖拽的不平滑解决方法
  2. Visual C#3.0新特性概览
  3. 龙书啃不动?老司机带你从零入门编译原理,开发编译器
  4. 在线设计 html5 表单,html5注册表单制作-表单制作-小程序表单制作
  5. android 串口调试adb,Android系统 debug 技巧(最全最强adb 串口调试命令)
  6. php网站调试出现的简单问题,调试php时网站出现502的解决方法
  7. 分布式ID-百度(uid-generator)
  8. 多案分库分表带来的问题-跨库关联查询
  9. MyBatis 哪些地方用到了代理模式?
  10. MyBatis 源码解读-reflectorFactoryElement()