P2P 設定
參考 Android, iOS 的P2P設定部分和型別定義。
P2pEngine
實例化 P2pEngine,只需要呼叫一次:
typescript
import { initP2pEngine } from 'react-native-swarmcloud';
initP2pEngine(token, config)參數說明:
| 參數 | 型別 | 是否必要 | 說明 |
|---|---|---|---|
| token | string | 是 | SwarmCloud 分配的 token。 |
| config | P2pConfig | 是 | 自訂設定。 |
切換來源
當播放器切換到新的播放位址時,只需要將新的播放位址(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 請求需要加上 referer 或 User-Agent 等標頭資訊,可以透過 httpHeadersForHls 進行設定:
typescript
import { setHttpHeadersForHls } from 'react-native-swarmcloud';
setHttpHeadersForHls({
"referer": "XXX",
"User-Agent": "XXX",
});