低延时的P2P HLS直播技术实践
本文根据4月21日OSC源创会·武汉站的现场分享为蓝本,重新整理。以下是演讲内容:
近几年,随着直播、短视频等视频领域对带宽要求的提升以及CDN行业竞争的加剧,很多CDN公司开始往P2P-CDN方向发展。P2P-CDN在降低成本和加速视频业务方面一直是非常优秀的解决方案。
今天就以HLS协议做一个切入点,讲解一下又拍云的P2P-CDN项目——PrismCDN。
直播P2P-CDN通常用于传输FLV协议的视频,又拍云为什么研发支持HLS传输协议的P2P-CDN呢?因为有客户使用了Web播放器,他们不想用FLV协议。为了满足客户的需求,又拍云PrismCDN对P2P-CDN做了HLS适配,让其能够支持HLS协议。
首先看一下HLS和HLS+。虽然HLS已经被广泛使用,但是它平均延时在10秒-30秒,存在延时高的缺点。HLS+技术通过在CDN边缘节点对视频进行切片、转封装,使延迟降低到4秒。目前,又拍云PrismCDN已经全面支持HLS+服务。
P2P-CDN支持HLS实现原理
以PrismCDN为例,目前的做法是P2P-CDN需要做一个P2P下载器的SDK,再通过P2P协议下载数据,同时借助CDN服务器补充数据下载,得到中间结果—FLV数据流。接着在SDK本地做转封装,转成M3U8和TS数据流,最后在local IP地址127.0.0.1上面提供HTTP服务,最终使播放器可以访问HLS数据流。

△又拍云PrismCDN支持HLS协议流程
PrismCDN支持HLS协议的方式与HLS+降低延时的方式相似,HLS+是在CDN边缘节点切片,而PrismCDN则是在客户端本地完成切片以及传输FLV数据流。
P2P HLS的思路和HLS+是一样的,把每个TS片断切的很小,TARGETDURATION制成1秒,做到端对端延时4秒。
高效低价,独特直播架构下的秘密
上面主要讲解了HLS协议本地转封装,相较于P2P-CDN而言,最关键的数据流的传输方式。

△ 又拍云 PrismCDN直播架构
首先主播通过RTMP协议将直播流推送到CDN服务器上,CDN服务器会即时推送数据流的二十分之一到光猫、路由器、机顶盒等雾节点。再由雾节点将数据转发到SDK的下载器里。下载器再向CDN服务器补数据,最终拼成FLV流。
PrismCDN数据传输关键点在于依靠光猫、路由器等雾节点的上行能力来提供CDN带宽,从而减少CDN服务器补数据流。将大部分数据通过雾节点转发,最终达到节约成本的目的。
独特直播模型造就低延时
与其他P2P产品相比,又拍云PrismCDN最大的特点是低延时。
P2P直播已有多年历史。早在2004年时,在网络电视直播应用中就已经使用P2P技术,把部分电视台信号放到互联网上面来直播。但是受限于技术,那时的P2P直播延时相当大。
为什么2004年的P2P直播延迟会相当大呢?
这是因为当时的直播格式数据流从最顶层的播放节点和CDN下载数据,再逐层下发到各个下层节点。这种直播树结构将数据一路下灌,造成了非常大的延时。
又拍云PrismCDN不需要构建一棵直播树,只需一层直播模型,就可以达到P2P占量比较高的效果。在一层模型中做到端到端延时在3秒内。在这样的延时下,目前市面上直播的业务,如游戏直播、秀场直播,都可以用PrismCDN来实现。
总结一下,PrismCDN低延时技术主要是在数据传输模型上进行了简化。

△左为传统P2P直播树,右为又拍云PrismCDN直播模型
90%分享率成就低延时、低成本特性
PrismCDN节点分享比例在90%以上,提升分享比例的关键是在于引进了第三方设备来供应数据。相比传统直播树,PrismCDN不存在“是播放者,才是供应者”的局限。比如有一万个并发播放者的话,传统直播树的结构是无法支持在播放的同时,分享带宽给其它用户,尤其是在数据压力比较高的时候。而PrismCDN增加了大量的第三方设备数量,提高上行带宽供应量,降低CDN节点压力,从而提高节点分享比例。
PrismCDN能够提升流畅度的关键在UDP协议。UDP协议与TCP协议相比,优化空间更大。实测中,我们让一部分节点用TCP来运行,另外一部分节点用UDP来运行。相较于TCP,UDP可以提升5%的流畅度。
在雾节点选择方面,借助智能调度系统,就近选择节点,解决运营商之间的互联互通问题,避免跨运营商的情况发生。
多种测试确定最合适参数
又拍云PrismCDN中低延时、高分享率以及流畅性这些指标非常重要。但是这些指标中好几个是互相矛盾的,比如说分享率和流畅性,如何在提高分享率的同时提升流畅性?我们在开发的过程当中就在调整这些参数,通过线上系统大规模AB测试不断寻找合适的参数,找到合适的时间点补数据,用多少节点传输数据,用多少冗余节点等。
未来发展
除了P2PHLS之外,又拍云还在研发WebP2P,这里面会用到WebRTC、DataChannel、MSE、Webassembly等技术。我们去销售P2P产品的时候,市场上确实会有一些阻力,因为客户可能会不大信任SDK的P2P产品,包括它的升级和分发渠道,以及出了问题以后如何回滚。但是用WebP2P来做,客户会比较放心了,万一P2P系统有问题,可以快速回滚到老版本去。
低延时的P2P HLS直播技术实践的更多相关文章
- HLS直播技术方案及踩过的坑
		
