Skip to content

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

var engine = new P2PEngineFile(url, p2pConfig);

新しい P2PEngineFile インスタンスを作成します。url はファイルダウンロードのアドレスです。p2pConfig を指定した場合、対応するデフォルト値は上書きされます。

フィールドデフォルト値説明
logLevelstring|boolean'error'logのレベル。warn、error、noneに分かれます。trueを設定するとwarn相当、falseを設定するとnone相当になります。
tokenstringundefinedtokenは管理パネルでの複数ドメインのデータ集計表示に使用します。また、channelIdをカスタマイズする場合もtokenの設定が必要です。
trackerZonestring'eu'trackerサーバーアドレスの国コード。'cn'、'eu'、'hk'、'us' に分かれます。
p2pEnabledbooleantrueP2Pを有効にするかどうか。
webRTCConfigObject{}stunとdatachannelを設定するための辞書オブジェクト
pieceLengthnumber1024 * 1024各セグメントのサイズ(単位:Byte)。同じpieceLengthのノード同士でのみ接続できます。
httpMaxRetrysnumber2HTTPで特定のセグメントをダウンロードする際の最大リトライ回数。
mitmstring'https://cdnbye.github.io/file-p2p-engine/demo/mitm.html'ServiceWorkerをインストールし、ブラウザのデフォルトのファイルダウンロード動作をトリガーするためのiFrameアドレス。デフォルトはgithubでホスティングされています。
diskCacheLimitObject{"pc": 1500 * 1024 * 1024, "mobile": 1000 * 1024 * 1024}ディスクキャッシュの最大データ量。PCとmobileに分かれます。

P2PEngineFile API

P2PEngineFile.version (static)

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

P2PEngineFile.protocolVersion (static)

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

P2PEngineFile.isSupported() (static method)

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

engine.start()

ファイルのダウンロードを開始します。

engine.pause()

ファイルのダウンロードを一時停止します。

engine.resume()

ファイルのダウンロードを再開します。

engine.stop()

ファイルのダウンロードを停止し、P2Pを終了してengineを破棄し、メモリを解放します。

engine.destroy()

ファイルのダウンロードを停止し、P2Pを終了してengineを破棄し、メモリを解放します。

engine.isSaveByStreamSupported

ブラウザがServiceWorkerベースのストリーミングダウンロードに対応しているか確認します。

engine.saveByServiceWorkerStream(filename)

ブラウザのデフォルトのファイルダウンロード動作をトリガーします。

P2PEngineFile のイベント

engine.on('metadata', function (source) {})

ファイルのメタ情報を取得します。内容は以下の通りです:
source.getUrl():ファイルダウンロードアドレス
source.getMime():ファイルの MimeType
source.getFileLength():ファイルサイズ

engine.on('progress', function (ratio) {})

ファイルのダウンロード進捗。

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

ファイルのダウンロードが失敗しました。このコールバックを監視することで通常のダウンロードモードにフォールバックできます。

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

平均ダウンロード速度(byte/s)。

engine.on('finished', function (file) {})

ファイルのダウンロード完了後にコールバックされます。fileはファイルを操作するためのオブジェクトで、以下を含みます:
file.save(fileName):ファイルをローカルに保存します。fileNameは保存するファイル名です
file.getBlobURL():BlobURLを取得します
file.revokeBlobURL():BlobURLへの参照を解除し、メモリを解放します

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) {
        // 接続に成功したノードの情報を取得
    }
}

高度な使い方

動的なファイルパスの問題を解決する

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

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

粤ICP备18075581号