RTSP服务器(一)


                                                        RTSP服务器(一)
一:总体了解
RTSP(Real-Time Stream Protocol )是一种基于文本的应用层协议,直白的讲客户端与服务器建立连接并从服务器上接收流,服务器上的流可以是采集的,文件,等等。
二:服务器模式
    1:以文件为例,输入到服务器的源可以做一个MediaSession, 的list来管理各各文件流,最理想的方式是这个list管理各个客户端要请求的流,这中间就要做复制流的操作。
    2:接收客户端请求,当每一个客户端连接到服务器时,建立一个RtspSession, 的list, 对每一个客户端的请求,命令做出响应。即每一个客户端都是一个RtspSession。
三:RTSP请求消息
    服务器启动后已经创建了TCP,listen,等待客户端的连接,当客户端请求和服务器连接时,要发送一个例如RTSP://*.*.*.*(ip):(端口)/文件path,的请求,这样根据信息,客户端和服务器就可以建立TCP连接。
    然后服务器对客户端的请求开始做出响应。
    DESCRIBE,ANNOUNCE,GET_PARAMETER,OPTIONS,PAUSE,PLAY,RECORD,SETUP,SET_PARAMETER,TEARDOWN,这里只说下常用的几种请求。

    

   1:OPTIONS,C主动发出请求,查询S有哪些方法可以用(这10种当中),然后S回应给C自己有什么处理方法可以用。
   2:DESCRIBE,C主动发出请求,要求S给出C请求媒体的描述信息(即要C要接收的媒体,音频或视频的描述信息SDP),S将从文件或采集时读取的信息填写到固定格式的SDP中发送给请求本媒体的C。
   3:SETUP,C主动发出请求,要求S创建传输数据的连接一般为UDP,S创建UDP,C与之连接。
   4:PLAY,C主动发出请求,要求S开始往C传输数据,这时用到的就是SETUP建立的UDP连接,S开始往C传输数据,C接收,然后显示,存储等等。
   5:TEARDOWN,C主动发出请求,要求S关闭连接的会话,一个传输命令的TCP,一个传输数据的UDP,一般先停止传输数据(UDP),然后关闭连接。
四:会话描述协议(SDP)
   SDP用到的地方就是在DESCRIBE的,服务器将从文件或采集时读取的信息填写到固定格式的SDP中发送给请求本媒体的客户端。
   SDP 信息是文本信息,采用 UTF-8 编 码中的 ISO 10646 字符集。SDP 会话描述如下:(标注 * 符号的表示可选字段):
   v = (协议版本)
   o = (所有者/创建者和会话标识符)
   s = (会话名称)
   i = * (会话信息)
   u = * (URI 描述)
   e = * (Email 地址)
   p = * (电话号码)
   c = * (连接信息 ― 如果包含在所有媒体中,则不需要该字段)
   b = * (带宽信息)
   一个或更多时间描述(如下所示):
   z = * (时间区域调整)
   k = * (加密密钥)
   a = * (0 个或多个会话属性行)
   0个或多个媒体描述(如下所示) 时间描述
   t = (会话活动时间)
   r = * (0或多次重复次数)
   编辑本段媒体描述m = (媒体名称和传输地址)
   i = * (媒体标题)
   c = * (连接信息 — 如果包含在会话层则该字段可选)
   b = * (带宽信息)
   k = * (加密密钥)
   a = * (0 个或多个会话属性行)
五:实时传输协议(RTP)
   RTP用到的地方就是 PLAY ,服务器往客户端传输数据用UDP协议,RTP是在传输数据的前面加了个12字节的头(描述信息)。
   RTP载荷封装设计本文的网络传输是基于IP协议,所以最大传输单元(MTU)最大为1500字节,在使用IP/UDP/RTP的协议层次结构的时候,
   这其中包括至少20字节的IP头,8字节的UDP头,以及12字节的RTP头。这样,头信息至少要占用40个字节,那么RTP载荷的最大尺寸为1460字节。
   以H264 为例,如果一帧数据大于1460,则需要分片打包,然后到接收端再拆包,组合成一帧数据,进行解码播放。


