锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / Darwin服务器 / Darwin概念之自动播送
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

自动播送


流媒体服务器可以接受来自QuickTime播送器的RTSP ANNOUNCE请求。服务器支持ANNOUNCE请求,同时也可以充当RTSP客户端,因此可以自行发起一个新的中继会话。本部分将描述发起自动播送的两种方式,ANNOUNCE请求如何与SDP协同工作,以及qtaccess和qtusers文件如何控制自动播送。

这个部分的主要内容如下:

一、自动播送的场景


QTSS支持两种自动播送的场景:

  • 先拉后推。为了发起自动播送,RTSP客户会发送标准的RTSP请求来向服务器请求一个流,然后服务器将该流中继到一个或者多个流媒体服务器。这种场景在“先拉后推”部分中加以描述。
  • 先侦听后推送。在这个场景中,自动播送在流媒体服务器接收到ANNOUNCE请求时被发起。这个场景在“先侦听后推送”部分中进行描述。

先拉后推

用户可以通过发送标准的DESCRIBE/SETUP/PLAY请求来向远程的源中请求一个流,然后将它中继到一个或者多个目的地。当组织机构只希望让外部流的一个拷贝消费其内部连接的带宽时,这个功能可能有用。中继位于企业网络的内部,负责将流推送给反射器(可能是它自己)。图2-7提供了一个先拉后推(pull-then-push)场景的实例。

图1-7先拉后推式的自动播送
Pull-then-push automatic broadcasting

以图 2-7作为参考,先拉后推场景的步骤如下:

  • 流媒体服务器A(中继客户)发送标准的RTSP客户DESCRIBE/SETUP/PLAY请求给远程服务器,即流媒体服务器B。
  • 发起请求的中继“客户”(流媒体服务器A)开始接受流,然后向该输入流的中继配置中列出的所有目的地发送ANNOUNCE请求。

先侦听后推送

流媒体服务器可以被配置为将ANNOUNCE请求创建的输入流自动发送到一个或者多个目的地。这可能可以用于配制自动播送网络。图 1-8提供了一个先侦听后推送的场景的实例。

图1-8 先侦听后推送式的自动播送
Listen-then-push automatic broadcasting

以图 1-8作为参考,先侦听后推送场景的步骤如下:

  • 远程机器(播送器或者中继器)向流媒体服务器A发送一个ANNOUNCE请求。流媒体服务器可以接受或者否认这个请求。如果它接受了请求,则流媒体服务器会检查其中继配置,以确定这个流是否应该被中继。
  • 如果该流应该被中继,则流媒体服务器将向自身发送标准的RTSP客户DESCRIBE/SETUP/PLAY请求。
  • 发出请求的中继“客户”(流媒体服务器A)开始接收流,然后向相应的输入流的中继配置中列出的所有目的地发送一个ANNOUCE请求。

在缺省情况下,认证对于自动播送是必要的。来自播送器的ANNOUNCE请求需要通过服务器中活跃的认证机制来过滤。为了支持播送认证,需要在qtaccess文件中加入一个新的WRITE指令。这个新的指令使得SDP文件可以被写入到电影文件夹中。


二、ANNOUNCE请求和SDP


ANNOUNCE请求中包含播送流的会话描述协议(Session Description Protocol,简称SDP)信息。为了提供名字空间的功能,ANNOUNCE请求中的URI值可能包含路径的界定符。

在通过ANNOUNCE请求发起流的播送时,SDP信息被存储在内存中的一个播送列表中。如果要终止流的播送,需要播送器向服务器发送一个TEARDOWN请求,使服务器关闭播送会话,并丢弃SDP信息。类似地,RTSP连接被断开,以及播送器在90秒长的窗口内没有向服务器发送RTCP发送方报告,都会使服务器关闭播送会话及丢弃SDP信息。

为了使多个SDP引用同一个播送流,支持已发布的UDP和TCP播送流,ANNOUNCE报头中的端口设定为0。下面是一个实例:

m=audio 0 RTP/AVP

 

为了共享不同的播送流(在这种情况下一个流来自一个播送器,另一个流来自另一个播送器),需要一个a=x-urlmap标识。a=x-urlmap标识应该出现在引用源SDP的SDP中,下面是一个实例:

a=x-urlmap: someotherbroadcastURL/TrackID=1

 


三、已发布的播送流的访问控制

qtaccess文件中定义了两个新的用户标识,以控制自动播送。表2-25列举了这些新的标识。


表2-25 用于访问控制的用户标识

标识

目的

valid-user

对于这个标识指定的用户,如果客户端提供了与qtusers文件中的条目相匹配的用户名和密码,则可以访问其请求的电影。这个标识表示为require valid-user。

any-user

这个标识指定的用户对其请求的电影具有访问权,不要求在qtusers文件中定义该用户,也不要求客户端提供被检查的名字和密码。这个标识的表示为require any-user。


缺省情况下,qtaccess文件允许读取文件中所有的指令符。qtaccess文件中必须包含一个允许写的Limit指令符,才能支持已发布的播送流。

