取代 FlashP2P,H5P2P 将成为 WebP2P 主流

WebRTC 能够有不少种的应用,好比实时音视频通讯,又拍云 PrismCDN 团队目前在作把 WebRTC 应用于内容分发 CDN。利用 WebRTC DataChannel 下的一些功能,能够去创建 P2P 链接,有了这个能力以后,咱们就能够在网页上面实现 P2P 的功能,也就是 WebP2P 的 H5P2P 实现。浏览器

在 CDN 网络基础上,加入 P2P 的目的是减小 CDN 的流量,用 P2P 链接完成大部分的流量。这样会带来一个巨大的好处——CDN 的成本降低,价格优点就体现出来了;对客户、对视频应用来说,带宽成本也很是显著地降低。成本优点这一最大的好处,也是咱们作 PrismCDN 这张 P2P-CDN 网络最大的动力。服务器

我今天主要以 WebP2P 功能来切入这个话题。网络

什么是 WebP2P 呢?它主要功能是在可以以 P2P 方式传输数据到网页上来,目的是要下降 CDN 的成本。架构

FlashP2P 已行至末路

举一个已经存在了八年的 WebP2P 的典型应用:FlashP2P,这是 Adobe 公司本身研发的内嵌在 Flash 播放器里面的 P2P 功能。它采用的协议是私有的 RTMFP,如今用这个协议的公司也蛮多的。并发

咱们先看一下 Flash 的将来:Google 声明在 2020 年底就彻底不支持 Flash;也是2020 年下半年,微软的 IE 和 Edge 浏览器放弃支持 Flash。框架

苹果的态度其实你们都很清楚,乔布斯一开始就很讨厌 Flash 这个东西。Mozilla 也是同样,2020 年结束对 Flash 的支持。Facebook 也在 2020 年底的时候中止支持 Flash 的视频游戏。最后,Adobe 本身也宣布了在 2020 年底就彻底中止支持 Flash。ide

也就是说,在 2020 年底的时候,FlashP2P 这个产品也就基本上结束了。性能

那么咱们如何在 Web 里面使用 P2P 呢?诞生于 2011年的 WebRTC 技术,在 Google、Microsoft、Apple、Facebook、Mozilla 等几家大公司的支持下成为了 H5 的标准,而且 Chrome、Firefox、Safari、Edge 等几大浏览器也都支持 WebRTC,咱们就能够用 WebRTC 来实现 P2P 的功能了。网站

△ SDK P2P 示意图

基于 SDK 的 P2P 不适合网页端

在讲 WebP2P 以前,咱们先讲一下基于 SDK 的 P2P 功能。它的原理是这样的, SDK 里面有一个 P2P 下载器,它可以创建 P2P 链接;P2P 不能完成全部的数据传输,不够的数据再从 CDN 服务器补充。最终拼成一个完整的数据流,这就是所谓的P2SP 技术。spa

咱们在 SDK 里面作一些本地的转封装以后,而后经过 local(127.0.0.1) 的 HTTP Server 向播放器提供标准的 HTTP 请求,好比说 HLS 、HTTPFLV。在使用传统 CDN 服务时,播放器发起一个 HTTP 请求或者 RTMP 请求到 CDN,如今使用 SDK P2P CDN 服务后,播放器直接到本地地址(127.0.0.1)拉取一个 HTTP 请求。播放器只须要改变一下请求的 URL 就能够从传统 CDN 切换到 SDKP2P CDN。

若是要在 Web 上应用 SDK P2P 技术,只有一个方式,就是把这个 SDK 作成一个插件安装到浏览器里面去,包括用 ActiveX、NPAPI 这些技术把 SDK 嵌到浏览器里面去。

过去若干年的经验已经告诉咱们,浏览器插件带来的用户体验是很是差的,最后几乎全部的视频网站没有使用。因此说用 SDK 的方式去作 WebP2P,这条路走不通的。

本质上来说 FlashP2P 也是一个 SDK P2P,只不过说 Flash 这个插件应用太普遍了,几乎每一个浏览器都会装它,没有从新安装插件的问题。

WebRTC + H5 带来了 WebP2P

有了 WebRTC 以后,经过浏览器实现点对点链接的可能性就来了。咱们能够经过WebRTC + H5 的组合实现 WebP2P。

对 WebP2P 的研究,国外已经持续了一些时间了,包括 BiTorrent 也衍生出一个WebP2P 项目——WebTorrent。Peer五、Streamroot 是两家商业公司,分别拿了 250 万美圆和 320 万美圆的投资。

