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,这里只说下常用的几种请求。
![](https://img-blog.csdn.net/20131210145354218?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemh1d2VpZ2FuZ3p3Zw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
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,则需要分片打包,然后到接收端再拆包,组合成一帧数据,进行解码播放。
![](https://img-blog.csdn.net/20131210145500125?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemh1d2VpZ2FuZ3p3Zw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20131210145550984?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemh1d2VpZ2FuZ3p3Zw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
六: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,用来进行音频/视频的同步以及其他用途,是一种控制协议。(本文暂不做分析)。
![](https://img-blog.csdn.net/20131210145631656?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemh1d2VpZ2FuZ3p3Zw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
七:可扩展方式
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地址: