RTSP协议

        RTSPreal time streaming protocol,按照我的理解为流媒体控制协议,协议双方的的编码类型和地址,以及对stream media的控制(play,pause,record).

     作为一个应用层协议,RTSP提供了一个可供扩展的框架,它的意义在于使得实时流媒体数据的受控和点播变得可能。总的说来,RTSP是一个流媒体表示协议,主要用来控制具有实时特性的数据发送,但它本身并不传输数据,而是必须依赖于下层传输协议所提供的某些服务。RTSP可以对流媒体提供诸如播放、暂停、快进等操作,它负责定义具体的控制消息、操作方法、状态码等,此外还描述了与RTP间的交互操作。

    RTSP在制定时较多地参考了 HTTP/1.1协议,甚至许多描述与HTTP/1.1完全相同。RTSP之所以特意使用与HTTP/1.1类似的语法和操作,在很大程度上是为了兼容现有的Web基础结构,正因如此,HTTP/1.1的扩展机制大都可以直接引入到RTSP中。

    RTSP控制的媒体流集合可以用表示描述(Presentation Description)来定义,所谓表示是指流媒体服务器提供给客户机的一个或者多个媒体流的集合,而表示描述则包含了一个表示中各个媒体流的相关信息,如数据编码/解码算法、网络地址、媒体流的内容等。

    rtsp工作流程如下图:

   下面通过介绍RTSP的几种方法来说明协议

1:options

这个通常由client发送server,询问服务器所支持的方法种类,当然在应用中也可以用来作为心跳,因为它是状态无关的.例如:

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

服务端发送的200ok里表明服务端支持describe,setup,teardown,play,pause.

在这里可以看到请求和响应的cseq相同,对应后面所有的消息,请求和响应的cseq都是相同的.

 

2:describe

按照字面意思,就是描述,描述什么呢?当然是流媒体的信息呢,在返回的应答中包含SDP.举个例子

DESCRIBE rtsp://server.address:port/object.sdp RTSP/1.0\r\n

CSeq: 1\r\n

\r\n

-----------------------------------------------------------------------

RTSP/1.0 200 OK\n

Server: QTSS(IFI)/v88\n

Cseq: 1\n

Content-Type: application/sdp\n

Content-Base: rtsp://bildeus.ifi.uio.no:8000/12.sdp/\n

Content-length: 785\n

\n

n=2236805513 2236805513 932036356 224.2.127.254 9875 127 trusted\n

v=0\n

o=yozo 3138827440 3138828177 IN IP4 aohakobe.ipc.chiba-u.ac.jp\n

s=Places all over the world\n

i=Low bandwidth video (10kb/s) with views from all over the world. Audio is primarily for feedback for the senders of video. (looks like there's some problem for the session announcement from sweden distributes to the whole MBone, I'm repeating the announcement from japan. -- yozo.)\n

e=Yozo TODA at IPC, Chiba University, JAPAN <yozo@ipc.chiba-u.ac.jp.>\n

p=+81-43-290-3539\n

c=IN IP4 224.2.213.113/127\n

t=3138827400 3141246600\n

a=tool:sdr v2.6.1\n

a=type:test\n

m=audio 20154 RTP/AVP 0\n

c=IN IP4 224.2.213.113/127\n

a=ptime:40\n

a=control:trackID=1\n

m=video 51482 RTP/AVP 31\n

c=IN IP4 224.2.172.238/127\n

a=control:trackID=2\n