六:RTP/RTSP/RTCP的区别
   1:•RTP:实时传输协议(Real-time Transport Protocol) •RTP/RTCP是实际传输数据的协议
     •RTP传输音频/视频数据,如果是PLAY,Server发送到Client端,如果是RECORD,可以由Client发送到Server
     •整个RTP协议由两个密切相关的部分组成:RTP数据协议和RTP控制协议(即RTCP)
   2:•RTSP:实时流协议(Real Time Streaming Protocol,RTSP) •RTSP的请求主要有DESCRIBE,SETUP,PLAY,PAUSE,TEARDOWN,OPTIONS等,
     顾名思义可以知道起对话和控制作用
     •RTSP的对话过程中SETUP可以确定RTP/RTCP使用的端口,PLAY/PAUSE/TEARDOWN可以开始或者停止RTP的发送,等等.
   3:•RTCP: •RTP/RTCP是实际传输数据的协议
     •RTCP包括Sender Report和Receiver Report,用来进行音频/视频的同步以及其他用途,是一种控制协议。(本文暂不做分析)。


七:可扩展方式
   1:媒体源,可扩展为摄像头,麦克风,经编码后的数据,或mux(复用后的音视频数据),如ts,mp4等等。
   2:添加媒体源流复制功能,对多个客户端请求一个流做处理。
   3:服务器对各个客户端完成不同响应的处理,可以根据不同需求做扩展。

   4:局域网穿透。
   5:增加rtcp,控制。等等。
八:单播、多播(组播)和广播的区别
   1.单播:服务器对各个客户端的不同请求作出不同的响应(本文采取),网络节点之间的通信就好像是人们之间的对话一样。如果一个人对另外一个人说话,那么用网络技术的术语来描述就是“单播”,此时信息的接收和传递只在两个节点之间进行。
    单播在网络中得到了广泛的应用,网络上绝大部分的数据都是以单播的形式传输的,只是一般网络用户不知道而已。例如,你在收发电子邮件、浏览网页时,必须与邮件服务器、Web服务器建立连接,
    此时使用的就是单播数据传输方式。但是通常使用“点对点通信”(Point to Point)代替“单播”,因为“单播”一般与“多播”和“广播”相对应使用。
   2.多播:一个多播地址需要的客户端就加入,“多播”也可以称为“组播”,在网络技术的应用并不是很多,网上视频会议、网上视频点播特别适合采用多播方式。因为如果采用单播方式,逐个节点传输,有多少个目标节点,
就会有多少次传送过程,这种方式显然效率极低,是不可取的;如果采用不区分目标、全部发送的广播方式,虽然一次可以传送完数据,但是显然达不到区分特定数据接收对象的目的。采用多播方式,
既可以实现一次传送所有目标节点的数据,也可以达到只对特定对象传送数据的目的。  IP网络的多播一般通过多播IP地址来实现。多播IP地址就是D类IP地址,即224.0.0.0至239.255.255.255之间的IP地址。
Windows 2000中的DHCP管理器支持多播IP地址的自动分配。
   3.广播:一个广播地址只要加入就可以收到,不管需不需要,“广播”在网络中的应用较多,如客户机通过DHCP自动获得IP地址的过程就是通过广播来实现的。但是同单播和多播相比,广播几乎占用了子网内网络的所有带宽。拿开会打一个比方吧,
     在会场上只能有一个人发言,想象一下如果所有的人同时都用麦克风发言,那会场上就会乱成一锅粥。集线器由于其工作原理决定了不可能过滤广播风暴,一般的交换机也没有这一功能,
     过现在有的网络交换机(如全向的QS系列交换机)也有过滤广播风暴功能了,路由器本身就有隔离广播风暴的作用。  广播风暴不能完全杜绝,但是只能在同一子网内传播,
     就好像喇叭的声音只能在同一会场内传播一样,因此在由几百台甚至上千台电脑构成的大中型局域网中,一般进行子网划分,就像将一个大厅用墙壁隔离成许多小厅一样,以达到隔离广播风暴的目的。 
    在IP网络中,广播地址用IP地址“255.255.255.255”来表示,这个IP地址代表同一子网内所有的IP地址:
注:1:本文所讲demo传在csdn:中 http://download.csdn.net/detail/zhuweigangzwg/5001707
    2:希望交流的可以加我QQ:379969650,互相学习。
    3:本demo可用于扩展,demo 就是demo,能完成较小,较粗糙的功能,具体应用在于项目需求扩展。
    4:本demo遗憾在于用其他机器的vlc当客户端能收到数据但不能播放,ffplay可以,由于项目比较紧,等以后再多研究,如果有解决的请联系我,谢谢。

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值