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'。
p2pEnabledbooleantrue是否开启P2P。
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。这时候就要构造一个共同的chanelId,使实际下载同一文件的节点处在相同频道中。

javascript
// 必须先在 p2pConfig 设置 token ,才能自定义 channelId !
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号