CDN视频流中的3个问题以及解决方法

Wesley13
• 阅读 619

CDN视频流中的3个问题以及解决方法

正文字数:2361  阅读时长:3分钟

目前,视频内容占据了所有互联网的流量近70%(而且还在不断攀升),因此视频流媒体的重要性从未像现在这样重要。现下,大部分内容由内容交付网络(CDN)管理。然而,对于涉及实时内容的CDN视频流时,仍存在许多不足之处。

Posted by  Red5 Pro

url : https://www.red5pro.com/blog/3-problems-with-cdn-video-streaming-and-how-we-solved-them/

由于CDN要求您通过其数据网导入所有的内容,因此一些流媒体提供商发现他们需要使用多个CDN来到达不同的地区。这意味着管理不同的系统、分散的流媒体以及添加更多的连接来传输流会带来更长时间的延迟以及额外的复杂性。

这促使实时流媒体市场的许多人开始转向multi-CDN解决方案。事实上,据预测,到2025年,multi-CDN市场将增长到240亿美元。虽然multi-CDN解决了单个CDN网络的一些问题(地区/区域可用性、价格等),但实际上它只是实时视频流的权宜之计。现在,纯WebRTC分发服务是创建实时流媒体的最佳方式。

因此,纯CDN解决方案正逐渐退出市场,至少在直播视频分发方面是如此。原因如下:

延迟

基于HTTP体系架构构建的CDN根本不具备处理动态更新内容(如实时视频)的传输的能力。它们的工作原理是在区域数据中心缓存数据,以便高效地传递大量数据。这种设计的重点在于吞吐量和可伸缩性,从而形成了最适合处理静态对象(例如网站或预先录制的视频)的网络。

缓存会影响延迟,而延迟与传递静态元素(例如网页和VOD)无关紧要。随着实时视频体验变得更具交互性,这意味着它们越来越依赖于低延迟传输。即使只有一秒钟的延迟也会对用户体验和应用程序的实用性产生负面影响。如果它不是实时流式传输,就无法直播。

为了解决这个延迟问题,我们需要使用一种新的方案:WebRTC。WebRTC是围绕低延迟流媒体设计的。它可以以小于500毫秒的端到端延迟传输实时视频,这比HLS传输快得多,后者即使经过修改,也只能在最低的情况下降低到2-3秒。因此,纯WebRTC服务预计将从多CDN总流量(total Multi-CDN traffic)的1.2%增长到8.3%。

单向流动

除了高延迟之外,CDN实际上是围绕着将数据分发到客户端而不是回接收信息而设计的。随着现场体验变得更具交互性,将诸如缩放呼叫、共同查看和粉丝墙体验等功能集成到这些事件中,无法在多个方向上流传输内容对CNDs的实用性是一个重大的损害。

CDN中的每个服务器本质上都被用作一个摄取点,它将流推送到CDN以进行大规模的传输。这意味着它可以很好地将数据从原点分发到边缘,但对于反向传输流信息(从边缘返回原点)则不太好。在这种架构下,双向通信效率不高,因为CDN最适合于广播只由订阅者观看的单个流,而不是双向聊天,其中订阅者在订阅视频的同时也在广播视频。对话在双方之间来回进行,因此他们都必须发送和接收视频。这意味着CDN根本不提供这一功能,而想要构建交互式视频体验的开发人员则不得不将完全不同的技术拼凑在一起,而这些技术从来都是预备过 的。

在CDN模型中,请求的数据需要从原点传输到边缘。一旦中继到最近的边缘服务器,它就必须与每个试图访问流的客户机建立单独的连接。这被称为“最后一英里”,是CDN视频流解决方案带宽消耗的主要来源。一些网络已经找到了解决这个问题的方法来降低数据传输成本。

一些提供商使用WebRTC来提高CDN容量。使用WebRTC的话,将有高达70%的峰值流量可以被卸载,这有助于CDN供应商避免基础设施升级,并使CDN分销商能够利用现有预算做更多事情。

例如,Peer5、StreamRoot和StriveCast已经创建了点对点共享网络,以转移它们在CDN上的总带宽消耗。他们不必将所有的内容一对一地从edge流到客户端,而是在流相同文件的所有客户端之间创建数据通道连接。这样,视频通过高效的分块传输HLS协议从源服务器发送到边缘服务器。一旦订阅者拉出那些HLS (.ts)段,它就可以在WebRTC数据通道上建立一个P2P连接来将那些段转发给那个对等者。然后,该对等端可以与另一方建立连接。然后重复这个连接过程,这样他们就可以共享相同的视频文件了。这意味着每个用户都不必从CDN(为数据传输收费的网络)中冗余地拉出所有的数据段。

虽然这些点对点 的网状网络对于VOD传输是有效的,但是对于低延迟的实时流媒体则不是有效的。首先,他们仍然使用HLS段作为流的源,这将导致高延迟的问题。其次,这种网状网络并没有解决双向流的问题。此外,还有另一类新兴的纯WebRTC基础提供商,他们根本不使用CDN,事实上它们已经完全取代了CDN。

同步化

实时延迟还释放了与视频流的其他数据正确同步的能力。这开启了添加聊天功能、实时覆盖叠加和交互式图形、虚拟黑板、实时下注和拍卖出价、GPS数据和许多其他的功能。例如,一个体育广播可以有一个实时的图形显示功能,它可以与屏幕上发生的最新状态保持同步。正确的同步与实时延迟相结合,也可以防止恼人的剧透,从而确保不会破坏其他人的观看体验。它还可以确保聊天中的评论与当前显示的内容一致。

对于这些用例,数据可以通过WebRTC数据通道或单独的websocket通道发送,这可以使用SharedObjects方法实现。SharedObjects管理多个客户端之间的数据提要,从而实现数据的一致传输。这样可以确保广播者,订户和任何其他功能之间的完全交互。

在GitHub上可以找到更多示例:

iOShttps://github.com/red5pro/streaming-ios/tree/master/R5ProTestbed/Tests/SharedObject

Androidhttps://github.com/red5pro/streaming-android/tree/master/app/src/main/java/red5pro/org/testandroidproject/tests/SharedObjectTest

所有这些关于CDN实时流传输局限性的讨论可能会给你一种印象:即它们应该被纯WebRTC解决方案所取代。然而,它们在视频流媒体中仍然扮演着非常有价值的角色。CDN对于交付视频点播内容以及静态对象(如网站和静态图像)仍然很有用。然而,当涉及到动态更新的元素(如实时视频流)时,CDN永远无法正确处理它们。与许多其他技术要素一样,市场的需求也扩大并发生了变化。CND正在试图适应这种情况,但它们基于HTTP的基本架构造成了高延迟、单向流限制和同步问题。这些问题,会由新的直播架构模型来解决。

CDN视频流中的3个问题以及解决方法

LiveVideoStackCon 2020 北京

2020年10月31日-11月1日

点击_【阅读原文】_了解更多详细信息

本文分享自微信公众号 - LiveVideoStack(livevideostack)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
可莉 可莉
3年前
2021年全球公有云终端用户支出将增长18% ;EMNLP 2020最佳论文:无声语音的数字发声
!(https://static001.geekbang.org/infoq/af/af9f6637b50b09be60b00a42f3812d5e.png)开发者社区技术周刊又和大家见面
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这