Skip to content

TIP

基于ServiceWorker的流媒体加速引擎,支持mp4, webm, mkv, ogv, mov, wav, mp3等,适配所有浏览器(包括iOS Safari)和Web播放器!

npmjsdelivr

本项目基于ServiceWorkers和WebRTC在所有现代浏览器和Web播放器实现了MP4/MP3的P2P能力。

演示Demo

打开2个相同的网页:demo

浏览器支持情况

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

兼容性ChromeFirefoxmacOS SafariOperaEdgeiOS SafariIE
WebRTC Datachannel
Service Worker
Supported

工作原理

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

局限性

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

粤ICP备18075581号