国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php开源 > 综合技术 > 到处都在说直播连麦技术,它们真的能连吗?

到处都在说直播连麦技术,它们真的能连吗?

来源:程序员人生   发布时间:2016-11-11 08:47:46 阅读次数:2969次

直播火了。连麦直播在火的路上。

那末,这些连麦技术方案,真的能连吗?本文将常见的,不常见的直播技术方案进行了比较,各位同学自己甄别。

首先,基础知识普及,技术上直播的流程是甚么?

1、直播的流程

这里写图片描述

正如上图所示,全部直播流程分为以下几个关键步骤:
1、主播客户端,将本地收集的视频推送到CDN;
2、CDN对视频流进行缓存和转发;
3、观众客户端,拉取CDN中缓存视频流进行播放;

可以看到CDN在这里起到了关键的作用,2016也是1个CDN突起的年代,网宿、快网、7牛、高升、蓝汛、观止云、腾讯云、百度云、阿里云等CDN纷纭表示对直播进行了支持,直播也逐步成了CDN的标配。

那末接下来了解1下CDN的技术原理。

2、CDN技术原理

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

这里写图片描述

CDN的技术原理见上图,具体实现是通过在现有的网络中,增加1层新的网络架构,将网站的内容发布到离用户最近的网络节点上,这样用户可以就近获得所需的内容,解决之前网络堵塞、访问延迟高的问题,提高用户体验。

对直播来讲,则将Web服务器换作主播客户端,以下图所示。
这里写图片描述
由于视频占用带宽较大,与普通的Web服务差别较大,这样CDN的优势更能体现出来:网络堵塞减少,访问延迟下降,带宽得到良好的控制等等。

另外,CDN直播中经常使用的流媒体协议包括RTMP,HLS,HTTP FLV等。

  • RTMP(Real Time Messaging Protocol)是基于TCP的,由Adobe公司为Flash播放器和服务器之间音频、视频传输开发的开放协议。
  • HLS(HTTP Live Streaming)是基于HTTP的,是Apple公司开放的音视频传输协议。
  • HTTP FLV则是将RTMP封装在HTTP协议之上的,可以更好的穿透防火墙等。

3、CDN的经常使用架构

CDN架构设计比较复杂。不同的CDN厂商,也在对其架构进行不断的优化,所以架构不能统1而论。这里只是对1些基本的架构进行简单的剖析。

CDN主要包括:源站、缓存服务器、智能DNS、客户端等几个主要组成部份。

源站:是指发布内容的原始站点。添加、删除和更改网站的文件,都是在源站上进行的;另外缓存服务器所抓取的对象也全部来自于源站。对直播来讲,源站为主播客户端。

缓存服务器:是直接提供给用户访问的站点资源,由1台或数台服务器组成;当用户发起访问时,他的访问要求被智能DNS定位到离他较近的缓存服务器。如果用户所要求的内容恰好在缓存里面,则直接把内容返还给用户;如果访问所需的内容没有被缓存,则缓存服务器向邻近的缓存服务器或直接向源站抓取内容,然后再返还给用户。

智能DNS:是全部CDN技术的核心,它主要根据用户的来源,和当前缓存服务器的负载情况等,将其访问要求指向离用户比较近且负载较小的缓存服务器。通过智能DNS解析,让用户访问同服务商下、负载较小的服务器,可以消除网络访问慢的问题,到达加速作用。

客户端:即发起访问的普通用户。对直播来讲,就是观众客户端。

对直播来讲,CDN整体架构以下图:
这里写图片描述

主要流程为:

  1. 主播开始进行直播,向智能DNS发送解析要求;
  2. 智能DNS返回最优CDN节点IP地址;
  3. 主播端收集音视频数据,发送给CDN节点,CDN节点进行缓存等处理;
  4. 观众端要观看此主播的视频,向智能DNS发送解析要求;
  5. 智能DNS返回最优CDN节点IP地址;
  6. 观众端向CDN节点要求音视频数据;
  7. CDN节点同步其他节点的音视频数据;
  8. CDN节点将音视频数据发送给观众端;

