本文转自:http://blog.csdn.net/zhuweigangzwg/article/details/40373235
RTSP服务器(二)
一:单播、多播(组播)和广播、直播、点播、点播试直播
单播、多播和广播单播”(Unicast)、“多播”(Multicast)和“广播”(Broadcast)这三个术语都是用来描述网络节点之间通讯方式的术语。那么这些术语究竟是什么意思?区别何在?
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地址。
4:直播:是对视频源的实时的观看,用比较直白的话就是我播你看,我播哪你看哪。
5:点播:是对以往的视频文件进行回放。
6:点播试直播:即将直播的流存成小片文件,用点播的方式访问文件做直播,例如hls方式做直播,优点可回看,难点文件调度。
二:RTSP、 RTMP、HTTP的区别
共同点:
1:首先看下这个图:RTSP RTMP HTTP都是在应用应用层。
2: 理论上RTSP RTMPHTTP都可以做直播和点播,但一般做直播用RTSP RTMP,做点播用HTTP。
做视频会议的时候原来用SIP协议,现在基本上被RTMP协议取代了。
区别:
1:HTTP: 即超文本传送协议(ftp即文件传输协议)。
HTTP:(Real Time Streaming Protocol),实时流传输协议。
HTTP全称Routing Table Maintenance Protocol(路由选择表维护协议)。
2:HTTP将所有的数据作为文件做处理。http协议不是流媒体协议。
RTMP和RTSP协议是流媒体协议。
3:RTMP协议是Adobe的私有协议,未完全公开,RTSP协议和HTTP协议是共有协议,并有专门机构做维护。
4:RTMP协议一般传输的是flv,f4v格式流,RTSP协议一般传输的是ts,mp4格式的流。
HTTP没有特定的流。
5:RTSP传输一般需要2-3个通道,命令和数据通道分离,HTTP和RTMP一般在TCP一个通道上传输命令和数据。
三:RTSP、RTCP、RTP区别
1:RTSP实时流协议
作为一个应用层协议,RTSP提供了一个可供扩展的框架,它的意义在于使得实时流媒体数据的受控和点播变得可能。总的说来,RTSP是一个流媒体表示协议,主要用来控制具有实时特性的数据发送,但它本身并不传输数据,而是必须依赖于下层传输协议所提供的某些服务。RTSP可以对流媒体提供诸如播放、暂停、快进等操作,它负责定义具体的控制消息、操作方法、状态码等,此外还描述了与RTP间的交互操作(RFC2326)。
2:RTCP控制协议
RTCP控制协议需要与RTP数据协议一起配合使用,当应用程序启动一个RTP会话时将同时占用两个端口,分别供RTP和RTCP使用。RTP本身并不能为按序传输数据包提供可靠的保证,也不提供流量控制和拥塞控制,这些都由RTCP来负责完成。通常RTCP会采用与RTP相同的分发机制,向会话中的所有成员周期性地发送控制信息,应用程序通过接收这些数据,从中获取会话参与者的相关资料,以及网络状况、分组丢失概率等反馈信息,从而能够对服务质量进行控制或者对网络状况进行诊断。
RTCP协议的功能是通过不同的RTCP数据报来实现的,主要有如下几种类型:
SR:发送端报告,所谓发送端是指发出RTP数据报的应用程序或者终端,发送端同时也可以是接收端。(SERVER定时间发送给CLIENT)。
RR:接收端报告,所谓接收端是指仅接收但不发送RTP数据报的应用程序或者终端。(SERVER接收CLIENT端发送过来的响应)。
SDES:源描述,主要功能是作为会话成员有关标识信息的载体,如用户名、邮件地址、电话号码等,此外还具有向会话成员传达会话控制信息的功能。
BYE:通知离开,主要功能是指示某一个或者几个源不再有效,即通知会话中的其他成员自己将退出会话。
APP:由应用程序自己定义,解决了RTCP的扩展性问题,并且为协议的实现者提供了很大的灵活性。
3:RTP数据协议
RTP数据协议负责对流媒体数据进行封包并实现媒体流的实时传输,每一个RTP数据报都由头部(Header)和负载(Payload)两个部分组成,其中头部前12个字节的含义是固定的,而负载则可以是音频或者视频数据。
RTP用到的地方就是 PLAY ,服务器往客户端传输数据用UDP协议,RTP是在传输数据的前面加了个12字节的头(描述信息)。
RTP载荷封装设计本文的网络传输是基于IP协议,所以最大传输单元(MTU)最大为1500字节,在使用IP/UDP/RTP的协议层次结构的时候,这其中包括至少20字节的IP头,8字节的UDP头,以及12字节的RTP头。这样,头信息至少要占用40个字节,那么RTP载荷的最大尺寸为1460字节。以H264 为例,如果一帧数据大于1460,则需要分片打包,然后到接收端再拆包,组合成一帧数据,进行解码播放。
四:RTSP流程
1:RTSP常见的命令:
DESCRIBE,ANNOUNCE,GET_PARAMETER,OPTIONS,PAUSE,PLAY,RECORD,SETUP,SET_PARAMETER,TEARDOWN,这里只说下常用的几种请求。
2:流程示例图:
3:OPTIONS:
C主动发出请求,查询S有哪些方法可以用(这10种当中),然后S回应给C自己有什么处理方法可以用。
4:DESCRIBE:
C主动发出请求,要求S给出C请求媒体的描述信息(即要C要接收的媒体,音频或视频的描述信息SDP),S将从文件或采集时读取的信息填写到固定格式的SDP中发送给请求本媒体的C。
5:SETUP
C主动发出请求,要求S创建传输数据的连接一般为UDP,S创建UDP,C与之连接。
6:PLAY
C主动发出请求,要求S开始往C传输数据,这时用到的就是SETUP建立的UDP连接,S开始往C传输数据,C接收,然后显示,存储等等。
7:TEARDOWN:
C主动发出请求,要求S关闭连接的会话,一个传输命令的TCP,一个传输数据的UDP,一般先停止传输数据(UDP),然后关闭连接。
五:SDP
1:SDP介绍
SDP用到的地方就是在DESCRIBE的,服务器将从文件或采集时读取的信息填写到固定格式的SDP中发送给请求本媒体的客户端。
SDP目的就是在媒体会话中,传递媒体流信息,允许会话描述的接收者去参与会话。SDP基本上在internet上工作。他定义了会话描述的统一格式,但并不定义多播地址的分配和SDP消息的传输,也不支持媒体编码方案的协商,这些功能均由下层传送协议完成。典型的会话传送协议包括:SAP(Session Announcement Protocol 会话公告协议),SIP(SessionInitiation Protocol,会话初始协议),RTSP,HTTP,和使用MIME的E-Mail。
SDP包括以下一些方面:
(1)会话的名称和目的
(2)会话存活时间
(3)包含在会话中的媒体信息,包括:
媒体类型(video, audio, etc)
传输协议(RTP/UDP/IP, H.320, etc)
媒体格式(H.261 video, MPEG video, etc)
多播或远端(单播)地址和端口
(4)为接收媒体而需的信息(addresses,ports, formats and so on)
(5)使用的带宽信息
(6)可信赖的接洽信息(Contactinformation)
2: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 个或多个会话属性行)
3:SDP举例
点播mp4文件sdp信息
v=0
o=HWPSS 3427743244 1084119141 IN IP4127.0.0.1
s=test1.mp4
test1.mp4:媒体文件名
c=IN IP4 0.0.0.0
t=0 0
a=control:*
a=range:npt=0-44.000000
44.000000:mvhd原子:ntohl (movie_header->duration)/ ntohl(movie_header->time_scale)
m=video 0 RTP/AVP 96
96:track->payload_type 视频:96 音频:97
a=control:trackID=101
101:轨道ID。 视频:101,102, 103 音频: 201,202, 203,204, 205
a=rtpmap:96 MP4V-ES/90000
90000:track->time_scale
a=fmtp:96 profile-level-id=2;config=000001b0020;
profile-level-id=2: mp4v的子原子esds中得来
config=000001b0020: mp4v的子原子esds中得来
m=audio 0 RTP/AVP 97
a=control:trackID=201
a=rtpmap:97 mpeg4-generic/24000/1
24000: track->time_scale
1:mp4a的子原子esds中得来的
a=fmtp:97 streamtype=5;profile-level-id=15; mode=AAC-hbr; config=1308; SizeLength=13; IndexLength=3;IndexDeltaLength=3; Profile=1;
config=1308:mp4a的子原子esds中得来的
streamtype=5; profile-level-id=15; mode=AAC-hbr:写死
SizeLength=13; IndexLength=3; IndexDeltaLength=3; Profile=1:写死