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服务器地址的国家代号,分为'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": 2500 * 1024 * 1024, "mobile": 1500 * 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) {
        // 获取成功连接的节点的信息
    }
}
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
}
// 必须先在 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号