Skip to content

P2P設定

Android, iOS のP2P設定部分と型定義を参照してください

P2pEngine

P2pEngineをインスタンス化し、グローバルなシングルトンを取得します:

dart
// 初期化
FlutterP2pEngine.init(
  token, // replace with your token
  config: P2pConfig.byDefault()
);

パラメータの説明:

パラメータ必須説明
tokenStringはいSwarmCloudが発行したtoken。
configP2pConfigはいカスタム設定。

ソースの切り替え

プレイヤーが新しい再生アドレスに切り替える際は、新しい再生アドレス(m3u8)を parseStreamURL に渡すだけで、新しいローカル再生アドレスを取得できます:

dart
String parsedUrl = await FlutterP2pEngine.parseStreamURL(url);

FlutterP2pEngine API

dart
/// 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にコールバックすることを推奨します。

dart
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の構築方法は以下の通りです:

dart
// urlに基づいてvideoIdを構築
String videoId = extractVideoIdFromUrl(originalUrl);     // extractVideoIdFromUrl は自身で定義する必要があり、url内の動画IDを抽出して結果として返すことができます
String url = await FlutterP2pEngine.parseStreamURL(originalUrl, videoId);

WARNING

他のプラットフォームと相互接続する場合は、両者が同じ token と channelId を持つことを必ず確認してください。

HTTPリクエストヘッダーの設定

不正リンク防止や統計上の必要性から、一部のHTTPリクエストに refererUser-Agent などのヘッダー情報を追加する必要がある場合、httpHeadersForHls で設定できます:

dart
FlutterP2pEngine.setHttpHeadersForHls({
    "referer": "XXX",
    "User-Agent": "XXX",
});

粤ICP备18075581号