Skip to content

P2P設定

參考interface.uts

P2pEngine

實例化P2pEngine,取得一個全域單例:

javascript
//初始化
function initP2p (token:string,configOptions:ConfigOptions|null=null):void

參數說明:

參數型別是否必要說明
tokenstringCDNBye分配的token。
configConfigOptions自訂設定。

取得P2P位址或切換來源

當播放或切換到新的播放位址時,只需要將新的播放位址傳給外掛程式,從而取得新的本地播放位址:

javascript
function  getP2pUrl(url : string, videoId:string|null=null, mimeType:string|null=null) : string

參數說明:

參數型別是否必要說明
urlstring未經過轉換的原始播放位址
videoIdstring傳入此參數將使用videoId建構channelId,其他端需要保持一致
mimeTypestring傳用於無「.m3u8」或「.mpd」副檔名的url,傳入字串「m3u8」或「mpd」

P2pEngine API

javascript

//目前外掛程式的版本號。
function getP2pEngineVersion():string

//是否已與CDNBye後台建立連線。
function p2pIsConnected():boolean

//立即停止P2P加速並釋放資源,一般只需要在退出APP的時候呼叫即可。SDK採用「延遲釋放」的策略,只有在重新啟動p2p的時候才釋放資源。對於效能較差的裝置起播耗時可能比較明顯,建議在影片播放之前提前呼叫 engine.stopP2p() 。
function stopP2p():void

//重新啟動P2P加速服務,一般不需要呼叫。
function restartP2p():boolean

//取得對等連線的id。
function peerId():string

//動態設定請求ts和m3u8時的HTTP請求標頭。
function setHttpHeadersForHls(headers: Map<String, String>):void

//動態設定請求Dash檔案時的HTTP請求標頭。僅Android
function setHttpHeadersForDash(headers: Map<String, String>):void

//執行時動態關閉P2P,在播放下一個媒體檔案時才生效。
function disableP2p():void

//執行時動態開啟P2P,在播放下一個媒體檔案時才生效。
function enableP2p():void

//停止P2P並關閉代理伺服器。
function shutdownP2p():void

P2P 統計

typescript
import { onP2pStats, StatsObject } from "@/uni_modules/cdnbye-swarmcloud";
onReady() {
    onP2pStats((stats: StatsObject) => {
        console.log(stats.serverConnected)
        console.log(stats.httpDownloaded)
        console.log(stats.p2pDownloaded)
        console.log(stats.p2pUploaded)
        console.log(stats.peers)
    })
}

WARNING

下載和上傳資料量的單位是 KB。

解決動態 m3u8 路徑問題

某些串流媒體提供商的 m3u8 是動態產生的,不同節點的 m3u8 位址不一樣,例如 example.com/clientId1/streamId.m3u8 和 example.com/clientId2/streamId.m3u8, 而本外掛程式預設使用 m3u8 位址(去掉查詢參數)作為 channelId。這時候就要建構一個共同的 chanelId,使實際觀看同一直播/影片的節點處在相同頻道中。建構 channelId 方法如下:

typescript
// 根據url建構videoId
const videoId = extractVideoIdFromUrl(originalUrl);     // extractVideoIdFromUrl 需要自己定義,可以擷取url中的影片ID作為結果回傳
const url = getP2pUrl(originalUrl, videoId);

WARNING

如果要與其他平台互通,則必須確保兩者擁有相同的 token 和 channelId 。

設定 HTTP 請求標頭

出於防盜鏈或統計的需求,有些 HTTP 請求需要加上 refererUser-Agent 等標頭資訊,可以透過 httpHeadersForHls 進行設定:

typescript
import { ConfigOptions,initP2p,getP2pUrl,getP2pEngineVersion,p2pIsConnected,stopP2p, onP2pStats, StatsObject, setHttpHeadersForHls } from "@/uni_modules/cdnbye-swarmcloud";
const headers = new Map<string, string>();
headers.set('referer' ,'xxx');
headers.set('User-Agent' ,'xxx');
setHttpHeadersForHls(headers);
const url = getP2pUrl(originalUrl);

粤ICP备18075581号