如何搭建一个完整的视频直播系统

直播火遍了大江南北,直播厂商也也一如当年的团购网站,遍地都是,令人眼花撩乱。但是如何能搭建一套完整且适用的直播系统其实并不简单。一个完整的视频直播系统中都涉及了哪些技术,可参考下图:

1、采集前处理

首先的面临的问题是音视频的采集和前处理。通过摄像头和麦克风获得实时的音视频数据,再将数据采集的输入流进行实时处理。

对于语音,需要调整音频处理模块的算法,噪声消除,回声抑制,自动增益,还有多麦克风降噪,盲扩增强等等。

对于视频,视频的前后处理,比如降噪,美颜也少不了。这就需要图像与视频信号处理。

对各个平台(Android,iOS,Windows,Mac)底层音频,视频系

统也需要深入了解,投入许多人力物力对各种型号的硬件做适配。

2、编码解码

有了音视频数据,我们需要将音视频进行编码,收到数据时进行解码,是一个实时双向完整的过程。直播过程中,直接把音视频帧数据封装到我们的私有协议中,也有封装在RTP协议中的,比如WebRTC。

也有直播协议会封装成文件格式,比如http/flv,HLS等。

常见的封装格式:

•MPEGAudioLayer3:大名鼎鼎的MP3,已经成为网络音频的主流格式,能在128kbps的码率接近CD音质

•MPEG-4(Mp4):编码采用的容器,基于QuickTimeMOV开发,具有许多先进特性;实际上是对Apple公司开发的MOV格式(也称Quicktime格式)的一种改进。

•H.264:是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,JointVideoTeam)提出的高度压缩数字视频编解码器标准

•H.265:ITU-TVCEG继H.264之后所制定的新的视频编码标准。H.265标准围绕着现有的视频编码标准H.264,保留原来的某些技术,同时对一些相关的技术加以改进。新技术使用先进的技术用以改善码流、编码质量、延时和算法复杂度之间的关系,达到优化设置。

然而,对于娱乐直播来说,编码器常用AAC,MP3已经很少使用了。Agora在这方面有很多专利,主要能够适应复杂互联网环境,自动调节码率保证清晰度和流畅度。

3、传输

要主播的音视频数据发送到观众,从如何做角度,可以选择CDN的方式也可以选择自建传输服务;

CDN(ContentDeliveryNetwork),即内容分发网络,是一个策略性部署的整体系统,主要用来解决由于网络带宽小、用户访问量大、网点分布不均匀等导致用户访问网站速度慢的问题。

主播将数据直接丢给CDN,由CDN来保证用户能够快速稳定的接入优的节点。优点是简单方便,有很多CDN厂商可供选择,经过多年技术积累,有较为成熟的技术。缺点是传输的延迟大,由于将数据发到CDN后,CDN会在内部将数据转发到各个CDN节点,应对网络的丢包和抖动。所以必然会有很大的延迟。实时连麦都延迟的要求更加高。

自建传输系统。主要解决两个问题。

1)用户到服务器接入质量

•用户分布在不同的国家;

•用户分布在不同的运营商,不仅是移动联通电信这样大运营商,教育网,还有鹏博士,长城宽带等等小运营商,不同运营商之间的网络很不稳定;

•用户处于不同的网络环境,2G,3G,4G,wifi,以太网。

保证用户接入网络良好的节点,不仅要求你的接入节点要多要分布广,还要求对于用户的接入是好。还要考虑公网的路由情况和高峰期的网络状况,白天接入质量好的节点晚上不一定是好的,要能动态调整给用户一个好的接入节点。

2)服务器之间传输质量

•不同运营商之间,由于运营商之间的结算和有限带宽的问题。运营商之间的网络不稳定。

•不同国家之间,网络质量随着公网高峰变化,路由状态也不相同。

传输过程要解决网络丢包,网络延迟,网络抖动等等问题

从实现方案角度,服务器与客户端之间通信遵循的规则,可以选择直接的socket,HTTP,RTP/RTSP。

•Socket,直接选用UDP传输数据,但是要进行自己进行传输优化,流控,重传等等。

•HTTP。基于TCP。

•RTP/RTSP。RTP(Real-timeTransportProtocol)是用于Internet上针对多媒体数据流的一种传输层协议。RTP协议和RTP控制协议RTCP一起使用,而且它是建立在UDP协议上的。

RTSP:(RealTimeStreamingProtocol)是用来控制声音或影像的多媒体串流协议,RTSP提供了一个可扩展框架,使实时数据,如音频与视频的受控、点播成为可能。

Agora的直播,采用SD-RTN实时传输方案,与传统CDN的内容方案从实现机制上有根本不同。感兴趣的同学可以进一步阅读这个回答:https://www.zhihu.com/question/50748002/answer/122675227

4、服务器处理

CDN采用一些常用的流媒体协议来交互,RTMP,HLS,HTTPFLV等。

•RTMP(RealTimeMessagingProtocol)是基于TCP的,由Adobe公司为Flash播放器和服务器之间音频、视频传输开发的开放协议。

•HLS(HTTPLiveStreaming)是基于HTTP的,是Apple公司开放的音视频传输协议。主要应用在iOS系统,为iOS设备(如iPhone、iPad)提供音视频直播和点播方案。

•HTTPFLV则是将RTMP封装在HTTP协议之上的,可以更好的穿透防火墙等。

5、应用服务

聊天,礼物系统,支付系统,弹幕等等,对于运营和活跃气氛来说非常重要有了这些,才算一个完整直播APP。同时在线人数庞大的实时聊天互动、实时弹幕,在保障消息实时性的前提条件下,将会面临非常高的并发压力。

6、统计服务

为了更好的监控用户的质量和分析用户的行为,要对客户端收到的种种数据进行统计,当用户量大时,非常考验你的统计存储系统。比如,我们要统计用户的丢包,延迟,接收帧率,码率等等10种数据,我们每2秒上报一次数据,一个小时的直播,一个用户要上报3600/2*10=18000条数据,对于一个有1W人直播的频道就意味着一个频道就要存储1.8亿条数据。

数据的存储单一的存储模式就满足不了需求了,可以根据数据的使用不同来选择NOSQL,像mongoredishbase这种,或者关系型数据库mysql和postgreSQL。

如果数据量不是几台机器能解决,单纯通过增加硬盘个数来扩展计算机文件系统的存储容量的方式已经很难满足你的需求,可能需要分布式文件系统,Ceph,GlusterFs,MooseFs,MogileFs,FastDFS,HDF,OpenAFS,GFS,KFS,TFS等等。在使用分布式文件系统时,无需关心数据是存储在哪个节点上、或者是从哪个节点从获取的,只需要像使用本地文件系统一样管理和存储文件系统中的数据。

商务达