首先,要普及基础知识。 直播的技术流程是怎样的?
1、直播流程
如上图所示,整个直播流程分为以下几个关键步骤:
2、CDN缓存并转发视频流;
3、查看客户端拉取CDN中缓存的视频流进行播放;
可见CDN在这里起到了关键的作用。 2016年也是CDN崛起的时代。 网宿、快网、七牛、高升、蓝讯、冠之云、腾讯云、百度云、阿里云等CDN均表示支持。 已经支持直播,直播已经逐渐成为CDN的标配功能。
那么我们来看看CDN的技术原理。
2.CDN技术原理
CDN的全称是Content Delivery Network,即内容分发网络。 这是一个战略部署的整体系统。 主要用于解决因网络带宽小、用户访问量大、网点分布不均匀等原因导致用户访问网站速度慢的问题。
CDN的技术原理如上图所示。 具体实现是在现有网络上增加一层新的网络架构,将网站内容发布到距离用户最近的网络节点,使用户就近获取所需内容。 ,解决以往网络拥塞、访问时延高等问题,提升用户体验。
对于直播来说,将Web服务器替换为主播客户端,如下图所示。
由于视频占用带宽较大,与普通Web服务有较大区别,因此CDN的优势能够更好地体现:减少网络拥塞、降低访问延迟、带宽得到很好的控制等。
另外,CDN直播中常用的流媒体协议有RTMP、HLS、HTTP FLV等。
3. CDN的常用架构
CDN架构设计相对复杂。 不同的CDN厂商也在不断优化自己的架构,因此架构无法统一。 这里只是简单分析一些基本架构。
CDN主要包括几个主要组件:源站、缓存服务器、智能DNS、客户端等。
原始站点:指发布内容的原始站点。 网站文件的添加、删除、更改均在原站完成; 另外,缓存服务器捕获的所有对象也都来自源站。 对于直播来说,源站点是主播客户端。
缓存服务器:是直接提供给用户访问的站点资源,由一台或多台服务器组成; 当用户发起访问时,智能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的技术原理后,我们在进行直播选型时还需要了解一种方案的优缺点。 接下来我们来分析一下CDN的缺点。
4.1 缺点:播放延迟
连麦直播的主要问题就是播放延迟! 播放延迟从何而来?
4.1.1 网络延迟
这里的网络延迟是指主播端采集与观众端播放的时间差。 这没有考虑主播片段采集和编码视频所花费的时间,也没有考虑观众观看和解码视频所花费的时间。 只考虑网络传输的延迟。 例如,考虑下图中的网络延迟:
另外,数据传输过程还涉及到逻辑交互直播连麦软件,比如数据包的重传和确认,以及缓存上的一些逻辑等等,都会在此基础上增加很多。
那么我们来简单估计一下大概的网络延迟。 众所周知,光在真空中的速度约为30万公里/秒,而光在其他介质中的速度会大大降低。 因此,在普通光纤中,工程上一般认为传输速度为200,000km/s。 具体来说,你可以参考以下内容:
因此,当节点较少且网络条件良好时,网络延迟将是最小的。 在一定缓存的情况下,延迟可以控制在1s~2s左右。 但当节点较多且网络较差时,网络延迟会相应增加。 根据经验,延迟可以达到15秒以上。
4.1.2 网络抖动
网络抖动是指数据包的到达顺序和间隔与发送出去的时间不一致。 例如发送100个数据包,每个数据包的发送间隔为1s。 结果第27个数据包在传输过程中遇到了网络拥塞,导致第27个数据包没有在26之后立即到达,而是延迟到了87之后。在直播中,这种抖动的影响其实和丢包是一样的。 因为不能按照收到的顺序播放内容,否则会造成失真。
网络抖动会导致播放延迟相应增加。 如果网络抖动较大,会导致播放卡顿等现象。
如上图所示,主播端t3和t5发送的报文分别到达t3'和t5',但中间时延增加,即出现网络抖动。 这导致观众观看视频的延迟不断增加。
4.1.3 网络丢包
CDN直播中使用的RTMP、HLS、HTTP FLV等协议都是基于TCP的。 TCP的一个非常重要的特点是可靠性,即不会发生数据丢失。 为了保证可靠性,TCP在传输过程中进行了3次握手,如下图所示。 首先,客户端会向服务器发送连接请求。 服务器同意后,客户端将确认连接。 这是 3 次握手。 然后,客户端开始发送数据,每发送一批数据,收到服务器的“收到”确认后,继续发送下一批。 为了保证传送,TCP有自动重传机制。 如果传输过程中发生数据包丢失,并且没有从对端收到“已接收”信号,则丢失的数据包将自动重传,直到超时。
因为互联网的网络状况是不断变化的,主播侧的网络状况是不可控的。 因此,当网络中的丢包率开始增加时,重传会导致延迟不断增加,甚至导致不断尝试重新连接等,这样就无法进行有效的缓存,严重时会导致观看者导致无法观看视频。
4.2 弱点:连麦
在直播过程中,主播想要与用户互动,常见的方式有两种:
第一种方式:文本,比较常见,实现起来也比较简单,这里不再分析;
第二种方式:连麦,让主播可以与观众面对面互动,增加互动性;
由于连接小麦的方法比较复杂,这里详细分析一下。
4.2.1 多RTMP流的实现
前面提到,RTMP是目前主播中最常用的协议。 使用RTMP协议,可以实现最简单的连接麦克风的方式,如下图所示。
当有链接器时,主机和链接器都会将一个 RTMP 流推送到 CDN。 然后CDN将这两个RTMP流发送给观众直播连麦软件,观众将这两个RTMP流组合到一个屏幕上。 这种方式的优点和缺点如下:
缺点
4.2.2 主播与主播之间的P2P
第二种方法是在锚点和链接器之间使用P2P交互。 然后主播将自己和链接者的视频合并,然后推送到CDN,CDN再发送给观众,如下图:
这种方式的优点和缺点如下:
缺点
总体来说,P2P方式可以在一定程度上解决连麦问题。
4.2.3 服务端图合并
另一种方式是主播和主播将视频推送到CDN,然后CDN内部将视频进行组合,然后发送给观众。 如下所示:
这种方式的优点和缺点如下:
缺点
5、基于SD-RTN的解决方案
Agora.io在开发互动直播解决方案时,放弃了基于TCP协议的传统CDN解决方案,从底层协议和分发网络入手,打造了基于UDP协议的SD-RTN解决方案。
(一)什么是SD-RTN
SD-RTN(Software-Defined Real Time Network),软件定义实时传输网络,是一种专为内容实时传输而设计的新型网络架构。 通过将软件网络单元放置在互联网上不同区域的数据中心,相互连接和调度,在现有公共互联网的基础上构建一层新的虚拟网络。 SD-RTN系统可以根据各节点的连接和传输状态、负载状况、到用户的距离、响应时间等,实时自动分配最优、最流畅的传输路径,达到实时所需的质量保证水平传播。
(2)SD-RTN和CDN有什么区别?
(3)SD-RTN相比CDN有哪些优势?
1.延迟大大缩短。
直播延迟可以从CDN解决方案中的几秒降低到数百毫秒。 该延迟范围属于实时通信或准实时通信延迟的范畴。 在这个层面上,主播和观众基本可以重现现场活动中的互动体验,从而极大地释放了内容生产者的潜力,也为经营者创造新的商业形态开辟了无限的空间和可能性。
比如在这种延迟下,主播和观众不仅可以通过文字进行互动,还可以通过音频进行实时互动,不会感觉延迟太大、不自然。 这种交互体验在手机上更加自然,比打字更符合人们的自然习惯。 当然,业务经营者可以将这一功能视为比文字交互更高级别的特权能力。 只有付费或具有一定等级和身份的用户才能直接通过语音与主播互动。 商家还可以利用此类功能营造类似教室、小剧场的现场互动氛围,让主播听到观众的提问、掌声、叹息甚至嘘声,实现台上台下的自然互动和有意义的互动。 沉浸式互动直播体验。 辅助功能的加入,体验可以任意决定谁能说话、谁不能说话。 可能性是无止境。
更重要的是,即使是在普通的多麦克风直播场景下,这种体验也能帮助这类低时延观众(我们称之为“近场观众”)在麦克风交互时获得流畅的体验,而无需每次都切换。 屏幕一下就黑了,好像程序被中断了。
对于近场观众来说,即使在网络较差的情况下,延迟也基本可以保证不超过1秒,而对于极少数观众来说,延迟也不会超过2秒。 与CDN相比,即使网络质量没有问题,也有3秒以上的延迟。 实测网络丢包率仅为10%,可以将时延提高到10秒。 这种丢包率经常出现在手机无线信号下。
这一切都得益于SoundNet SD-RTN的实时传输保障能力。 UDP实现的传输协议不会因为前一个数据包的丢失或延迟而延迟后续数据包的传送,并且数据包丢失可以通过更加延迟友好的方式进行修复或补偿。 如果不使用这种机制,就不可能达到这样的延迟保证效果。
2、抗丢包能力强。
使用Agora的技术,丢包30%的情况下仍然可以进行正常直播。 基于TCP的CDN直播方案在丢包达到2%时会明显卡顿,而在丢包达到30%时经常会出现连接断开的情况。
(3) 基于SD-RTN的直播架构及特点
下图是Agora.io互动直播的架构图
客户端均通过UDP连接到SD-RTN(Agora全球网络)。 通过SD-RTN的就近访问策略,用户可以就近访问质量最好的数据节点。 通过Agora全球网络的软件定义路由优化,通过传输时延和质量优化的最优路径,自动避免网络拥塞,避免骨干网故障的影响。
如果需要定期进行长延时旁路直播,可以将主播和主播合为一条直播流,通过RTMP推送到CDN进行分发。 通过这种方式连接的观众无法参与与麦克风的交互(称为“远场观众”)。
主要特点如下:
1.可以支持更多主播互动。 目前支持7人视频交互,100人语音交互。
2、当观看者连接麦克风时,该观看者可以动态选择其他观看者接收到的多路视频的布局;
3.Agora.io将直播视频推送到CDN,其他观看者(网页等)可以直接观看;
4、当观众连接麦克风时,Agora.io会将视频合并并推送到CDN,其他观众(网页等)可以观看麦克风与主播的互动;
5、在RTMP推流前的观看端,可以切换大小流并独立选择视频窗口的大小。
【本文作者】
单惠生 Agora.io 高级开发工程师
RTC2016 报名现已开放!
如果你看完这篇关于直播的文章还不满意,可以来RTC大会,参加直播技术分论坛,听听Top 5直播平台高手的《华山论剑》。
基础票188元,限时免费,可参加“直播技术分论坛”。