P2P配置
P2pEngine
实例化P2pEngine,获得一个全局单例:
javascript
//初始化
function initP2p (token:string,configOptions:ConfigOptions|null=null):void
参数说明:
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
token | string | 是 | CDNBye分配的token。 |
config | ConfigOptions | 否 | 自定义配置。 |
获取P2P地址或者切换源
当播放或切换到新的播放地址时,只需要将新的播放地址传给插件,从而获取新的本地播放地址:
javascript
function getP2pUrl(url : string, videoId:string|null=null, mimeType:string|null=null) : string
参数说明:
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
url | string | 是 | 未经过转换的原始播放地址 |
videoId | string | 否 | 传入此参数将使用videoId构造channelId,其他端需要保持一致 |
mimeType | string | 否 | 传用于无".m3u8"或".mpd"后缀的url,传入字符串"m3u8"或"mpd" |
P2pEngine API
javascript
//当前插件的版本号。
function getP2pEngineVersion():string
//是否已与CDNBye后台建立连接。
function p2pIsConnected():boolean
//立即停止P2P加速并释放资源,一般只需要在退出APP的时候调用即可。SDK采用"懒释放"的策略,只有在重启p2p的时候才释放资源。对于性能较差的设备起播耗时可能比较明显,建议在视频播放之前提前调用 engine.stopP2p() 。
function stopP2p():void
//重启P2P加速服务,一般不需要调用。
function restartP2p():boolean
//获取对等连接的id。
function peerId():string
//动态设置请求ts和m3u8时的HTTP请求头。
function setHttpHeadersForHls(headers: Map<String, String>):void
//动态设置请求Dash文件时的HTTP请求头。仅安卓
function setHttpHeadersForDash(headers: Map<String, String>):void
//运行时动态关闭P2P,在播放下一个媒体文件时才生效。
function disableP2p():void
//运行时动态开启P2P,在播放下一个媒体文件时才生效。
function enableP2p():void
//停止P2P并关闭代理服务器。
function shutdownP2p():void
P2P 统计
typescript
import { onP2pStats, StatsObject } from "@/uni_modules/cdnbye-swarmcloud";
onReady() {
onP2pStats((stats: StatsObject) => {
console.log(stats.serverConnected)
console.log(stats.httpDownloaded)
console.log(stats.p2pDownloaded)
console.log(stats.p2pUploaded)
console.log(stats.peers)
})
}
WARNING
下载和上传数据量的单位是 KB。
解决动态 m3u8 路径问题
某些流媒体提供商的 m3u8 是动态生成的,不同节点的 m3u8 地址不一样,例如 example.com/clientId1/streamId.m3u8 和 example.com/clientId2/streamId.m3u8, 而本插件默认使用 m3u8 地址(去掉查询参数)作为 channelId。这时候就要构造一个共同的 chanelId,使实际观看同一直播/视频的节点处在相同频道中。构造 channelId 方法如下:
typescript
// 根据url构造videoId
const videoId = extractVideoIdFromUrl(originalUrl); // extractVideoIdFromUrl 需要自己定义,可以抽取url中的视频ID作为结果返回
const url = getP2pUrl(originalUrl, videoId);
WARNING
如果要与其他平台互通,则必须确保两者拥有相同的 token 和 channelId 。
设置 HTTP 请求头
出于防盗链或者统计的需求,有些 HTTP 请求需要加上 referer 或者 User-Agent 等头信息,可以通过 httpHeadersForHls 进行设置:
typescript
import { ConfigOptions,initP2p,getP2pUrl,getP2pEngineVersion,p2pIsConnected,stopP2p, onP2pStats, StatsObject, setHttpHeadersForHls } from "@/uni_modules/cdnbye-swarmcloud";
const headers = new Map<string, string>();
headers.set('referer' ,'xxx');
headers.set('User-Agent' ,'xxx');
setHttpHeadersForHls(headers);
const url = getP2pUrl(originalUrl);