在应答中, 我们重点关注SDP字段.SDP,我们看到了流媒体包含了2个资源(m):audiovideo,其中a行是m(media)的属性描述.m行中,中间的数字为服务端推荐客户端接收的端口,如果服务端不想这样做,可以将port置为0.sdp,还有a=control字段,rfc2326,对其的解释如下:

   The "a=control:" attribute is used to convey the control URL. This

   attribute is used both for the session and media descriptions. If

   used for individual media, it indicates the URL to be used for

   controlling that particular media stream. If found at the session

   level, the attribute indicates the URL for aggregate control.

   Example:

     a=control:rtsp://example.com/foo

   This attribute may contain either relative and absolute URLs,

   following the rules and conventions set out in RFC 1808 [25].

   Implementations should look for a base URL in the following order:

   1.     The RTSP Content-Base field

   2.     The RTSP Content-Location field

   3.     The RTSP request URL

   If this attribute contains only an asterisk (*), then the URL is

   treated as if it were an empty embedded URL, and thus inherits the

   entire base URL.

这里我们对集合控制(aggregate control)进行说明.当服务端支持集合控制,比如对一个音频视频流,它就不需要建立2session,集合成一个sessionok,如果不支持就得分别建立2session.我的理解a=control即是对媒体的标识:比如track1表示视频,track2表示音频.在后续的setup中可以看到这点.

通过SDP这些参数我们就可以知道流媒体的编码格式.

3:setup

建立会话,如果支持集合控制,setup中会包含session字段.下面的消息是支持集合操作的例子.

SETUP rtsp://server.address:port/object.sdp/trackID=1 RTSP/1.0\r\n

CSeq: 2\r\n

Transport: RTP/AVP;unicast;client_port=9000-9001\r\n

\r\n

-------------------------------------------------------------------------

RTSP/1.0 200 OK\n

Server: QTSS(IFI)/v88\n

Cseq: 2\n

Session: 1234567890;timeout=60

Transport: rtp/avp;source=129.240.65.208;server_port=9000-9001;client_port=9000-9001\n

\n

--------------------------------------------------------------------------

SETUP rtsp://server.address:port/object.sdp/trackID=2 RTSP/1.0\r\n

CSeq: 3\r\n

Session: 1234567890\r\n

Transport: RTP/AVP;unicast;client_port=9000-9001\r\n

\r\n

    在例子中我们看到,通过setup的响应,即建立了流媒体的会话.后续的setup必须带上session字段,通过上面的消息我们看到客户端发送了2setup,分别是代表videotrack1audiotrack2.如果服务端不支持集合操作,那么setup里带上session字段则是非法的.在消息中,我们看到了transport字段,在这里表明了客户端接收流媒体的端口,以及编码格式.在本例中采用的是udp方式传送RTP,如果采用TCP的方式传送RTP,则可能transport字段为:Transport: RTP/AVP/TCP;unicast;interleaved=0-1 ,这里解释下interleaved,因为采用TCP方式传送,所以传送的RTP,RTCP包都在同一个链路上,需要区分,所以有了interleaved,0表示是RTP的通道,1表示是RTCP的通道.体现在包上面就是在RTP,RTCP包上封装了一层interleaved frame,格式如下:

Magic:0x24

Channel:0x01(表示RTCP)

Length:84

4:play

play 即对流媒体的播放指令:

PLAY rtsp://server.address:port/object.sdp RTSP/1.0\r\n

CSeq: 4\r\n

Session: 1234567890\r\n

\r\n

通常在play中有range字段,但不是必需的.这个字段表示播放的流媒体的范围.

5:teardown

teardown指令即对流媒体的结束

teardown中是否必须带有session,我们曾经进行过讨论.如果一个session对应一个链路,则可以不需要对应session,但是在我们遇到的应用中,teardown基本都是携带了teardown.谈到这里,我们说下RTSP的几种连接类型:

* persistent transport connections used for several request-response transactions

* one connection per request/response transaction;