4、CDN的短板

大概了解了CDN的技术原理后,我们在做直播选型时,还需要了解1个方案优缺点。接下来,我们来分析1下CDN的短板。

4.1 短板:播放延时

连麦直播的困难主要是播放延时!播放延时从何而来?

4.1.1 网络延时

网络延时这里指的是从主播端收集,到观众端播放,这之间的时间差。这里不斟酌主播段收集对视频进行编码的时间,和观众端观看对视频进行解码的时间,仅斟酌网络传输中的延时。例如说下图中的网络延时:
这里写图片描述

另外,数据传输进程中还触及到逻辑上的交互,例如包的重传和确认,和缓存上的1些逻辑等,会在这个基础上又增加很多。

那末来简单估算1下大概的网络延时。尽人皆知,光在真空中的速度约为300,000km/s,而在其他介质中光 速会大大下降,所以在普通光纤中,工程上1般认为传输速度是200,000km/s。从现实上来讲,可以参考以下:
这里写图片描述

所以说,在节点较少、网络情况较好的情况下,那末网络延时对应也是最小,加上1定的缓存,可以控制延时在1s~2s左右。但是节点多、网络差的情况下,网络延时会对应增大,经验来讲延时可以到达15s以上。

4.1.2 网络抖动

网络抖动,是指数据包的到达顺序、间隔和发出时不1致。比如说,发送100个数据包,每一个包间隔1s发出。结果第27个包在传输进程中遇到网络堵塞,造成包27不是紧随着26到达的,而是延迟到87后面才达。在直播中,这类抖动的效果实际上跟丢包是1样的。由于你不能依照接收顺序把内容播放出来,否则会造成失真。

网络抖动,会造成播放延时对应增大。如果网络中抖动较大,会造成播放卡顿等现象。

这里写图片描述

如上图所示,主播端t3和t5发出的包,分别在t3’和t5’到达,但是中间延时增大,即产生了网络抖动。这样造成观众端观看视频的延时会不断增大。

4.1.3 网络丢包

CDN直播中用到的RTMP、HLS、HTTP FLV等协议都是在TCP的基础之上。TCP1个很重要的特性是可靠性,即不会产生数据丢失的问题。为了保证可靠性,TCP在传输进程中有3次握手,见下图。首先客户端会向服务端发送连接要求,服务端同意后,客户端会确认这次连接。这就是3次握手。接着,客户端就开始发送数据,每次发送1批数据,得到服务真个“收到“确认后,继续发送下1批。TCP为了保证传到,会有自动重传机制。如果传输中产生了丢包,没有收到对端发出的“收到”信号,那末就会自动重传丢失的包,1直到超时。

这里写图片描述

由于互联网的网络状态是变化的,和主播真个网络状态是没法控制的。所以当网络中丢包率开始升高时,重传会致使延时会不断增大,乃至致使不断尝试重连等情况,这样不能有效的缓存,严重情况下会致使观众端视频没法观看。

4.2 短板:连麦

直播中,主播如果要与用户交互,常见有两种方式:

第1种方式:文字,这类比较常见,实现也比较简单,这里不再进行分析;
第2种方式:连麦,这样主播可以面对面与观众进行交互,增加了互动性;
由于连麦方式比较复杂,这里进行详细分析。

4.2.1 多路RTMP流实现

前面提到,RTMP是目前主播中最经常使用的协议,使用RTMP协议,可以实现最简单的1种连麦方式,以下图。

这里写图片描述

当有连麦者时,则主播端和连麦者端,都分别推1路RTMP流到CDN,CDN再将这两路RTMP流发送给观众端,观众端将两路RTMP流合成为1个画面。这类方式的优缺点以下:

  • 优点
    • 实现简单;
  • 缺点
    • 主播与连麦者如果要进行交互,斟酌到上面分析的延时问题,在这里延时需要最少加大1倍。这样对实时交互来讲,完全没法接受;
    • 主播与连麦者交互时,声音会产生干扰,构成回音;
    • 观众端要接收两条视频流,带宽、流量消耗过大,并且两路视频流解码播放,耗费CPU等资源也非常多;
    • 这样看来,这类方式弊大于利,基本不可取。

