Skip to content

インスタンス化とパラメータ設定

var engine = new P2PEngineVHS(player, {p2pConfig: [opts]}, videojs = window.videojs);

新しい P2PEngineVHS インスタンスを作成します。playervideo.js のインスタンスです。

opts を指定した場合、対応するデフォルト値は上書きされます。

フィールドデフォルト値説明
logLevelstring|boolean'error'logのレベル。warn、error、noneに分かれます。trueを設定するとwarn相当、falseを設定するとnone相当になります。
tokenstringundefinedtokenは管理パネルでの複数ドメインのデータ集計表示に使用します。また、channelIdをカスタマイズする場合もtokenの設定が必要です。
trackerZonestring'eu'trackerサーバーアドレスの国コード。'cn'、'eu'、'hk'、'us' に分かれます。
memoryCacheLimitObject{"pc": 400 * 1024 * 1024, "mobile": 100 * 1024 * 1024}p2pキャッシュの最大データ量。PCとmobileに分かれます。
useDiskCachebooleantrueVODモードでIndexedDBを使ってデータを保存します。
diskCacheLimitObject{"pc": 1500 * 1024 * 1024, "mobile": 1000 * 1024 * 1024}ディスクキャッシュの最大データ量。PCとmobileに分かれます。
p2pEnabledbooleantrueP2Pを有効にするかどうか。
webRTCConfigObjectundefinedstunとdatachannelを設定するための辞書オブジェクト
useHttpRangebooleantrue可能な場合にHttp Rangeリクエストを使用して、p2pダウンロードのタイムアウトによる残りのデータを補完します。
sharePlaylistbooleanfalsem3u8ファイルのP2P伝送を許可するかどうか。
strictSegmentIdbooleanfalseデフォルトのシーケンス番号ベースの代わりに、urlベースのSegmentIdを使用します。
prefetchOnlybooleanfalseHLSモードでプリフェッチ方式のみでP2Pダウンロードを行います。
startFromSegmentOffsetnumber3trackerサービスへのリクエストを開始するsegmentオフセット。

P2PEngineVHS API

P2PEngineVHS.version (static)

P2PEngineVHSのバージョン番号を取得します。

P2PEngineVHS.protocolVersion (static)

P2Pプロトコルのバージョン番号を取得します。

P2PEngineVHS.isSupported() (static method)

現在のブラウザがWebRTC datachannelに対応しているかを判定します。

engine.enableP2P()

p2pが一時停止中または未開始の場合にp2pを開始します。

engine.disableP2P()

p2pを停止し、メモリを解放します。

engine.destroy()

p2pを停止し、engineを破棄してメモリを解放します。

P2PEngineVHS のイベント

engine.on('peerId', function (peerId) {})

サーバーからpeerIdを取得した際にこのイベントがコールバックされます。

engine.on('peers', function (peers) {})

新しいノードとのp2p接続が確立に成功した際にこのイベントがコールバックされます。

engine.on('stats', function (stats) {})

このコールバック関数からp2p情報を取得できます。内容は以下の通りです:
stats.totalHTTPDownloaded: HTTP(CDN)からダウンロードしたデータ量(単位KB)
stats.totalP2PDownloaded: P2Pからダウンロードしたデータ量(単位KB)
stats.totalP2PUploaded: P2Pでアップロードしたデータ量(単位KB)
stats.p2pDownloadSpeed: P2Pダウンロード速度(単位KB/s)

engine.on('serverConnected', function (connected) {})

websocketの接続・切断時にこのイベントがコールバックされます。

engine.on('exception', function (e) {})

このコールバック関数からSDKの例外情報を取得できます。内容は以下の通りです:
e.code: 例外の識別子(TRACKER_EXPT SIGNAL_EXPT)
e.message: 例外メッセージ
e.stack: 例外のスタック情報

p2pConfigを通じてp2p情報を取得する

javascript
p2pConfig: {
    getStats: function (totalP2PDownloaded, totalP2PUploaded, totalHTTPDownloaded, p2pDownloadSpeed) {
        // p2pダウンロード情報を取得
    },
    getPeerId: function (peerId) {
        // 自ノードのIdを取得
    },
    getPeersInfo: function (peers) {
        // 接続に成功したノードの情報を取得
    },
    onHttpDownloaded: function (traffic) {
        // httpダウンロードトラフィックを監視
    },
    onP2pDownloaded: function (traffic, speed) {
        // p2pダウンロードトラフィックと速度を監視
    },
    onP2pUploaded: function (traffic) {
        // p2pアップロードトラフィックを監視
    },
}

WARNING

ダウンロード・アップロードデータ量の単位はKB、ダウンロード速度の単位はKB/sです。

高度な使い方

動的なm3u8/mpdパスの問題を解決する

一部のストリーミング配信事業者のm3u8/mpdは動的に生成されており、ノードごとにmpdのアドレスが異なります。例えばexample.com/clientId1/streamId.mpdとexample.com/clientId2/streamId.mpdのようになります。 本プラグインはデフォルトでm3u8/mpdをchannelIdとして使用します。このような場合、実際に同じライブ配信/動画を視聴しているノードを同じチャンネルに配置するために、共通のchannelIdを構築する必要があります。

javascript
// channelId をカスタマイズするには、先に p2pConfig で token を設定する必要があります!
p2pConfig: {
    token: YOUR_TOKEN,
    channelId: function (mpdUrl) {
        const videoId = extractVideoIdFromUrl(mpdUrl);   // 差異のある部分を無視し、一貫したchannelIdを構築します。extractVideoIdFromUrlは自身で定義する必要があり、url内の動画IDを抽出して結果として返すことができます
        return videoId;
    }
    // channelId: VIDEO_ID       // for fixed channel id
}

動的なセグメントパスの問題を解決する

動的mpdパスの問題と同様に、同じセグメントファイルでもパスに差異がある場合があります。この場合、セグメントパスの差異部分を無視する必要があります。本プラグインはデフォルトでセグメントの絶対パス(url)を各セグメントファイルの識別子として使用するため、フック関数によって識別子を再構築する必要があります。以下のように設定できます:

javascript
p2pConfig: {
    /*
        segmentUrl: The url of segment
        range: The byte range of segment
     */
    segmentId: function (segmentUrl, range) {
        const segId = extractSegmentIdFromUrl(segmentUrl, range);
        return segId;
    }
}
javascript
p2pConfig: {
    /*
        streamId: The id of stream
        sn: The serial number of segment
        segmentUrl: The url of segment
        range: The byte range of segment
     */
    segmentId: function (streamId, sn, segmentUrl, range) {
        const tsId = extractSegmentIdFromUrl(segmentUrl);
        return tsId;
    }
}

粤ICP备18075581号