SwarmCloud

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

Choose mode

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

    • HLS
    • dash.js
    • Shaka-Player
    • MP4
    • 大文件下載
  • 安卓/安卓TV SDK

    • v2 (Java)
    • v3 (Kotlin, beta)
  • iOS/tvOS/macOS SDK
定價
關於我們
生態
實時地球
管理面板
GitHub (opens new window)
language
  • English
  • 中文

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

    • HLS
    • dash.js
    • Shaka-Player
    • MP4
    • 大文件下載
  • 安卓/安卓TV SDK

    • v2 (Java)
    • v3 (Kotlin, beta)
  • iOS/tvOS/macOS SDK
定價
關於我們
生態
實時地球
管理面板
GitHub (opens new window)
language
  • English
  • 中文
  • 快速入門
  • 常見問題
    • 基礎
    • Web SDK
    • 客戶端SDK
  • Tracker服務
  • 信令服務
  • P2P優化
  • 控製臺

  • HLS Double Engine

  • 安卓 SDK v2

  • 安卓 SDK v3

  • iOS/tvOS/macOS SDK

  • Flutter SDK

  • Hls.js SDK

  • HLS via ServiceWorker

  • Shaka-Player SDK

  • Web MP4 SDK

  • Dash.js SDK

  • 大文件下載 SDK

  • 更多

常見問題

vuePress-theme-reco SwarmCloud    2018 - 2022

常見問題


SwarmCloud

# 基礎

# P2P服務停止後會影響視頻的正常播放嗎?

不會。視頻仍會正常播放,只是沒有P2P加速效果。

# SwarmCloud的P2P服務安全嗎?

SwarmCloud采用的WebRTC data channel技術,是基於SCTP協議和DTLS加密的,無需擔心數據傳輸的安全問題。另外,與後臺服務器的通信(包括tracker和信令服務器)是基於安全的HTTPS和WSS。隱私方面,SwarmCloud不會在服務器緩存任何視頻內容相關的信息,視頻地址也做了加密處理。

# 支援加了防盜鏈或者加密的視頻地址嗎

支援的,請提供加密原理以及測試地址給我們的技術支援團隊。

# 集成了SwarmCloud後會造成直播延遲嗎?

不會的,由於前幾個切片從CDN拉取,因此不會給起播帶來任何延遲。然而低延遲直播可能會使P2P效果下降,建議 HLS / Dash 的 playlist 遵循以下配置:
切片時長: 至少3秒
Playlist包含的切片數: 至少6個

# 使用SwarmCloud的P2P服務需要付費嗎?