Limit指令的目的是为了限制RTSP读取方或者写入方的访问控制。下面的实例对require指示符的访问控制进行限制,使得只有在qtusers文件中定义的用户才可以将一个播送流通过RTSP PLAY的方式发给服务器。而对于其它正常的客户端PLAY请求则不做限制:

<Limit WRITE>

require valid-user

</Limit>

 

请注意:Limit命令符的结束端(</Limit>)必须自成一行。

下面的例子允许qtusers文件中属于movie_watchers组的所有用户,以及名为john的用户看电影;而只有隶属movie_broadcasters组的播送器才能将流播送到qtusers文件所在的目录或其受保护的目录分支下。

<Limit READ>

require group movie_watchers

require user john

</Limit>

<Limit WRITE>

require group movie_broadcasters

</Limit>

 

请注意:qtaccess文件中的字符串是大小写敏感的。
下面这个例子和前一个例子的结果相同。在没有指定Limit域时,QTSS的缺省行为是将访问权限限制为只读,所以下面的配置可以正常工作。

require group movie_watchers

<Limit WRITE>

require group movie_broadcasters

</Limit>

require user john

 

下面的例子允许qtusers文件中属于movie_watchers_and_broadcasters组的所有用户观看电影和进行流的播送:

<Limit READ WRITE>

require group movie_watchers_and_broadcasters

</Limit>

 


四、播送器到服务器的实例


下面部分将说明启动一个发布过的(announced)流播送( broadcast)的过程中客户和服务器之间典型交互情况。下面的例子说明的是建立UDP组播(multicast)的交互情况。发布过的流播送也可以通过单播(unicast)RTP/AVP/UDP流和RTP/AVP/TCP交织流来建立请求。如果需要更多信息,请参见RFC 2326。

客户端发送给服务器端:

    ANNOUNCE rtsp://server.example.com/meeting RTSP/1.0
    CSeq: 90
    Content-Type: application/sdp
    Content-Length: 121
    v=0
    o=camera1 3080117314 3080118787 IN IP4 195.27.192.36
    s=IETF Meeting, Munich - 1
    i=The thirty-ninth IETF meeting will be held in Munich, Germany
    u=http://www.ietf.org/meetings/Munich.html
    e=IETF Channel 1 <ietf39-mbone@uni-koeln.de>
    p=IETF Channel 1 +49-172-2312 451
    c=IN IP4 224.0.1.11/127
    t=3080271600 3080703600
    a=tool:sdr v2.4a6
    a=type:test
    m=audio 0 RTP/AVP 5
    a=control:trackID=1
    c=IN IP4 224.0.1.11/127
    a=ptime:40
    m=video 0 RTP/AVP 31
    a=control:trackID=2
    c=IN IP4 224.0.1.12/127

 

服务器端发送给客户端:

    RTSP/1.0 200 OK
    CSeq: 90

 

客户端发送给服务器端:

    SETUP rtsp://server.example.com/meeting/trackID=1 RTSP/1.0
    CSeq: 91
    Transport: RTP/AVP;multicast;destination=224.0.1.11;
    client_port=21010-21011;mode=record;ttl=127

 

服务器端发送给客户端:

    RTSP/1.0 200 OK
    CSeq: 91
    Session: 50887676
    Transport: RTP/AVP;multicast;destination=224.0.1.11;
    client_port=21010-21011;serverport=6000-6001;mode=receive;ttl=127

 

客户端发送给服务器端:

    SETUP rtsp://server.example.com/meeting/trackID=2 RTSP/1.0
    CSeq: 92
    Session: 50887676
    Transport: RTP/AVP;multicast;destination=224.0.1.12;
    client_port =61010-61011;mode=record;ttl=127

 

服务器端发送给客户端:

    RTSP/1.0 200 OK
    CSeq: 92
    Transport: RTP/AVP;multicast;destination=224.0.1.12;
    client_port =61010-61011;serverport=6002-6003;mode=record;ttl=127

 

客户端发送给服务器端:

    RECORD rtsp://server.example.com/meeting RTSP/1.0
    CSeq: 93
    Session: 50887676

 

服务器端发送给客户端:

    RTSP/1.0 200 OK
    CSeq: 93

 


五、另外一些跟踪实例


这部分提供了三个踪迹信息(trace)。第一个踪迹来自QuickTime Broadcaster,产生于通过TCP协议发送MPEG 4流的过程;第二个也是来自QuickTime Broadcaster,但是使用的是UDP;第三个踪迹是来自RFC 2326(RTSP),说明的是基于UDP传输的ANNOUNCE和RECORD两个RTSP方法。

值得注意的直播器请求如下:

  • RTSP ANNOUNCE 请求,将SDP文件发送给服务器
  • RTSP SETUP请求,发送传输报头,设置mode=record;流的方向自然是服务器预期的方向。
  • RTSP RECORD请求,启动播送。

流客户请求的镜像请求:

  • RTSP DESCRIBE请求,用于从服务器接收SDP文件
  • RTSP SETUP请求,用于建立流
  • RTSP PLAY请求,用于启动流

示例一:QuickTime Broadcaste使用TCP的踪迹

示例一:带有协商后的服务器端口的UDP流播送

示例一:使用UDP传输的ANNOUNCE和RECORD踪迹


友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内