Skip to content

P2P配置

参考interface.uts

P2pEngine

实例化P2pEngine,获得一个全局单例:

javascript
//初始化
function initP2p (token:string,configOptions:ConfigOptions|null=null):void

参数说明:

参数类型是否必须说明
tokenstringCDNBye分配的token。
configConfigOptions自定义配置。

获取P2P地址或者切换源

当播放或切换到新的播放地址时,只需要将新的播放地址传给插件,从而获取新的本地播放地址:

javascript
function  getP2pUrl(url : string, videoId:string|null=null, mimeType:string|null=null) : string

参数说明:

参数类型是否必须说明
urlstring未经过转换的原始播放地址
videoIdstring传入此参数将使用videoId构造channelId,其他端需要保持一致
mimeTypestring传用于无".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);

粤ICP备18075581号