4.2.2 主播端与连麦者P2P

第2种方式,是主播端与连麦者之间使用P2P方式进行交互,然后主播端将自己和连麦者的视频进行合并,再推到CDN上,CDN再发送给观众端,以下图:
这里写图片描述

这类方式的优缺点以下:

  • 优点
    • 主播和连麦者之间使用P2P,网络质量较好,延迟较小,保证了二者之间交互不会有非常大的延时;
    • 解决声音的干扰问题,消除回声;
  • 缺点
    • P2P在某些网络下没法穿透,有些观众根本没法与主播端进行交互;
    • 主播端需要上传两路视频:1路P2P与连麦者进行交互,1路使用RTMP推到CDN。还要下载1路视频:连麦者P2P发送过来的交互数据。所以主播端要求带宽需要较高,网络较差时没法进行主播
    • 主播端要进行多路视频的编码、解码,要求主播端装备配置比较高,较差的装备也没法进行主播;
    • 只能支持1个连麦者,不能支持多个连麦者;
    • 由于主播端和连麦者经过CDN合并成1路,因此,不能实现主播端和连麦者视频大小窗口切换。

综合来讲,P2P方式在1定程度上可以解决连麦的问题。

4.2.3 服务器端合图

另外1种方式,是主播和连麦者都将视频推送到CDN中,然后CDN内部对这几路视频进行合图,再将其发送给观众端。以下图:

这里写图片描述

这类方式的优缺点以下:

  • 优点
    • 主播和连麦者各路视频都使用RTMP推送到CDN,可以保证延时较小;
    • 由于CDN进行视频合图和发送,所以主播不需要很高的带宽;
    • 由于CDN进行视频合图,所以主播的装备不需要配置非常高;
    • 没有声音干扰问题;
    • 可以支持多个连麦者连麦;
  • 缺点
    • CDN需要进行视频的合图,需要额外开发工作,并且逻辑比较复杂;
    • CDN需要进行视频的合图,需要消耗较高服务器资源;
    • CDN合图后的布局难控制;
    • 据目前所知,还没有CDN支持这类方案;

5、基于SD-RTN的解决方案

声网Agora.io,在开发互动直播解决方案时,抛弃传统的基于TCP协议的CDN方案,从底层协议和布网上开始,创建了基于UDP协议的SD-RTN方案。

(1)甚么是SD-RTN

SD-RTN(Software-Defined Real Time Net work),软件定义实时传输网络,是1种新型的专为内容实时传输而设计的网络架构。通过在互联网上不同地区的数据中心放置软件组网单元,相互连接相互调度,在现有的公共互联网基础上构建1层新的虚拟网络。SD-RTN系统能够实时根据各节点的连接和传输状态、负载状态和到用户的距离和响应时间,自动分配最优、最通畅的传输路径,到达实时传输需要的质量保障级别。

(2)SD-RTN与CDN有何不同

  • 基本原理不同。CDN是存储转发结构,设计目的是在各个边沿节点缓存待分发内容,结构上从源站到观众是伞状多级缓寄存大方式。SD-RTN本质上1个实时传输网络,用户的数据在网络单元内部和传输线路上都以实时交换方式传送,从而能够保证最低延迟。

  • 底层协议不同。SD-RTN采取了专为实时传输设计的UDP协议,避免了采取TCP的延时不可控缺点。能够大大缩短交互延时,延时可从CDN方案的数秒,下降到数百毫秒。

  • 内容分发机制不同。SD-RTN是基于自定义路由,选择最优传输路径,直接将内容端到端传输,数据在网络单元中从不缓存,从而最大可能的下降延迟,同时内容安全性也更好。CDN是将内容缓存于缓存服务器中,再将内容就近下发。

  • 使用处景不同。SD-RTN适用于要求极低时延的实时互动场景,例如网络电话、视频会议、有主播与观众交互需求的互动直播等。CDN适用于对时延要求不高的场景,例如对延时要求不高、类似电视的单点直播、网站加速等。若硬要将CDN改造用于互动直播,那末其结构上对下降延迟的不适应性,始终会成为质量改进需求的瓶颈。