△ H5 P2P 示意图

H5P2P 用 JavaScript 实现 P2P 引擎,包括下载器、转封装。经过 WebRTC 里面的 DataChannel 功能创建 P2P 链接,从 P2P 雾节点拿数据;当 P2P 数据不足时,能够经过 WebSocket 或者 DataChannel 去 CDN 补数据;将 P2P 数据与 CDN 数据组合后获得完整的媒体数据;最后经过 MSE 转封装成 mp4 向 H5 播放器 (video标签) 提供媒体数据流。

以上就是在 H5 框架里面实现 P2P 数据层面的逻辑,P2P 里面还会有一些信令、管理服务器,经过 WebSocket 就能够创建好 Web 与服务器之间通讯通道。

Flash 完全退出还要两年时间,在这段时间里,经过以下框架也是能够适配 Flash 播放器。

△ H5P2P + FlashPlayer示意图

树状、网状:P2P 的选型

咱们总结一下过去若干年的 P2P 直播,主要有这样的一些特征,要么树型结构,要么网状结构,要么树型和网状融合起来。

  • Tree:树型
  • Mesh:网状
  • Tree + Mesh:树型 +网状

树状结构是最传统的 P2P 直播,把播放节点分红不少个层次,呈现一棵直播树的形态。直播流经过 RTMP 推送到 CDN 服务器上,而后数据一层层地往下推:数据先往第一层节点发,第一层节点收到了以后再发给第二层节点,第二层节点再发给第三层节点,以此类推,逐层往下发。

△ 树状 P2P 直播示意图

当播放人数变多,P2P 直播的节点层级也变得很大,最多时会有十几层。这致使它的延时很是大,少则 30 秒,多则达到几分钟的延迟。这种延时水平,在目前的游戏直播、秀场直播等直播应用场景里面是没法应用的。

另外一方面,P2P 节点很容易出现退出等不稳定状况,好比用户关闭设备、退出程序等。P2P 直播树有一个节点挂掉,它下面的子树下的全部节点都会受到影响。这也意味着 P2P 直播树不稳定。

你们对传统的 P2P 直播树作一些改进。好比节点只是从多个上层节点拿数据,避免子树的不稳定;节点不仅是从上层拿数据,同层之间也能够拿数据,这就是在同层之中引入网状的结构了。

△ 网状 P2P 直播示意图

FlashP2P 事实上就抛弃了树的概念,直接用一个网状的概念。数据流一到播放节点,直接就开始在节点之间互相传输。这个类型网状 P2P 网络。

用 WebRTC 来作 P2P 的 Peer5 采用的是网状 P2P 网络。Streamroot 的解决方案也是网状结构。

高延迟:树状、网状 P2P 的困扰

相比树状 P2P 网络,网状 P2P 网络的优点是比较稳定,由于节点之间可以互传数据。

树状和网状 P2P 网络有两个共同特色,其中一个就是延时大,数据进来以后要通过好多中转才能到最后的播放节点。

树状和网状 P2P 网络另外一个特色:分享率不高。为何呢?家庭带宽上行、下行不对等限制了 P2P 网络的性能。下行若是有 20M,上行通常只有 2 到 4M 左右。在传统P2P网络里,播放端下载到数据后分享一部分给别人, 也就是说只有在播放的时候才能给别人传输数据,即数据只在播放节点之间互传。

咱们设想一下,总共有 1000 人在播放,直播流码率是 2M 的话,要让这个直播可以百分之百经过 P2P 网络跑起来,则平均每一个播放端必须提供 2M 上行带宽资源。在目前的接入网环境下,这是比较困难的。

再假如直播流码率达到了 3M,有 1000 人并发观看,而且平均每一个播放端能提供 2M 有上行带宽。累加起来的播放带宽有 3G,可是这 1000 个播放终端总供应带宽上限是 2G,即便每一个播放端所有供应数据,并且链接质量很是高的话,也存在 1G 的差额。这 1G 的数据,就须要到 CDN 边缘节点去补。

上行带宽的不足是致使了传统 P2P 网络的分享率不高的一个缘由。

本文第二部分《PrismCDN 网络的架构解析,以及低延迟、低成本的奥秘》,将在明天推送,感兴趣的朋友能够关注下~

推荐阅读:

低延时的P2P HLS直播技术实践

相关文章
相关标签/搜索