P2P設定
Android, iOS のP2P設定部分と型定義を参照してください
P2pEngine
P2pEngineをインスタンス化し、グローバルなシングルトンを取得します:
// 初期化
FlutterP2pEngine.init(
token, // replace with your token
config: P2pConfig.byDefault()
);パラメータの説明:
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
| token | String | はい | SwarmCloudが発行したtoken。 |
| config | P2pConfig | はい | カスタム設定。 |
ソースの切り替え
プレイヤーが新しい再生アドレスに切り替える際は、新しい再生アドレス(m3u8)を parseStreamURL に渡すだけで、新しいローカル再生アドレスを取得できます:
String parsedUrl = await FlutterP2pEngine.parseStreamURL(url);FlutterP2pEngine API
/// SDKのバージョン番号
static Future<String> getSDKVersion()
/// P2pEngineをインスタンス化し、グローバルなシングルトンを取得します。
static Future<int> init(
token, {
P2pConfig config,
void Function(Map<String, dynamic>)? infoListener,
})
/// 元の再生アドレス(m3u8)をローカルプロキシサーバーのアドレスに変換します。同時にvideoIdを渡してchannelIdの構築に使用します。
static Future<String> parseStreamURL(
String sourceUrl, [
String videoId,
])
/// tsおよびm3u8をリクエストする際のHTTPリクエストヘッダーを動的に設定します。
static Future setHttpHeadersForHls(Map<String, String>? headers)
/// Dashファイルをリクエストする際のHTTPリクエストヘッダーを動的に設定します。
static Future setHttpHeadersForDash(Map<String, String>? headers)
/// P2P Engineの接続状態を取得します
static Future<bool> isConnected()
/// P2Pアクセラレーションサービスを再起動します。通常は呼び出す必要はありません。
static Future restartP2p()
/// P2Pアクセラレーションを停止し、リソースを解放します。通常は呼び出す必要はありません。SDKは「遅延解放」戦略を採用しており、p2pを再起動する際にのみリソースが解放されます。性能の低いデバイスでは再生開始までの時間が顕著に長くなる可能性があるため、動画再生前に事前に engine.stopP2p() を呼び出すことを推奨します。
static Future stopP2p()
/// P2P EngineのpeerIDを取得します
static Future<String> getPeerId()P2P統計
exampleを参照してください。
WARNING
ダウンロード・アップロードデータ量の単位はKBです。
プレイヤー情報のコールバック
ライブ配信モードでは、P2P効果を高めて再生の流暢さを向上させるために、bufferedDurationGenerator を通じて、現在の再生時刻からバッファ先端までの時間間隔をp2p engineにコールバックすることを推奨します。
FlutterP2pEngine.init(
token, // replace with your token
bufferedDurationGeneratorEnable: true,
);
String parsedUrl = await FlutterP2pEngine.parseStreamURL(
url,
bufferedDurationGenerator: () {
return vpController!.value.buffered.last.end - vpController!.value.position;
},
);動的なm3u8パスの問題を解決する
一部のストリーミング配信事業者のm3u8は動的に生成されており、ノードごとにm3u8のアドレスが異なります。例えばexample.com/clientId1/streamId.m3u8とexample.com/clientId2/streamId.m3u8のようになります。本プラグインはデフォルトでm3u8のアドレス(クエリパラメータを除いたもの)をchannelIdとして使用します。このような場合、実際に同じライブ配信/動画を視聴しているノードを同じチャンネルに配置するために、共通のchannelIdを構築する必要があります。channelIdの構築方法は以下の通りです:
// urlに基づいてvideoIdを構築
String videoId = extractVideoIdFromUrl(originalUrl); // extractVideoIdFromUrl は自身で定義する必要があり、url内の動画IDを抽出して結果として返すことができます
String url = await FlutterP2pEngine.parseStreamURL(originalUrl, videoId);WARNING
他のプラットフォームと相互接続する場合は、両者が同じ token と channelId を持つことを必ず確認してください。
HTTPリクエストヘッダーの設定
不正リンク防止や統計上の必要性から、一部のHTTPリクエストに referer や User-Agent などのヘッダー情報を追加する必要がある場合、httpHeadersForHls で設定できます:
FlutterP2pEngine.setHttpHeadersForHls({
"referer": "XXX",
"User-Agent": "XXX",
});