直播火遍了大江南北,直播厂商也也一如当年的团购网站,遍地都是,令人眼花撩乱。但是做好直播可是需要十八般武艺样样精通,方能在直播大战中生存下来,我们来解读下这个技能图谱的六脉神剑。
首先的面临的问题是音视频的采集和前处理。通过摄像头和麦克风获得实时的音视频数据,再将数据采集的输入流进行实时处理。
对于语音, 需要调整音频处理模块的算法,噪声消除,回声抑制,自动增益,还有多麦克风降噪,盲扩增强等等。
对于视频,视频的前后处理,比如降噪,美颜也少不了。这就需要图像与视频信号处理。
对各个平台(Android,iOS,Windows,Mac)底层音频,视频系
统也需要深入了解,投入许多人力物力对各种型号的硬件做适配。
有了音视频数据,我们需要将音视频进行编码,收到数据时进行解码,是一个实时双向完整的过程。
常见的封装格式:
然而,对于娱乐直播来说,编码器常用AAC,MP3已经很少使用了。Agora在这方面有很多专利,主要能够适应复杂互联网环境,自动调节码率保证清晰度和流畅度。
要主播的音视频数据发送到观众,从如何做角度,可以选择CDN的方式也可以选择自建传输服务;
CDN(Content Delivery Network),即内容分发网络,是一个策略性部署的整体系统,主要用来解决由于网络带宽小、用户访问量大、网点分布不均匀等导致用户访问网站速度慢的问题。
。主播将数据直接丢给CDN,由CDN来保证用户能够快速稳定的接入最优的节点。优点是简单方便,有很多CDN厂商可供选择,经过多年技术积累,有较为成熟的技术。缺点是传输的延迟大,由于将数据发到CDN后, CDN会在内部将数据转发到各个CDN节点,应对网络的丢包和抖动。所以必然会有很大的延迟。实时连麦都延迟的要求更加高。
自建传输系统。主要解决两个问题。
1 用户到服务器接入质量。
保证用户接入网络良好的节点,不仅要求你的接入节点要多要分布广,还要求对于用户的接入是最好。还要考虑公网的路由情况和高峰期的网络状况,白天接入质量好的节点晚上不一定是最好的,要能动态调整给用户一个最好的接入节点。
2 服务器之间传输质量。
总之,传输过程要解决网络丢包,网络延迟,网络抖动等等问题
从实现方案角度,服务器与客户端之间通信遵循的规则,可以选择直接的socket,HTTP,RTP/RTSP。
Agora的直播,采用SD-RTN实时传输方案,与传统CDN的内容方案从实现机制上有根本不同。感兴趣的同学可以进一步阅读 到处都在说直播连麦技术,它们真的能连吗?
CDN采用一些常用的流媒体协议来交互,RTMP,HLS,HTTP FLV等。
聊天,礼物系统,支付系统,弹幕等等,对于运营和活跃气氛来说非常重要有了这些,才算一个完整直播APP。同时在线人数庞大的实时聊天互动、实时弹幕,在保障消息实时性的前提条件下,将会面临非常高的并发压力。
为了更好的监控用户的质量和分析用户的行为,要对客户端收到的种种数据进行统计,当用户量大时,非常考验你的统计存储系统。比如,我们要统计用户的丢包,延迟,接收帧率,码率等等10种数据,我们每2秒上报一次数据,一个小时的直播,一个用户要上报3600/2*10=18000条数据,对于一个有1W人直播的频道就意味着一个频道就要存储1.8亿条数据。
数据的存储单一的存储模式就满足不了需求了,可以根据数据的使用不同来选择NOSQL,像mongo redis hbase这种,或者关系型数据库mysql和postgreSQL。
如果数据量不是几台机器能解决,单纯通过增加硬盘个数来扩展计算机文件系统的存储容量的方式已经很难满足你的需求,可能需要分布式文件系统,Ceph,GlusterFs,MooseFs,MogileFs,FastDFS,HDF,OpenAFS,GFS,KFS,TFS等等。在使用分布式文件系统时,无需关心数据是存储在哪个节点上、或者是从哪个节点从获取的,只需要像使用本地文件系统一样管理和存储文件系统中的数据。
本篇主要泛泛介绍了做好一个直播需要做好的六个方面,这其中任何一个方面,都不是几篇文章能够讨论清楚的。没有一种解决方案能够完美解决直播的需求,需要我们不断的尝试,探索,研究,是个极大的挑战。只有自身的技术过硬,没有短板,六脉神剑齐用,方能在直播惨烈的洗牌当中,成为笑到最后的那个。
【本文作者】
林士博 声网 http://Agora.io 高级软件工程师