理解RTSP(Real Time Streaming Protocol)实时流协议

什么是协议?

接收到的数据,通过固定的方式封装后发送给他人,他人通过固定的方式解封装,便可获得需要的数据。此处涉及的固定封装和解封装方式就是一种协议。

协议是规则约束,这样可以理解,在不断的实践中协议会根据现有需求或是将有需求,不断的迭代升级。无论是谁,只要满足协议,就可以加入支持该协议的环境。

RTSP

实时流协议(Real Time Streaming Protocol,RTSP)是一种网络应用协议,专为娱乐和通信系统的使用,以控制流媒体服务器。该协议用于创建和控制终端之间的媒体会话。媒体服务器的客户端发布VCR命令,例如播放,录制和暂停,以便于实时控制从服务器到客户端(视频点播)或从客户端到服务器(语音录音)的媒体流。

方法定义

说明: 方向中(C 客户端 S 服务端) 对象中 (P 表示 S 媒体流)

方法方向对象要求
OPTIONSC->S, S->CP,S必选 (S->C: 可选)
DESCRIBEC->SP,S推荐
ANNOUNCEC->S, S->CP,S可选
GET_PARAMETERC->S, S->CP,S可选
PAUSEC->SP,S推荐
PLAYC->SP,S必选
RECORDC->SP,S可选
REDIRECTS->CP,S可选
SETUPC->SS必选
SET_PARAMETERC->S, S->CP,S可选
TEARDOWNC->SP,S必选
  • 1 OPTIONS
    选项请求返回服务器可接受的请求类型

    C->S: OPTIONS * 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
    
  • 2 DESCRIBE
    描述方法检索演示文稿的描述或来自服务器的请求URL标识的媒体对象。 它可能会使用Accept标头,指定客户端支持的描述格式。 服务器响应所请求的描述资源。 DESCRIBE回复-响应构成了媒体RTSP的初始化阶段。

    媒体初始化是任何基于RTSP的系统的要求,但RTSP规范并没有规定必须通过DESCRIBE方法做。

    RTSP客户端有三种方式初始化信息

    • 通过RTSP的DESCRIBE方法;
    • 通过一些其他协议(HTTP,电子邮件附件等);
    • 通过命令行或标准输入(因此作为浏览器工作使用SDP文件或其他媒体启动的帮助应用程序初始化格式)。

    为了实际的互操作性,是被强烈推荐实现。

    C->S: DESCRIBE rtsp://server.example.com/fizzle/foo RTSP/1.0
    	CSeq: 312
    	Accept: application/sdp, application/rtsl, application/mheg
    	
    S->C: RTSP/1.0 200 OK
    	CSeq: 312
    	Date: 23 Jan 1997 15:35:06 GMT
    	Content-Type: application/sdp
    	Content-Length: 376
    	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 3456 RTP/AVP 0
    	m=video 2232 RTP/AVP 31
    	m=whiteboard 32416 UDP WB
    	a=orient:portrait
    
  • 3 ANNOUNCE
    发布方法有两个目的:

    • 从客户端发送到服务器时,ANNOUNCE将请求URL标识的演示文稿或媒体对象的描述发布到服务器。当从服务器发送到客户端时,ANNOUNCE会实时更新会话描述。
    • 如果新的媒体流被添加到演示文稿中(例如,在实时演示中),则应该再次发送整个演示文稿描述,而不仅仅是附加的组件,以便可以删除组件。
    C->S: ANNOUNCE rtsp://server.example.com/fizzle/foo RTSP/1.0
    	CSeq: 312
    	Date: 23 Jan 1997 15:35:06 GMT
    	Session: 47112344
    	Content-Type: application/sdp
    	Content-Length: 332
    	v=0
    	o=mhandley 2890844526 2890845468 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 3456 RTP/AVP 0
    	m=video 2232 RTP/AVP 31
    	
    S->C: RTSP/1.0 200 OK
    	CSeq: 312
    
  • 4 SETUP
    建立请求指定如何传输单个媒体流。这必须在发送PLAY请求之前完成。请求包含媒体流URL和传输说明符。该说明符通常包括用于接收RTP数据(音频或视频)的本地端口,另一个用于RTCP数据(元信息)。服务器回复通常会确认所选参数,并填写缺少的部分,例如服务器选择的端口。必须在发送聚合播放请求之前,使用SETUP配置每个媒体流。

    C->S: SETUP rtsp://example.com/foo/bar/baz.rm RTSP/1.0
    	CSeq: 302
    	Transport: RTP/AVP;unicast;client_port=4588-4589
    	
    S->C: RTSP/1.0 200 OK
    	CSeq: 302
    	Date: 23 Jan 1997 15:35:06 GMT
    	Session: 47112344
    	Transport: RTP/AVP;unicast;
    	client_port=4588-4589;server_port=6256-6257
    
  • 5 PLAY
    播放请求 将导致播放一个或所有媒体流。可以通过发送多个播放请求来堆叠播放请求。URL可以是聚合URL(播放所有媒体流)或单个媒体流URL(仅播放该流)。可以指定范围。如果没有指定范围,流将从头开始播放,并播放到最后,或者如果流暂停,则在暂停点恢复播放。

    C->S: PLAY rtsp://audio.example.com/twister.en RTSP/1.0
    	CSeq: 833
    	Session: 12345678
    	Range: smpte=0:10:20-;time=19970123T153600Z
    	
    S->C: RTSP/1.0 200 OK
    	CSeq: 833
    	Date: 23 Jan 1997 15:35:06 GMT
    	Range: smpte=0:10:22-;time=19970123T153600Z
    
  • 6 PAUSE
    暂停请求 暂时停止一个或所有媒体流,因此稍后可以通过播放请求恢复。请求包含聚合或媒体流URL。PAUSE请求中的范围参数指定何时暂停。当省略范围参数时,暂停会立即无限期地发生。

    C->S: PAUSE rtsp://example.com/fizzle/foo RTSP/1.0
    	CSeq: 834
    	Session: 12345678
    	
    S->C: RTSP/1.0 200 OK
    	CSeq: 834
    	Date: 23 Jan 1997 15:35:06 GMT
    
  • 7 TEARDOWN
    停止发布流请求用于终止会话。它停止所有媒体流,并释放所有与会话相关的数据在服务器上。

    C->S: TEARDOWN rtsp://example.com/fizzle/foo RTSP/1.0
    	CSeq: 892
    	Session: 12345678
    	
    S->C: RTSP/1.0 200 OK
    	CSeq: 892
    
  • 8 GET_PARAMETER
    获取参数请求检索在URI中指定的呈现或流的参数的值。答复和回复的内容留给实施。

    S->C: GET_PARAMETER rtsp://example.com/fizzle/foo RTSP/1.0
    	CSeq: 431
    	Content-Type: text/parameters
    	Session: 12345678
    	Content-Length: 15
    	packets_received
    	jitter
    	
    C->S: RTSP/1.0 200 OK
    	CSeq: 431
    	Content-Length: 46
    	Content-Type: text/parameters
    	packets_received: 10
    	jitter: 0.3838
    
  • 9 SET_PARAMETER
    设置参数请求设置由URI指定的演示文稿或流的参数值。

    C->S: SET_PARAMETER rtsp://example.com/fizzle/foo RTSP/1.0
    		CSeq: 421
    		Content-length: 20
    		Content-type: text/parameters
    		barparam: barstuff
    			
    S->C: RTSP/1.0 451 Invalid Parameter
    	CSeq: 421
    	Content-length: 10
    	Content-type: text/parameters
    	barparam
    
  • 10 REDIRECT
    重定向请求通知客户端它必须连接到另一个服务器位置。它包含强制性头文件位置,表示客户端应发出该URL的请求。它可能包含参数Range,它指示重定向何时生效。如果客户端希望继续发送或接收此URI的媒体,则客户端必须向指定的主机发出针对当前会话的TEARDOWN请求和新会话的SETUP。

    S->C: REDIRECT rtsp://example.com/fizzle/foo RTSP/1.0
    	CSeq: 732
    	Location: rtsp://bigserver.com:8001
    	Range: clock=19960213T143205Z-
    
  • 11 RECORD
    记录请求根据呈现描述开始记录一系列媒体数据。时间戳反映开始和结束时间(UTC)。如果没有给定时间范围,请使用演示文稿描述中提供的开始或结束时间。如果会话已经开始,请立即开始录制。服务器决定是否将记录的数据存储在请求URI或其他URI下。如果服务器不使用请求URI,则响应应为201,并包含描述请求状态并引用新资源的实体以及Location头。

    C->S: RECORD rtsp://example.com/meeting/audio.en RTSP/1.0
    	CSeq: 954
    	Session: 12345678
    	Conference: 128.16.64.19/32492374
    
  • 12 Embedded (Interleaved) Binary Data
    嵌入式(交错式)二进制数据,某些防火墙设计和其他情况可能会强制服务器交叉RTSP方法和流数据。除非有必要,通常应避免这种交错,因为它会使客户端和服务器操作复杂化,并增加额外的开销。交叉二进制数据只能在RTSP通过TCP传输时使用。诸如RTP数据包之类的流数据由ASCII码符号(24个十六进制)封装,后跟一个字节的信道标识符,后面是封装二进制数据的长度,以二进制字节为单位,以网络字节顺序排列。流数据紧随其后,没有CRLF,但包括上层协议头。每个$块只包含一个上层协议数据单元,例如一个RTP包。

    C->S: SETUP rtsp://foo.com/bar.file RTSP/1.0
    	CSeq: 2
    	Transport: RTP/AVP/TCP;interleaved=0-1
    	
    S->C: RTSP/1.0 200 OK
    	CSeq: 2
    	Date: 05 Jun 1997 18:57:18 GMT
    	Transport: RTP/AVP/TCP;interleaved=0-1
    	Session: 12345678
    	C->S: PLAY rtsp://foo.com/bar.file RTSP/1.0
    	CSeq: 3
    	Session: 12345678
    	S->C: RTSP/1.0 200 OK
    	CSeq: 3
    	Session: 12345678
    	Date: 05 Jun 1997 18:59:15 GMT
    	RTP-Info: url=rtsp://foo.com/bar.file;
    	seq=232433;rtptime=972948234
    	
    S->C: $\000{2 byte length}{"length" bytes data, w/RTP header}
    
    S->C: $\000{2 byte length}{"length" bytes data, w/RTP header}
    
    S->C: $\001{2 byte length}{"length" bytes RTCP packet}
    

状态码定义

1xx:信息 - 收到请求,继续处理
2xx:成功 - 该行动已成功收到,理解,并接受
3xx:重定向 - 必须采取进一步行动完成请求
4xx:客户端错误 - 请求包含错误的语法或不能完成
5xx:服务器错误 - 服务器未能完成有效请求

状态码定义
100继续
200成功
201创建
250存储空间不足
300多种选择
301永久移动
302暂时移动
303见其他
304没有修改
305使用代理服务器
400错误的请求
401未授权
402需要付款
403被禁止
404未找到
405方法不允许
406不能接受的
407需要代理验证
408请求超时
410不在
411长度要求
412前提条件失败
413请求的实体太大
414请求URI太大
415不支持的媒体类型
451参数未被理解
452会议未找到
453没有足够的带宽
454找不到会话
455方法在此状态下无效
456标头字段对资源无效
457无效范围
458参数是只读的
459不允许聚合操作
460只允许聚合操作
461不支持的运输
462目标无法访问
500内部服务器错误
501未实现
502错误的网关
503暂停服务
504网关超时
505不支持RTSP版本
551选项不受支持

WEB:www.liveqing.com

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页