* connectionless mode.

      对几种基本的消息的介绍就到这里了,我们现在来谈谈RTSP的状态机.其实RTSP的状态机很简单,不像sip协议那么复杂.对应很多消息,是状态无关的.现在这里只介绍与服务器相关的状态机:

     state           message received     next state

     Init             SETUP                    Ready

                         TEARDOWN          Init

     Ready           PLAY              Playing

                     SETUP             Ready

                     TEARDOWN          Init

                     RECORD            Recording

     Playing         PLAY              Playing

                     PAUSE             Ready

                     TEARDOWN          Init

                     SETUP             Playing

     Recording       RECORD            Recording

                     PAUSE             Ready

                     TEARDOWN          Init

                     SETUP             Recording

     通过上面的表,我们就可以知道消息的发送必须是有序的,比如还没有发送setup,就不能发送play.还有连续2次的pause肯定是错误的.在这个状态机中,是没有结束的,我们通常teardown后一个会话就会结束,甚至会关闭链路.但是在上图中又回到了init状态,我对此有些迷惑,这里又要提到了上面我们讨论的话题:teardown是否该带session,在这个状态机中,在任何阶段都可以接收teardown,比如init阶段,这个阶段是没有session.

一款免费的流媒体直播软件,主要用于流媒体直播,视频直播,视频点播,视频录制等应用,与FMS、WOWZA、RED5一道,作为用户流媒体直播应用的可选方案。 1、支持Windows/Linux等多种操作系统; 2、采用开发的流媒体协议,而非私有协议,可以与主流系统对接,至少支持RTMP推流,RTMP拉流,RTSP拉流三种方式获取直播流,支持对获取的直播流再按照TS组播或者单播,RTMP,RTSP,HLS,TS OVER HTTP,FLV OVER HTTP等标准流媒体协议的方式进行对外直播转发; 3、支持录制,可定时录制或手动录制,能录制MP4或者FLV格式文件,录制时支持生成新文件或者追加文件两种方式,支持录制超过4G的文件; 4、单台服务器可支持1000个以上并发用户,直播延时小于2秒; 5、支持RTMP转发功能,能够把AMS上的直播流转发给其它AMS服务器或者第三方的RTMP服务器,例如RED5,FMS,WOWZA流媒体服务器; 6、 支持PC/手机/平板电脑等多终端访问,无论是windows,linux,或者andriod以及IOS系统访问收看直播时都无需下载插件,直接观看; 7、响应点播时间控制在100ms以内,支持暂停、拖动等特技操作; 8、支持文件直播,可把硬盘上存在的FLV文件编目后,按设定好的任务和顺序进行直播; 9、内置Web应用系统,无需复杂配置,可直接部署到用户服务器使用,也可以选配更复杂的媒资管理系统,完成类似优酷土豆的应用模式; 10、开放的系统架构,提供二次开发接口,可轻松的融入到用户已有的平台或网站平台中、或在此基础上进行二次开放等 ------------------------------------------------------------------------- 使用说明: 1、关于安装运行:软件解压到硬盘上后,执行AokuMServiceManager,即可完成AMS服务的安装,安装完成后,在Windows系统服务中会出现一个AokuMService服务; 2、关于端口:AMS默认的管理端口是9001,可通过浏览器登陆http://127.0.0.1:9001/main.html进行管理;AMS默认的RTMP端口是1935,默认的rtsp端口是5554,默认的flv over http端口是7000,默认的ts over http端口是8008,默认的hls端口也是9001; 3、关于推流:使用直播你需要有一个支持rtmp推流的编码器,建议用奥酷全接口高清编码器,当然你也可以通过FME进行软编码来实现; 4、关于接收直播:AMS正常启动并发布上直播流后,你可以在网络内的任一电脑上打开http://ip:9001,通过浏览器观看直播,若开启了hls功能,通过iphone或者ipad登陆http://ip:9001即可观看直播。 5、若开启了TS组播,请确认防火墙是否允许组播,另外您网络内的路由器是否支持组播,接收组播是需要用VLC播放器来完成; 6、接收flv over http也是通过VLC播放器或者支持类似协议的播放器来测试。 7、若使用中出现问题,你可以查看logs目录下的rtmpserver.log文件,里面有详细的错误日志描述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值