一.为什么是IJKPlayer 在基础技术方面,后端有比較成熟的系统,就不再说了,这里说说client方面. 有直播就会有弹幕.基本上是标配了. 字幕方面bilibili开源了一个Android的项目 ...
 - EasyNVR无插件直播服务器软件览器低延时播放监控摄像头视频(EasyNVR播放FLV视频流)
		
背景描述 EasyNVR的使用者应该都是清楚的了解到,EasyNVR一个强大的功能就是可以进行全平台的无插件直播.主要原因在于rtsp协议的视频流(默认是需要插件才可以播放的)经由EasyNVR处理可 ...
 - 浏览器低延时播放监控摄像头RTSP海康大华硬盘录像机NVR视频(EasyNVR播放FLV视频流)
		
背景描述 EasyNVR的使用者应该都是清楚的知道,EasyNVR一个强大的功能就是可以进行全平台的无插件直播.主要原因在于rtsp协议的视频流(默认是需要插件才可以播放的)经由EasyNVR处理后可 ...
 - HTTP Live Streaming直播(iOS直播)技术分析与实现
		
本文转载自:http://www.cnblogs.com/haibindev/archive/2013/01/30/2880764.html 不经意间发现,大半年没写博客了,自觉汗颜.实则2012后半 ...
 - 转: HTTP Live Streaming直播(iOS直播)技术分析与实现
		
http://www.cnblogs.com/haibindev/archive/2013/01/30/2880764.html HTTP Live Streaming直播(iOS直播)技术分析与实现 ...
 - [转帖]技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解
		
技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解 http://www.52im.net/thread-1309-1-1.html 本文来自腾讯资深研发工程师罗成的技术分享, ...
 - 阿里云李刚:下一代低延时的直播CDN
		
在上周落幕帷幕的多媒体领域技术盛会——LiveVideoStackCon音视频技术大会上,阿里云的高级技术专家李刚进行了<下一代低延时的直播CDN>技术分享.主讲人李刚,多年关注在CDN这 ...
 - 将海康大华等网络摄像机RTSP流进行网页Flash rtmp和H5 hls直播的技术方案
		
前言 再小的技术点也会有他的市场! 一直以来,都有一些不被看好,认为是成本太高,无法大规模展开的软件和产品形态,就好比每一座城市都会有他的著名小吃一样,即使是慕名而来的人源源不断,受众群体也总是有限, ...
 - 阿里云低延时直播 RTS 能力升级 让直播推流效果更佳
		
行业背景 直播技术飞速发展让各个行业的用户体验呈现多样化和个性化,不同业务场景下创新实践满足大众对于音视频互动体验和参与的高标准要求.历经2020年初的巨变之后,以视频.游戏.电商.教育为主的互联网经 ...
 
随机推荐
- Django--post提交表单内容
			
本节目标:①.提交表单内容②.通过客户端提交表单新增一篇文章③.通过Django的forms组件来完成新增一篇文章 =======提交表单内容======== 1.前端html:login.html ...
 - Fiddler 过滤设置
			
1.User Fiters启用 2.Action Action:Run Filterset now是否运行,Load Filterset加载,Save Filterset保存: 3.Hos ...
 - [转].Net-C#的委托(代理)和事件
			
一.代理 首先我们要弄清代理是个什么东西.别让一串翻译过来的概念把大家搞晕了头.有的文章把代理称委托.代表等,其实它们是一个东西,英文表述都是“Delegate”.由于没有一本权威的书来规范这个概念, ...
 - MyBatis(十一) 嵌套结果集的方式,使用collection标签定义关联的集合类型的属性封装规则
			
(1)接口中编写方法 public Dept getDeptPlusById(Integer id); (2)Mapper文件 <resultMap type="com.eu.bean ...
 - It is difficult to the point of impossiblity for sb to image a time when ...
			
对sb而言很难想象一段..的时光.
 - Tomcat手动部署Web项目详细步骤
			
阅读须知:文章基于Tomcat8,其它版本若有差异,请自行辨别.本文为博主原创文章,转载请附原文链接. 不借助任何IDE,这里介绍在Tomcat中手动部署web项目的三种方式: 1.部署解包的weba ...
 - mybatis 之数据库 include refid ="base_column_list"
			
mybatis 之数据库 include refid ="base_column_list" 对于刚学习使用SSM框架的新手来说,mybatis中的数据库语句有点不一样,下面便是对 ...
 - vscode1.30.1使用的electron3.0.10中的bug
			
PS C:\GitHub\vscode2\vscode> scripts\code.bat[13:07:19] Syncronizing built-in extensions...[13:07 ...
 - Tips_发送请求时添加一个随机数参数,让浏览器每次都重新发请求到服务器
			
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
 - 航班座位_hihocoder
			
题目2 : 航班座位 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi在给一个家庭旅游团订某次航班的机票.该航班的飞机一共有N排座位,每排座位有10个座位,从左到右 ...