SwarmCloud

vuePress-theme-reco SwarmCloud    2018 - 2023
P2P流媒體引擎 P2P流媒體引擎

Choose mode

  • dark
  • auto
  • light
線上文檔
  • 快速入門
  • Web SDK

    • HLS(m3u8)
    • Shaka-Player
    • Dash.js
    • MP4
    • 大文件下載
  • 安卓/安卓TV SDK

    • v3 (安卓5.0+)
    • v2 (安卓4.4+)
  • iOS/tvOS/macOS SDK
定價
關於我們
生態
實時地球
管理面板
GitHub (opens new window)
language
  • English
  • 中文

線上文檔
  • 快速入門
  • Web SDK

    • HLS(m3u8)
    • Shaka-Player
    • Dash.js
    • MP4
    • 大文件下載
  • 安卓/安卓TV SDK

    • v3 (安卓5.0+)
    • v2 (安卓4.4+)
  • iOS/tvOS/macOS SDK
定價
關於我們
生態
實時地球
管理面板
GitHub (opens new window)
language
  • English
  • 中文
  • 快速入門
  • 常見問題
  • Tracker服務
  • 信令服務
  • P2P優化
  • 管理面板

  • Web HLS SDK

    • 簡介
    • 使用方法
      • 准备工作
      • 部署本地代理(sw.js)
      • 引入插件
      • 使用插件
      • 引擎的切換原理
      • 播放器集成
      • Electron
    • 播放器示例
    • API文档
    • CDN
    • 更新日誌
  • 安卓 SDK v3

  • 安卓 SDK v2

  • iOS/tvOS/macOS SDK

  • Flutter SDK

  • Shaka-Player SDK

  • Dash.js SDK

  • Hls.js SDK

  • Web MP4 SDK

  • 大文件下載 SDK

  • 更多

使用方法

vuePress-theme-reco SwarmCloud    2018 - 2023

使用方法


SwarmCloud

# 准备工作

# 綁定域名

在使用P2P服務之前,需要先綁定域名。

Localhost 已加入白名單,無需綁定,用於本地調試。

# 网站迁移到HTTPS

由于基於 Service Worker 的引擎需要在HTTPS下才能生效,请确保你的网站已经迁移到HTTPS,如果只使用基於 hls.js 的引擎則可以忽略。

# 部署本地代理(sw.js)

為了安全起見,瀏覽器不允許其他域名的腳本調用 ServiceWorker ,因此需要將腳本文件置於網站同一域名下,P2P功能才能正常工作,具體操作如下:

# 如果網站不是PWA

拷貝 sw.js (opens new window) 到服務器的播放器所在目錄, 並確保可以通過公網訪問如 https://your_website.com/sw.js 。 您也可以下载hls-proxy.js (opens new window) 本地化并改名为 sw.js 。

# 如果網站是PWA

在網站根目錄的 sw.js 文件的第一行增加以下代碼:

self.importScripts('https://cdn.jsdelivr.net/npm/swarmcloud-hls@latest/dist/hls-proxy.js')

並且在 SDK 配置正確的 sw.js 路徑

var p2pConfig = {
     swFile: PATH_TO_SW_FILE
}

部署完成後,1)您的網站之前 sw.js 的邏輯將繼續正常執行;2)SwarmCloud 的 ServiceWorker 腳本將監聽"fetch"事件進而攔截HLS請求,其他請求將被之前的 ServiceWorker 的邏輯處理。

如果仅使用hls.js,則不需要部署HTTPS或者本地代理(sw.js)

# 引入插件

# Script標簽引入

通過script標簽引入已經和hls.js打包的最新版本:

<script src="https://cdn.jsdelivr.net/npm/swarmcloud-hls@latest/dist/hls.min.js"></script>

或者引入沒有與hls.js打包的獨立版本:

<script src="https://cdn.jsdelivr.net/npm/hls.js@0.14.17"></script>
<script src="https://cdn.jsdelivr.net/npm/swarmcloud-hls@latest/dist/p2p-engine.min.js"></script>

