Skip to content

P2PEngineMedia のインスタンス化

var engine = new P2PEngineMedia(p2pConfig);

P2PEngineMedia インスタンスを作成します。

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

フィールドデフォルト値説明
logLevelstring|boolean'error'logのレベル。warn、error、noneに分かれます。trueを設定するとwarn相当、falseを設定するとnone相当になります。
tokenstringundefinedtokenは管理パネルでの複数ドメインのデータ集計表示に使用します。また、channelIdをカスタマイズする場合もtokenの設定が必要です。
trackerZonestring'eu'trackerサーバーアドレスの国コード。'cn'、'eu'、'hk'、'us' に分かれます。
diskCacheLimitObject{"pc": 400 * 1024 * 1024, "mobile": 100 * 1024 * 1024}p2pキャッシュの最大データ量。PCとmobileに分かれます。
pieceLengthnumber512 * 1024各セグメントのサイズ(単位:Byte)。同じpieceLengthのノード同士でのみ接続できるため、ビットレートに応じて調整することを推奨します。
mediaElemHTMLMediaElement|stringundefinedvideoまたはaudioタグのidまたはElementオブジェクトを指定します。デフォルトはdocument内の最初のvideo/audio要素です。
p2pEnabledbooleantrueP2Pを有効にするかどうか。
webRTCConfigObject{}stunとdatachannelを設定するための辞書オブジェクト
tagstring''ユーザー定義のカスタムラベル。
swFilestring'./sw.js'ServiceWorkerファイル名とパス。
swScopestring'./'ServiceWorkerのデフォルトのスコープは現在のディレクトリとすべてのサブディレクトリです。そのため、sw.jsをサイトのルートディレクトリに置いた場合、サイトへのすべてのリクエストがServiceWorkerの制御範囲に入ります。
diskCacheLimitObject{"pc": 1500 * 1024 * 1024, "mobile": 1000 * 1024 * 1024}ディスクキャッシュの最大データ量。PCとmobileに分かれます。
minBufferCountnumber0video要素の残りバッファpiece数がこの値を下回った場合、強制的にHTTPダウンロードに切り替わります。
startFromSegmentOffsetnumber3trackerサービスへのリクエストを開始するsegmentオフセット。

P2PEngineMedia API

P2PEngineMedia.version (static)

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

P2PEngineMedia.protocolVersion (static)

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

P2PEngineMedia.isSupported() (static)

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

P2PEngineMedia.isWebRTCSupported() (static)

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

P2PEngineMedia.isSeviceWorkerSupported() (static)

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

engine.getProxiedUrl(originalURL)

ローカルプロキシのアドレスを取得します。引数は元のアドレス文字列で、戻り値はローカルプロキシアドレスのPromiseです。

engine.enableP2P()

p2p を開始します。

engine.disableP2P()

p2p を停止し、リソースを解放します。

engine.restartP2p()

p2p を再起動します。

P2PEngineMedia のイベント

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です。

MediaProxy.version (static)

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

高度な使い方

動的なMP4/MP3パスの問題を解決する

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

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

WARNING

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

粤ICP备18075581号