(3)SD-RTN相较CDN,有何优点

1、时延大大缩短。

直播延时可从CDN方案的数秒,下降到数百毫秒。这1延迟范围,属于实时通讯或准实时通讯延迟的范畴。在这1级别上,主播和观众可以基本重现在现场活动中的交互体验,从而大大释放了内容制作者的潜力,也为业务运营者创造新业务情势打开了无穷的空间和可能。

比如,在这1延迟下,主播和观众可以不光通过文字交互,也能够通过音频实时交互,而不会感到延迟过大而不自然。这类交互体验,在手机上也更自然,比打字更符合人的自然习惯。业务运营方固然可以把这1功能当作比文字互动更高级别的特权能力,仅仅对付费或是1定级别、身份的用户才可以直接和主播语音互动。业务运营者也能够利用此类功能创造类似课堂,或小剧院的现场互动氛围,让主播可以听得到观众的提问,或是掌声、叹息,乃至嘘声,实现自然的台上台下交互和有沉醉感的互动直播体验。加上辅助功能,体验上可以任意规定谁可以发声,谁不可以,这中间的可能性是无穷的。

更重要的是,即使在1般的连麦直播场景,这样的体验也能够帮助这类低延迟观众(我们称为“近场观众”)在上麦互动的时候实现平滑体验,不用每次切换就黑屏1次,好像节目中断1样。

对近场观众,即使是在网络较差的时候,基本上能够保证延迟不超过1秒,极少数观众延迟不超过2秒。相对CDN,即使在网络质量无问题时,也有3秒以上延迟。实测网络丢包仅仅10%,就能够让延迟拉大到10秒。这样的丢包率,在手机的无线信号下可是常常出现的。

所有这些,都要归公于声网SD-RTN的实时传输保障能力。UDP实现的传输协议,不会由于前1个包的丢失或延迟致使下后续包的延迟投递,而丢包可以用对延迟更友好的方式修复或补偿出来。不采取这个机制是没法到达这样的延迟保障效果的。

2、抗丢包能力强。

使用声网的技术,30%丢包时,仍然能够进行正常直播。而基于TCP的CDN直播方案在丢包2%时就明显卡顿,到达30%常常已断开连接。

(3)基于SD-RTN的直播架构与特性

下图是声网Agora.io互动直播的架构图
这里写图片描述

客户端均通过UDP连接SD-RTN(Agora Global Network),通过SD-RTN的就近接入策略,让使用者就近接入质量最好的数据节点,通过Agora Global Network的软件定义优化路由,经过传输延迟和质量优化的最优路径,自动避免网络堵塞,并规避骨干网络故障的影响。

若有常规的长延迟旁路直播需求,则可以将主播与连麦者合成1路直播流,通过RTMP推到CDN,进行下发。连接这1路的观众,不能参与连麦互动(称为“远场观众”)。

主要特点以下:

1、可以支持更多的主播交互,目前支持7人视频交互,100人语音交互。
2、当有观众连麦时,其他观众端收到的多路视频,观众端可以动态选择布局;
3、声网Agora.io会将直播视频推送到CDN,其他观众(网页端等)可以直接观看;
4、当有观众连麦时,声网Agora.io会将视频合图后推送到CDN,其他观众(网页端等)可以观看到连麦者与主播的互动;
5、在经过RTMP推流前的观众端,可以进行大小流切换,自主选择视频大小窗口的切换。

【本文作者】

单辉 声网Agora.io 高级开发工程师

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生