Skip to content

P2P 設定

參考 Android, iOS 的P2P設定部分和型別定義

P2pEngine

實例化 P2pEngine,只需要呼叫一次:

typescript
import { initP2pEngine } from 'react-native-swarmcloud';
initP2pEngine(token, config)

參數說明:

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

切換來源

當播放器切換到新的播放位址時,只需要將新的播放位址(m3u8)傳給 parseStreamURL,從而取得新的本地播放位址:

typescript
import { parseStreamURL } from 'react-native-swarmcloud';
const parsedUrl = parseStreamURL(url);

P2pEngine API

typescript
/// SDK的版本號
getSDKVersion(): string

/// 實例化P2pEngine
initP2pEngine(token: string, config: P2pConfig): Promise<void>

/// 將原始播放位址(m3u8)轉換成本地代理伺服器的位址,同時傳入videoId用以建構channelId。
parseStreamURL(url: string, videoId: string | undefined): string;

/// 動態設定請求ts和m3u8時的HTTP請求標頭。
setHttpHeadersForHls(headers: Object): void;

/// 取得P2P Engine的連線狀態
isConnected(): boolean;

/// 重新啟動P2P加速服務,一般不需要呼叫。
restartP2p(): Promise<void>;

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

/// 取得P2P Engine的peer ID
getPeerId(): string | undefined;

P2P 統計

請參考 example

WARNING

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

解決動態 m3u8 路徑問題

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

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

WARNING

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

設定 HTTP 請求標頭

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

typescript
import { setHttpHeadersForHls } from 'react-native-swarmcloud';
setHttpHeadersForHls({
    "referer": "XXX",
    "User-Agent": "XXX",
});

粤ICP备18075581号