流媒体系统
一套大规模的流媒体系统,由编码工具负责对音视频文件编码压缩(h.264/h.265/VP9/AAC等);由流媒体服务器负责对数据包进行容器封装(flv/ts等)以及负责网络协议打包(RTMP/HTTP等);由CDN网络进行全网分发;由播放层负责对图像进行解码显示(FLASH/VLS/VIDEO JS等)。
流媒体服务器
流媒体服务器简单来说就是直接向客户端响应流式连接(如RTMP/RTSP等),返回流媒体数据(打包在RTMP等流式协议中的flv/ts等数据)的服务器程序。流媒体服务器直接承担流媒体数据的输出,是整个流媒体系统的核心,它的功能、性能、运行支撑能力直接决定了一个大型流媒体系统的健壮程度。
下图给出了用户在请求流媒体数据的过程:
-
观看者通过交互界面先请求web server;
-
webserver将这些RTMP等流式连接转到流媒体服务器;
-
流媒体服务将对应的实时媒体数据通过RTMP等协议传送给观看者的Player。
下图以RTSP流式协议为例给出了流媒体服务器最简单的功能原理:
-
RTP协议主要用来实际承载实时传送的流媒体数据,包括音视频数据,以及所携带负载的时间戳,顺序号等。
-
RTCP主要完成接收者收到某个多媒体流的服务质量信息Qos,用于对服务器端的反馈。
-
RTSP(Real Time Streaming Protocol)是一种控制协议,完成对RTP中的流媒体数据进行各种状态的控制。主要包括如播放、暂停、快进、录制、结束播放等控制功能,也就是RTSP对多媒体服务器实施网络远程控制。
CDN分发网络
CDN(Content Delivery Network),即内容分发网络。简单来说CDN网络是在各地建设边缘节点,将源站的内容分发到距离用户最近的网络边缘节点上,使得用户可以就近获取所需内容,以此来解决 Internet用网高峰期拥挤的状况和跨网络运营商响应慢的问题,整体上提升了用户访问网站的响应速度。典型的CDN架构如下:
下图是直播CDN组网和调度基本思路:
-
主播推送流媒体数据到流媒体服务器(源站) ,目前的直播应用一般还有上行加速过程,即主播先推送到最近的节点,节点再转推到源站;
-
源站进行流媒体数据的分发;
-
观众点开播放器播放某直播流,经过域名解析后向CDN请求流媒体数据;
-
CDN经过调度将该请求分配给离该观众最近的边缘节点,若节点上没有该直播流存在,则节点向源站继续请求流媒体数据;若节点上已有了该直播流,则直接响应流数据;
-
源站响应节点的请求,将流数据分发给该边缘节点;
-
边缘节点将流媒体数据传送给该观众的播放器。
网络协议
网络协议指的是为了让互联网中客户端与服务端之间,客户端与客户端之间进行数据交换而建立的一系列规则、标准等的集合。流媒体是在互联网上传输的特殊数据,需要有特定的规则和标准和承载,这就是我们要着重说的流媒体网络协议。
目前网络直播应用的三大主要网络协议是RTMP、HTTP-FLV、HLS,其它还有类似HLS的HDS/DASH、监控领域的RTSP,目前比较活跃的WebRTC、以及很多基于UDP的平台内的私有协议。
播放器
流媒体播放器实现的功能和流程与编码工具刚好相反,历经解协议,解封装,解码视音频,视音频同步几个主干环节。