P2P流媒体引擎

vuePress-theme-reco    2018 - 2021
P2P流媒体引擎 P2P流媒体引擎

Choose mode

  • dark
  • auto
  • light
在线文档
  • 快速入门
  • Web SDK

    • Hls.js
    • iOS web
    • Dash.js
    • Shaka-Player
    • 大文件下载
  • 安卓/安卓TV SDK
  • iOS/tvOS/macOS SDK
价格
控制台
关于我们
生态
GitHub (opens new window)
language
  • English
  • 简体中文

在线文档
  • 快速入门
  • Web SDK

    • Hls.js
    • iOS web
    • Dash.js
    • Shaka-Player
    • 大文件下载
  • 安卓/安卓TV SDK
  • iOS/tvOS/macOS SDK
价格
控制台
关于我们
生态
GitHub (opens new window)
language
  • English
  • 简体中文
  • 快速入门
  • 常见问题
  • Tracker服务
  • 信令服务
  • P2P优化
  • 控制台

  • Hls.js SDK

  • iOS Web SDK

    • 简介
      • 使用方法
      • API文档
      • 更新日志
    • 安卓 SDK

    • iOS SDK

    • Flutter SDK

    • Shaka-Player SDK

    • Dash.js SDK

    • 大文件下载 SDK

    • 更多

    简介

    vuePress-theme-reco    2018 - 2021

    简介


    iOS浏览器的P2P加速SDK

    npm jsdelivr

    iOS的Safari浏览器虽然可以支持原生播放HLS,但整个过程对开发者是透明的。Safari从2017年起就支持 WebRTC,但到目前为止还不支持 MEDIA SOURCE EXTENSIONS,而这个API对实现客户端P2P至关重要。
    幸运的是,我们可以通过另一种方式来实现对HTTP流量的本地代理,从而间接实现P2P功能,这个用于实现本地代理的技术就是"ServiceWorkers",本项目基于ServiceWorkers和WebRTC在Safari浏览器实现了HLS的P2P能力。

    # 浏览器支持情况

    由于WebRTC已成为HTML5标准,目前大部分主流浏览器都已经支持。兼容性取决于浏览器是否支持 WebRTC 和 ServiceWorker。

    兼容性 Chrome Firefox macOS Safari Opera Edge iOS Safari IE
    WebRTC Datachannel ✔ ✔ ✔ ✔ ✔ ✔ ❌
    Service Worker ✔ ✔ ✔ ✔ ✔ ✔ ❌
    SwarmCloud ✔ ✔ ✔ ✔ ✔ ✔ ❌

    # 工作原理

    • 首先由客户端嵌入的SDK 注册 ServiceWorker ,从而在播放器与网络之间嵌入一层本地代理
    • 播放器向本地代理请求视频流
    • 本地代理(ServiceWorker)通过监听 fetch 事件,拦截全站的网络请求,并识别出m3u8和ts文件请求,将请求转发到主线程
    self.addEventListener('fetch', event => { /* ⛦ magic here ⛦ */ })
    
    • 主线程根据P2P网络情况决定是否从对等端下载,下载完成后在主线程保留一份拷贝以分享给其他节点
    • 当资源被一个设备缓存之后,其他设备在请求相同资源时,将尝试优先通过P2P网络就近从该设备获取资源,而不是从成本更高、距离更远的源服务器获取(即用WebRTC替代HTTP)
    • 从P2P网络获取失败或者不能缓存的资源,将自动回源

    # 在线演示

    (https://demo.cdnbye.com/?ios=true)[https://demo.cdnbye.com/?ios=true]

    # 局限性

    • 由于ServiceWorker的限制,需要用https访问网站
    • 由于ServiceWorker的限制,需要将sw.js文件部署至托管域名的服务器