目前SwarmCloud已經開始商業化,但同時對小型流媒體網站仍提供免費服務。收費模式如下:

  • 只對在控製臺(https://www.cdnbye.com/oms) 綁定的域名提供P2P服務
  • 每個賬號每日免費贈送5GB P2P流量,次日重置
  • 每日在控製臺完成簽到後再贈送20GB P2P流量,次日清零
  • 超出免費額度後停止P2P服務,如果繼續使用,需要購買流量包,購買的流量包額度越大,價格越劃算,且可以使用更多P2P流量,直到剩余可用流量為零。

# 如何購買流量包?

登入 https://www.cdnbye.com/oms,點擊左邊側滑欄的 購買流量包 ,目前支援支付寶和Paypal兩種付款方式,其中支付寶以人民幣付款,Paypal以美元付款。

# 如果綁定了多個域名/AppId,購買流量包後怎麽扣費呢?

如果您在同一個賬號同時綁定了多個域名/APP,則開啟P2P的所有域名/APP會共享流量包。您可以在控製臺的 P2P配置 關閉某個域名的P2P服務從而節省流量包消耗。

# 購買了包月套餐後每日額度不夠用怎麽辦?

建議再買個流量包作為補充,系統會先扣除包月套餐流量,扣完再扣除流量包流量。

# 如何查看集成後有沒有效果?

  • 確保已經打開2個以上播放同一個m3u8的客戶端
  • 確保按文檔提供的步驟集成,並且SDK沒有任何報錯信息
  • 打開控製臺切換對應域名即可查看p2p流量
  • 每個平臺的SDK都會提供API來監聽p2p流量等統計信息,請參考對應的文檔說明

# 對接入P2P服務的網站/APP有什麽要求嗎?

SwarmCloud不對色情等非法內容提供P2P服務,請確保您的網站/APP符合法律規範。服務於國內的域名必須已備案。

# SwarmCloud會不會造成用戶視頻播放延遲?

不會。首先,視頻的首片數據總是從CDN下載的,因而不會造成首屏延遲。其次,如果在超時時間內無法從其他節點獲取數據,那麽內置的調度算法會及時切到CDN下載,因此本P2P技術不會帶來任何額外的延遲。

# 官方的信令服務好像高峰期不太穩定?

建議不使用默認的信令服務,可以自行部署信令服務或者用第三方免費信令服務,請參考這裏。

# 使用過程中出現異常如何反饋?

如果是Web端插件的異常請在p2p配置中開啟log並截圖瀏覽器console出錯信息發送到service@cdnbye.com,或者在QQ群裏反饋。如果是原生SDK出現異常請在p2p配置中開啟log並保存日誌文件發送到官方郵箱,建議在APP中集成Bugly (opens new window),有助於收集crash日誌並上傳到雲端。

# 如何在內網使用SwarmCloud?

使用SwarmCloud的p2p服務需要調用兩個雲端服務,一個是Tracker調度服務,另一個是信令服務。

# 信令服務

可以直接在內網服務器上部署信令服務 (opens new window),信令不需要與外網通信。

# Tracker服務

Tracker需要通過能與外網通信的服務器進行轉發,操作步驟如下:

  • 在控製臺綁定網站域名
  • 聯系SwarmCloud技術人員對轉發域名進行授權
  • 在服務器配置nginx內網轉發,在conf.d增加tracker.conf,示例如下:
    server {
        listen 80;
        listen 443 ssl;
        server_name YOUR_TRACKER_DOMAIN;          # 配置內網轉發域名
        access_log /root/log/access.log;
        error_log /root/log/error.log;
        # ssl on;
        ssl_certificate  tracker.pem;    # 證書路徑
        ssl_certificate_key tracker.key;  # 證書秘鑰路徑
        location / {
            proxy_pass https://tracker.cdnbye.com;      # 轉發到SwarmCloud的tracker服務
            proxy_set_header  Host  $host;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header  X-Forwarded-For $remote_addr;  
        }
    }
    
    同時在nginx.conf添加如下配置:
    worker_rlimit_nofile 1000000;   # 配置Nginx worker進程最大打開文件數
    events {
        worker_connections 102400;  # 單個進程允許的客戶端最大連接數
    }
    
    • 執行重新加載 Nginx
      sudo nginx -s reload
      
    • 確認公司防火墻對 Nginx 服務器 IP 及端口限製訪問解除
    • 修改前端代碼,替換Tracker域名為轉發域名
      p2pConfig: {
        announce: 'http://your_traclker.com/v1',
      }
      

# SwarmCloud的效果如何?如果使用過程效果不如預期,應該怎麽調整?

如果您使用過程中無法達到預期效果,請參照P2P優化對各參數進行調整,或者聯系本平臺獲取技術支援。

# SwarmCloud的P2P技術會影響DRM(數字版權管理)嗎?

不會。只有在用戶獲得發布者的服務器授權後才會激活P2P傳輸。而且,流秘鑰是不會在P2P網絡中 傳輸的。P2P網絡中傳輸的ts文件和用戶從CDN下載的完全一樣。另外,播放的內容不會上傳或者緩存在我們的服務器中。

# 平時在線人數不多有必要用P2P嗎?

有。P2P的獨特優勢是帶寬"削峰",平時在線人數不多的時候效果不明顯,一旦在觀看高峰期帶寬突然大幅增長,隨著在線人數增多P2P分享率指數式上升,可有效降低帶寬峰值,避免由於帶寬不足導致用戶播放卡頓等問題。

# Web SDK

# Web SDK的原理是什麽?

SwarmCloud采用WebRTC data channel技術和BT算法來實現直播和點播的P2P加速。通過內置的調度算法, 在P2P和CDN之間進行無縫切換,從而在不影響用戶播放體驗的前提下最大化P2P率。hlsjs-p2p-engine 是SwarmCloud為播放HLS流而開發的hls.js插件。目前,SwarmCloud已經支援大部分的HTML5播放器,包括 Hls.js, JWPlayer, Video.js, Clappr, Flowplayer和TCPlayer等。

# iOS瀏覽器是否不支援P2P?

由於iOS的瀏覽器內核不支援MSE(Media Source Extension),因此基於hls.js的SDK不支援iOS瀏覽器。我們已推出基於ServiceWorker的SDK,建議兩個SDK同時使用從而使所有瀏覽器均支援P2P。

# 如果用戶的瀏覽器不支援WebRTC,會怎麼樣?

在這種情況下,插件不起任何作用,用戶和往常一樣采用HTTP方式下載。

# 當SDK新版本發佈時,我需要手動更新嗎?

如果您用了我們提供的CDN來引入SDK,則不需要手動更新。

# 我的播放器是在 iframe 裡面的要怎麼集成?

在這種情況下,您需要在 iframe 的腳本裡集成SDK,因為 Javascript 無法從 iframe 外部訪問 iframe 裡的內容。

# 目前支援的移動端瀏覽器有哪些?

  • 谷歌瀏覽器
  • 火狐瀏覽器
  • 歐朋瀏覽器
  • 微信內置瀏覽器
  • QQ內置瀏覽器
  • 獵豹瀏覽器
  • 搜狗瀏覽器
  • 百度瀏覽器
  • 360極速瀏覽器
  • 2345瀏覽器
  • 遨遊5瀏覽器
  • Via瀏覽器
  • X瀏覽器
  • 先鋒瀏覽器
    註:以上所列出均是安卓平臺,目前iOS平臺還未支援,不斷完善中...

# 某些移動端瀏覽器無法正常播放?

P2P需要瀏覽器同時支援MSE(Media Source Extension)和WebRTC才能使用,可以通過 SwarmCloud 提供的API進行檢測,如果不支援則用原生播放器進行播放,示例如下:

if (Hls.isSupported() && Hls.WEBRTC_SUPPORT) {
    // 采用SwarmCloud播放
} else {
    // 采用video標簽播放
}

# Web端插件P2P無效問題排查步驟

  • 同時打開2個以上處於同一局域網的網頁播放同一個視頻
  • 直播流建議按照P2P優化指南進行配置
  • 視頻播放後打開網頁調試窗口查看debug信息
  • 如果有紅色的報錯信息一般是代碼邏輯問題,請根據提示修改
  • 如果顯示類似 "CDNBye 0.X.X is deprecated, please update to latest version(0.X.X已停止支援,請更新至最新版本)" 說明版本已過期,請升級至最新版
  • 如果顯示其它信息,請根據提示操作,有以下五種可能:
    • 域名沒有綁定,註意SwarmCloud後臺是根據HTTP請求的Origin字段來獲取域名的(如果使用iFrame該域名可能和網站域名不一致),請在後臺綁定正確的域名
    • 流量已經用完,請登入控製臺 (opens new window)並切換到對應域名查看流量使用情況
    • 在控製臺的 P2P配置 中關閉了P2P服務,重新開啟即可
    • 在控製臺的 P2P配置 中激活比率調小了,重新調至100即可
    • 域名被加入黑名單,登入控製臺點擊 網站管理 即可確認
  • 如果沒有顯示任何異常,請確保m3u8路徑不會動態變化,否則請構造一個相同的ChannelId
  • 如果以上步驟還不能解決問題,請聯系技術客服

# 客戶端SDK

# 安卓SDK可以用於機頂盒嗎?

當然可以,只要是安卓4.4以上系統的機頂盒都支援。經過實測,exoplayer的兼容性最好,推薦采用。

# SDK除了 P2P 還有其他附加功能嗎?

有的。SDK還具備智能緩存能力,用於避免文件重復下載問題,從而有效節省帶寬消耗,而且本功能是完全免費的。

# 客戶端SDK P2P無效問題排查步驟

  • 請先確保在真機上調試
  • 同時打開2個處於同一局域網的設備
  • 直播流建議按照P2P優化指南進行配置
  • iOS
    • 在控製臺搜索關鍵字"P2P warning",根據對應的警告信息進行配置
    • 如果仍然無法排查問題,請先將日誌打印功能打開並保存為文件,示例代碼如下:
    let config = SWCP2pConfig.defaultConfiguration()
    config.logLevel = SWCLogLevel.debug
    config.logPersistent = true
    SWCP2pEngine.sharedInstance().start(token: YOUR_TOKEN, p2pConfig: config)
    
    SWCP2pConfig *config = [SWCP2pConfig defaultConfiguration];
    config.logLevel = CBLogLevelDebug;
    config.logPersistent = YES;
    [[SWCP2pEngine sharedInstance] startWithToken:YOUR_TOKEN andP2pConfig:config];
    
    • 在 Library/Caches/Logs 找到日誌文件並發送給SwarmCloud技術人員
  • 安卓
    • 在Logcat搜索關鍵字"P2P warning",根據對應的警告信息進行配置
    • 如果仍然無法排查問題,請先將日誌級別調整為Debug並保存為文件,示例代碼如下:
    P2pConfig config = new P2pConfig.Builder().logEnabled(true).logLevel(LogLevel.DEBUG).logPersistent(true).build();
    P2pEngine.init(this, YOUR_TOKEN, config);
    
    val config = P2pConfig.Builder().logEnabled(true).logLevel(LogLevel.DEBUG).logPersistent(true).build()
    P2pEngine.init(this, YOUR_TOKEN, config)
    
    • 在外部存儲(Environment.getExternalStorageDirectory() -> /Android/data/)中找到logger/logs_0.csv,如果找不到請嘗試查看路徑"/storage/emulated/0",然後將保存完整日誌的csv文件發送給SwarmCloud技術人員

# 解決Exoplayer無法播放問題

Exoplayer默認不支援跨協議重定向 (opens new window),因此需要在初始化時設置 allowCrossProtocolRedirects=true,如以下示例:

DataSource.Factory dataSourceFactory =
    new DefaultHttpDataSourceFactory(
            Util.getUserAgent(this, "p2p-engine"),
            DefaultHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS,
            DefaultHttpDataSource.DEFAULT_READ_TIMEOUT_MILLIS,
            true   /* allowCrossProtocolRedirects */
    );

具體用法可以參考官方demo (opens new window)。

# 解決安卓機頂盒OOM問題

配置比較低的機頂盒容易出現OOM,可以通過配置提高堆內存大小,在 app/src/main 目錄中的 AndroidManifest.xml 的 <application> 標簽中直接插入:

<application
  ...
  android:largeHeap=「true」
  ...
    />

# 如何減小APK體積

由於依賴了第三方庫WebRTC,使APK體積增大了不少。如果對APK體積比較敏感,可以通過以下2種方案壓縮體積:

  • abiFilters
    編譯系統的默認行為是將每個 ABI 的二進製文件包括在單個 APK(也稱為胖 APK)內。與僅包含單個 ABI 的二進製文件的 APK 相比,胖 APK 要大得多;要權衡的是兼容性更廣,但 APK 更大。要限製應用支援的 ABI 集,請使用 abiFilters (opens new window)。
android {
    ...
    defaultConfig {
        ...
        ndk {
            abiFilters "armeabi-v7a", "armeabi"
        }
    }
}
  • APK 拆分
    谷歌建議針對不同CPU架構生成對應的APK (opens new window):
android {
  ...
  splits {
    // 根據ABI配置生成多APK
    abi {
      // 是否根據不同ABI生成APK
      enable true
      // 默認情況下所有ABI都包含了,因此需要調用reset()並且指定我們需要的CPU架構
      // 重置Gradle生成APK的ABI列表
      reset()
      // 指定CPU架構來生成我們需要的APK
      include "armeabi-v7a", "arm64-v8a"
      // 設置不再生成一個包含所有ABI的APK
      universalApk false
    }
  }
}

# 如何獲取安卓應用簽名

可以使用 keytool 來獲取APP的應用簽名

keytool -v -list -keystore path/to/my-signing-key.keystore

在輸出的證書指紋中(MD5, SHA1, SHA256),SHA1對應的字符串即需要的應用簽名。