实例化 P2PEngineMedia 
var engine = new P2PEngineMedia(p2pConfig); 
创建一个 P2PEngineMedia 实例。
如果指定了 p2pConfig ,那么对应的默认值将会被覆盖。
| 字段 | 类型 | 默认值 | 描述 | 
|---|---|---|---|
| logLevel | string|boolean | 'error' | log的等级,分为warn、error、none,设为true等于warn,设为false等于none。 | 
| token | string | undefined | token用于控制台多域名数据汇总展示,另外如果自定义channelId也需要设置token。 | 
| trackerZone | string | 'eu' | tracker服务器地址的国家代号,分为'cn'、'eu'、'hk'、'us'。 | 
| diskCacheLimit | Object | {"pc": 400 * 1024 * 1024, "mobile": 100 * 1024 * 1024} | p2p缓存的最大数据量,分为PC和mobile。 | 
| pieceLength | number | 512 * 1024 | 每个切片的大小(单位:Byte),相同pieceLength的节点才能互相连接,建议根据码率进行调整。 | 
| mediaElem | HTMLMediaElement|string | undefined | 指定video或audio标签的id或者Element对象,默认是document中的第一个video/audio元素。 | 
| p2pEnabled | boolean | true | 是否开启P2P。 | 
| webRTCConfig | Object | {} | 用于配置stun和datachannel的字典。 | 
| tag | string | '' | 用户自定义标签。 | 
| swFile | string | './sw.js' | ServiceWorker文件名和路径. | 
| swScope | string | './' | ServiceWorker默认作用域是当前目录以及所有子目录,因此如果将 sw.js 放在网站根目录,那么所有网站请求都在 ServiceWorker 控制范围内。 | 
| diskCacheLimit | Object | {"pc": 1500 * 1024 * 1024, "mobile": 1000 * 1024 * 1024} | 磁盘缓存的最大数据量,分为PC和mobile。 | 
| minBufferCount | number | 0 | video元素剩余缓冲piece数量小于这个数值将强制用HTTP下载。 | 
| startFromSegmentOffset | number | 3 | 开始请求tracker服务的segment偏移量。 | 
| showSlogan | boolean | false | 在浏览器控制台展示SwarmCloud标语。 | 
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信息 
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。这时候就要构造一个共同的chanelId,使实际观看同一直播/视频的节点处在相同频道中。
// 必须先在 p2pConfig 设置 token ,才能自定义 channelId ! 与其他平台互通需要构造相同的 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 。