# 文件引入

點擊 (opens new window)
註意js代碼需要放在播放器代碼之前執行,可以在引入播放器代碼的script標簽之前引入。

# Browserify / Webpack

npm install --save swarmcloud-hls

在播放器模塊中通過 require 引入:

var Hls = require('swarmcloud-hls/dist/hls.min');
// 或者引入P2pEngineHls
var P2pEngineHls = require('swarmcloud-hls/dist/p2p-engine.min');

或者使用ES6的 import 語法:

import Hls from 'swarmcloud-hls/dist/hls.min';
// 或者引入P2pEngineHls
import P2pEngineHls from 'swarmcloud-hls/dist/p2p-engine.min';

# 使用插件

# Bundled SDK(已經整合了 P2P 插件的Hls.js庫)

在 hlsjsConfig 對象字面量中加入 p2pConfig 字段,然後在實例化hls.js時把 hlsjsConfig 作為參數傳入。

var p2pConfig = {
    logLevel: 'debug',
    // Other p2pConfig options if applicable
}
if(Hls.isSupported()) {
    var hlsjsConfig = {
        debug: true,
        // Other hlsjsConfig options provided by hls.js
        p2pConfig
    };
    // Hls constructor is overriden by included bundle
    var hls = new Hls(hlsjsConfig);
    // Use hls just like the usual hls.js ...
    hls.loadSource(contentUrl);
    hls.attachMedia(video);
} else {
    // use ServiceWorker based p2p engine if hls.js is not supported
    new Hls.P2pEngine(p2pConfig);     // equal to  new Hls.P2pEngine.ServiceWorkerEngine(p2pConfig);
}

# Wrapper(沒有打包 Hls.js 的插件,需要自己引入 Hls.js)

實例化hls.js並將 hlsjsConfig 作為參數傳入。然後實例化 P2pEngineHls 並將 p2pConfig 作為參數傳入。調用hls.js的 loadSource 和 attachMedia 方法。

var hlsjsConfig = {
    maxBufferSize: 0,       // Highly recommended setting in live mode
    maxBufferLength: 10,     // Highly recommended setting in live mode
    liveSyncDurationCount: 10,   // Highly recommended setting in live mode
};
var p2pConfig = {
    // Other p2pConfig options if applicable
}
if (P2pEngineHls.isMSESupported()) {
    var hls = new Hls(hlsjsConfig);
    p2pConfig.hlsjsInstance = hls;        // set hlsjs instance to SDK
    // Use hls just like your usual hls.js…
    hls.loadSource(contentUrl);
    hls.attachMedia(video);
    hls.on(Hls.Events.MANIFEST_PARSED,function() {
        video.play();
    });
}
new P2pEngineHls(p2pConfig)

# 引擎的切換原理

SDK在實例化時,會優先嘗試使用基於 hls.js 的引擎(以下簡稱MSE引擎),如果不成功則嘗試基於 ServiceWorker 的引擎(以下簡稱SW引擎),具體如下:

  • 如果瀏覽器不支持 WebRTC Datachannel,則不啟用任何P2P引擎
  • 如果瀏覽器支持 MSE 並且 傳入了 hlsjsInstance 並且沒有設置 proxyOnly,則嘗試啟用MSE引擎
  • 否則在支持 ServiceWorker 的情況下啟用SW引擎

# 播放器集成

參考播放器示例。

# Electron

本插件同樣支持 Electron (opens new window) 平臺,只需求將從管理面板獲取的token等信息傳進config中即可,如下所示:

var hlsjsConfig = {
    p2pConfig: {
        token: YOUR_TOKEN,
        appName: YOUR_APP_NAME,    // 應用的名稱
        appId: YOUR_APP_ID,        // 需要與管理面板輸入的保持一致
        // Other p2pConfig options if applicable
    }
};

參考如何獲取token