网易视频云:流媒体服务器原理和架构解析一个完整的多媒体文件是由音频和视频两部分组成的,H264、Xvid等就是视频编码格式,MP3、AAC等就是音频编码格式,字幕文件只是附加文件。
目前大部分的播放器产品对于H.264 + AAC的MP4编码格式支持最好,但是MP4也有很多的缺点,比如视频header很大,影响在线视频网站的初次加载时间。
为了降低头部体积,需要进行视频本身的物理分段等等。
对MPEG2-TS格式视频文件进行物理切片,分成一小段,这种方式被Apple公司的HTTP Live Streaming (HLS)技术采用。
另外一种是使用Fragmented MP4文件格式,这是一种文件内部的逻辑分割方式,而视频文件还是完整的,这种技术被Microsoft Smooth Streaming和Adobe HTTP Dynamic Streaming采用。
很多在线视频网站在带宽耗费的压力下,主要选择的是adobe公司提供的FLV或F4V,FLV是流媒体封装格式,可将其数据看为二进制字节流。
总体上看,FLV包括文件头(File Header)和文件体(File Body)两部分,其中文件体由一系列的Tag及Tag Size对组成。
流媒体传输类型流媒体在播放前不是完全下载整个文件,而是把开始部分内容存入内存,数据流是随时传送随时播放。
流媒体服务器提供的流式传输方式有两种:顺序流式传输和实时流式传输两种方式。
顺序流式传输是顺序下载,在下载文件的同时用户可观看在线媒体。
如果使用普通的HTTP服务器,将音视频数据以从头至尾方式发送,则为顺序流媒体传输。
实时流式传输总是实时传送,特别适合现场事件。
一般来说,如果视频为现场直播,或使用专用的流媒体服务器,或应用如RTSP等专用实时协议,即为实时流媒体传输。
实时流式传输必须匹配连接带宽,这意味着图像质量会因网络速度降低而变差。
在流式传输时,流媒体数据具有实时性,等时性等基本特点,流服务期和客户终端要保证各种媒体间的同步关系,因此,流媒体传输对“最大延时”,“延时抖动”等QoS参数都有严格要求。
实时流传输既可传输实况直播,也可传输完整的音视频文件(专用协议流式)。
顺序流媒体不可用于实况直播,仅能传输完整的音视频文件(HTTP 渐进式)。
主流的流媒体协议主流的流媒体协议主要有:RTMP,HLS,RTSP等。
流媒体协议原理(一) HTTP渐进式下载原理(仅支持文件播放)HTTP边下载边播放,严格意义上讲,不是直播协议。
他的原理是先下载文件的基本信息,音频视频的时间戳,再下载音视频数据,以播放mp4为例,先下载文件头,根据文件头指引下载文件尾,然后再下载文件的音视频数据。
播放方式:浏览器调用系统播放器播放;使HTML5的Video标签,浏览器支持直接播放。
(二) 苹果支持的HLS原理(实况直播、文件点播)服务器端有三个组件:其一:编码器(media encoder), 用于将设备输出的格式转为H264和AAC,并封装为MPEG-2传输流;其二:流分段器(stream segmenter), 用于实况直播,将MPEG-2流分割为多个小片段后输出;其三:文件分段器(file segmenter), 用于文件点播,将文件分隔为多个小片段后输出;分发原理数据经以上三部分处理后为.ts文件(媒体数据)及.m3u8文件(媒体数据索引)存在于服务器之上。
客户端访问.m3u8后按索引下载.ts文件进行播放。
下面为某m3u8文件内容:#EXTM3U#EXT-X-TARGETDURATION:30#EXTINF:30,http://192.169.1.176/sample_100k-1.ts#EXTINF:30,http://192.169.1.176/sample_100k-2.ts#EXTINF:30,http://192.169.1.176/sample_100k-3.ts#EXT-X-ENDLIST根据这个文件,播放器会依次下载sample_100k-1.ts,sample_100k-2.ts,sample_100k-3.tsHLS的文件点播1. 使用苹果开发工具“文件分段器”将基于H264和AAC或MP3的MPEG4分段,生成.ts和.m3u8文件,存储于普通服务器上。
2. 苹果应用程序或苹果浏览器可以通过访问.m3u8文件获取到索引,并下载所需要的数据片段来播放。
HLS的实况直播1. 使用苹果开发工具“流分段器”将基于H264、AAC、MP3的MPEG2传输流分段,可使用其它工具将MPEG4音视频文件加载到MPEG2传输流当中。
生成.ts和.m3u8文件,存储于普通服务器上。
2. 苹果应用程序或苹果浏览器可以通过访问.m3u8文件获取到索引,并下载所需要的数据片段来播放。
(三) Adobe Flash 支持的RTMP协议(支持文件播放和实况直播)RTMP(Real Time Messaging Protocol)是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议。
它有四种变种:1) 工作在TCP之上的明文协议,使用端口1935;2) RTMPS通过TLS/SSL连接;3) RTMPT封装在HTTP请求之中,可穿越防火墙;4) RTMPS类似RTMPT,但使用的是HTTPS连接;RTMP协议(Real Time Messaging Protocol)是被Flash用于对象,视频,音频的传输。
这个协议建立在TCP协议或者轮询HTTP协议之上。
RTMP协议就像一个用来装数据包的容器,这些数据既可以是AMF格式的数据,也可以是FLV中的视/音频数据。
一个单一的连接可以通过不同的通道传输多路网络流,这些通道中的包都是按照固定大小的包传输的。
必须采用Flash服务器FMS(Flash Media Server) 或RED5.FMS的文件点播1. 服务器将F4v 或Flv文件转化为RTMP流或HTTP流2. 客户端获取RTMP流,提取相应的Flv 或F4v文件片段进行播放。
FMS的实况直播1. 设备端将数据转化为F4v片段,通过RTMP流上传到服务器2. 服务器转发RTMP流到客户端3. 客户端获取RTMP流,提取数据片段播放。
(四) RTSP协议该协议用于C/S模型,是一个基于文本的协议,用于在客户端和服务器端建立和协商实时流会话。
实时流协议(RTSP)是应用级协议,控制实时数据的发送。
RTSP提供了一个可扩展框架,使实时数据,如音频与视频的受控点播成为可能。
数据源包括现场数据与存储在剪辑中数据。
该协议目的在于控制多个数据发送连接,为选择发送通道,如UDP、组播UDP与TCP,提供途径,并为选择基于RTP上发送机制提供方法。
实时流协议(RTSP)建立并控制一个或几个时间同步的连续流媒体。
尽管连续媒体流与控制流交换是可能的,通常它本身并不发送连续流。
换言之,RTSP充当多媒体服务器的网络远程控制。
RTSP连接没有绑定到传输层连接,如TCP。
在RTSP连接期间,RTSP用户可打开或关闭多个对服务器的可传输连接以发出RTSP 请求。
此外,可使用无连接传输协议,如UDP。
RTSP流控制的流可能用到RTP,但RTSP操作并不依赖用于携带连续媒体的传输机制。
协议支持的操作如下:(1)从媒体服务器上检索媒体:用户可通过HTTP或其它方法提交一个演示描述。
如演示是组播,演示式就包含用于连续媒体的的组播地址和端口。
如演示仅通过单播发送给用户,用户为了安全应提供目的地址。
(2)媒体服务器邀请进入会议:媒体服务器可被邀请参加正进行的会议,或回放媒体,或记录其中一部分,或全部。
这种模式在分布式教育应用上很有用,会议中几方可轮流按远程控制按钮。
(3)将媒体加到现成讲座中:如服务器告诉用户可获得附加媒体内容,对现场讲座显得尤其有用。
如HTTP/1.1中类似,RTSP请求可由代理、通道与缓存处理。
下面区分几种操作模式。
(1)单播:用户选择的端口号将媒体发送到RTSP请求源。
(2)服务器选择地址多播:媒体服务器选择多播地址和端口,这是现场直播或准点播常用的方式。
(3)用户选择地址多播:如服务器加入正在进行的多播会议,多播地址、端口和密钥由会议描述给出。
RTSP控制通过单独协议发送的数据流,与控制通道无关。
例如,RTSP控制可通过TCP连接,而数据流通过UDP。
因此,即使媒体服务器没有收到请求,数据也会继续发送。
在连接生命期,单个媒体流可通过不同TCP连接顺序发出请求来控制。
所以,服务器需要维持能联系流与RTSP请求的连接状态。
RTSP中很多方法与状态无关,但下列方法在定义服务器流资源的分配与应用上起着重要的作用:(1) SETUP:让服务器给流分配资源,启动RTSP连接。
(2) PLAY与RECORD:启动SETUP分配流的数据传输。
(3) PAUSE:临时停止流,而不释放服务器资源。
(4) TEARDOWN:释放流的资源,RTSP连接停止。
标识状态的RTSP方法使用连接头段识别RTSP连接,为响应SETUP请求,服务器连接产生连接标识。
RTSP为纯粹的传输控制协议。
RTSP协议本身不与它负载的媒体数据相关。
RTSP协议需要自定义客户端向服务器发送RTSP命令。
流媒体服务器的协议栈在TCP/IP参考模型中,传输层通信协议TCP和UDP都不能满足流媒体传输的QoS要求。
由于TCP协议采用滑动窗口控制机制,数据传送随着流控窗口动态的启动和关闭,难以满足流媒体实时和等时的传送要求。
UDP协议的无连接特点能够提高传输速率,虽然可以在某种程度上满足流媒体的实时性要求,但是由于其本身的不可靠性,也无法满足流媒体传输的需要。
针对传输层协议的矛盾,为了实现流媒体在IP上的实时传送播放,设计流媒体服务器时需要在传输层协议(TCP/UDP)和应用层之间增加一个通信控制层。
在增加的通信控制层,采用相应的实时传输协议,主要有:数据流部分的实时传输协议RTP(Real-time Transport Protocol),用于控制部分的实时传输控制协议RTCP(Real-time Control Protocol)和实时流化协议RTSP(Real-time Streaming Protocol)。
流媒体服务器的协议栈,如图1所示。
RTP协议主要是用来传送实时的流媒体信息,数据报主要包括多媒体数据,以及所携带负载的时间戳,顺序号等。
RTCP协议的数据报主要包括了接收者收到某个多媒体流的服务质量信息Qos,用于对服务器端的反馈。
RTSP是一种控制协议,包括通信连接前的设定,从服务器送出的多媒体资料的控制。
用于控制具有实时性的数据传输。
它提供对流媒体的类似VCR(Video Cassette Recorder)的控制功能,如播放、暂停、快进、录制等,也就是RTSP 对多媒体服务器实施网络远程控制。