转载

直播六脉神剑,练好这几招才能行走江湖

直播技能图谱解读

前言

直播火遍了大江南北,直播厂商也也一如当年的团购网站,遍地都是,令人眼花撩乱。但是做好直播可是需要十八般武艺样样精通,方能在直播大战中生存下来,我们来解读下这个技能图谱的六脉神剑。

直播六脉神剑,练好这几招才能行走江湖

1 采集 前处理

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

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

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

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

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

2 编码 解码

有了音视频数据,我们需要将音视频进行编码,收到数据时进行解码,是一个实时双向完整的过程。

常见的封装格式:

  • MPEG Audio Layer 3 :大名鼎鼎的 MP3,已经成为网络音频的主流格式,能在 128kbps 的码率接近 CD 音质
  • MPEG-4(Mp4) : 编码采用的容器,基于 QuickTime MOV 开发,具有许多先进特性;实际上是对Apple公司开发的MOV格式(也称Quicktime格式)的一种改进。
  • H.264: 是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)提出的高度压缩数字视频编解码器标准
  • H.265:ITU-T VCEG 继H.264之后所制定的新的视频编码标准。H.265标准围绕着现有的视频编码标准H.264,保留原来的某些技术,同时对一些相关的技术加以改进。新技术使用先进的技术用以改善码流、编码质量、延时和算法复杂度之间的关系,达到最优化设置。

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

3 传输

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

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

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

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

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

  • 用户分布在不同的国家;
  • 用户分布在不同的运营商,不仅是移动联通电信这样大运营商,教育网,还有鹏博士,长城宽带等等小运营商,不同运营商之间的网络很不稳定;
  • 用户处于不同的网络环境,2G,3G,4G,wifi,以太网。

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

2 服务器之间传输质量。

  • 不同运营商之间,由于运营商之间的结算和有限带宽的问题。运营商之间的网络不稳定。
  • 不同国家之间,网络质量随着公网高峰变化,路由状态也不相同。

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

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

  • Socket,直接选用UDP传输数据,但是要进行自己进行传输优化,流控,重传等等。
  • HTTP。基于TCP。
  • RTP/RTSP。RTP(Real-time Transport Protocol)是用于Internet上针对多媒体数据流的一种传输层协议。RTP协议和RTP控制协议RTCP一起使用,而且它是建立在UDP协议上的。
    RTSP:(Real Time Streaming Protocol)是用来控制声音或影像的多媒体串流协议,RTSP提供了一个可扩展框架,使实时数据,如音频与视频的受控、点播成为可能。

Agora的直播,采用SD-RTN实时传输方案,与传统CDN的内容方案从实现机制上有根本不同。感兴趣的同学可以进一步阅读 到处都在说直播连麦技术,它们真的能连吗?

4 服务器处理

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

  • RTMP(Real Time Messaging Protocol)是基于TCP的,由Adobe公司为Flash播放器和服务器之间音频、视频传输开发的开放协议。
  • HLS(HTTP Live Streaming)是基于HTTP的,是Apple公司开放的音视频传输协议。主要应用在iOS系统,为iOS设备(如iPhone、iPad)提供音视频直播和点播方案。
  • HTTP FLV则是将RTMP封装在HTTP协议之上的,可以更好的穿透防火墙等。

5 应用服务

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

6 统计服务

为了更好的监控用户的质量和分析用户的行为,要对客户端收到的种种数据进行统计,当用户量大时,非常考验你的统计存储系统。比如,我们要统计用户的丢包,延迟,接收帧率,码率等等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 高级软件工程师

原文  http://blog.csdn.net/agora_cloud/article/details/53405102
正文到此结束
Loading...