API 文档

最近更新时间:2024-08-23 15:04:32

我的收藏

HLSP2P 主线程 SDK

SDK API

HLSP2P.uuid

返回 {string} 用户的uuid, 同一浏览器, 同一域名页面, UUID是固定的

HLSP2P.version

返回 {string} version sdk 版本号 查询 sdk 的版本

HLSP2P.isSupported(): boolean

返回 {boolean} isSupported 当前浏览器环境是否支持 sdk
检查当前浏览器环境是否支持 sdk, 请务必在创建 sdk 实例之前需要使用此接口, 如果返回false,则不能初始化 sdk

HLSP2P.create(hlsjs, options): HLSP2P

创建自动集成到hls.js的sdk实例, 参数说明和返回值如下
参数 {HLSJS} hlsjs hls.js 的实例
参数 {Options} options 必填参数
返回 {HLSP2P} hlsp2p sdk 实例
options 参数详细如下
type Options = {
videoId: string; // `<video>` 标签的 id, `必填`
videoType: 'VOD' | 'LIVE'; // `必填`, 根据实际情况选择直播还是点播
url: string; // m3u8 的 url, `必填`
domain: string; // 随邮件 `必填`
xp2pAppId: string; // 随邮件 `必填`
cloudAppId: number; // 您在腾讯云的appid `必填`
logLevel?: LogLevel; // 可选, 设置log事件的level. 如设置为warn, 则仅抛出warn和error. 默认为error
channelId?: string; // 可选. 您可以主动为当前资源生成一个ID, 如果不填, 则默认内部自动生成, 生成规则见 概览->FAQ->资源ID生成规则
channelIdWithHost?: boolean; // 可选. 默认为true. 生成的资源ID包含m3u8 host部分, 不同host的url不会互相分享. 详见概览->FAQ
channelIdWithSearch?: boolean; // 可选. 默认为false. 生成的资源ID不包含m3u8 search部分. 详见概览->FAQ
enableServiceWorker?: boolean; // 可选, 默认为false. 是否开启支持service worker功能. 使用前请与我们确认
}

type LogLevel = 'log' | 'info' | 'warn' | 'error';

HLSP2P.createCommon(options): HLSP2P

创建通用的sdk实例
参数 {Options} options 必填参数
options 参数详细如下
type Options = {
videoId: string; // `<video>` 标签的 id, `必填`
videoType: 'VOD' | 'LIVE'; // `必填`, 根据实际情况选择直播还是点播
url: string; // m3u8 的 url, `必填`
domain: string; // 随邮件 `必填`
xp2pAppId: string; // 随邮件 `必填`
cloudAppId: number; // 您在腾讯云的appid `必填`
logLevel?: LogLevel; // 可选, 设置log事件的level. 如设置为warn, 则仅抛出warn和error. 默认为error
channelId?: string; // 可选, 您可以主动为当前资源生成一个ID, 如果不填, 则默认内部自动生成, 生成规则见 概览->FAQ->资源ID生成规则
channelIdWithHost?: boolean; // 可选, 默认为true. 生成的资源ID包含m3u8 host部分, 不同host的url不会互相分享. 详见概览->FAQ->资源ID生成规则
channelIdWithSearch?: boolean; // 可选, 默认为false. 生成的资源ID不包含m3u8 search部分. 详见概览->FAQ->资源ID生成规则
enableServiceWorker?: boolean; // 可选, 默认为false. 是否开启支持service worker功能. 使用前请与我们确认
}

hlsp2p.on(HLSP2P.Events.Rollback, (msg: RollbackMsg) => void)

监听 hlsp2p 抛出的回退事件, 回退表示不能继续使用 SDK
type RollbackMsg = {
reason: 'unknown_domain' | 'config_rollback';
}
value
含义
unknown_domain
内网模式生效,域名未在后台配置
config_rollback
主动配置回退

hlsp2p.destroy()

关闭 sdk 实例 hlsp2p, 释放资源, 停止代理播放器请求

hlsp2p.attachVhsPlayer(vhs): boolean

用于对接 video.js的http-streaming 模块, 调用此方法后, hlsp2p 会拦截 video.js 的 ts 请求, 并通过 hlsp2p 内部进行下载(从 cdn 或从 p2p)
参数 {Vhs} vhs video.js http-streaming的实例, 获取方式为 player.tech().vhs
返回 {Boolean} 返回 true 表示对接成功, false 表示对接失败. 对接失败的情况下, 不会影响 video.js 的正常使用

Service Worker内部的XP2P SDK

此 SDK 用于在 iOS 上通过 ServiceWorker 功能来支持 P2P, 在 service worker 内部运行,此 SDK 需要配合主线程 HLSP2P SDK 使用

SDK API

XP2PSW.XP2PSWLib

XP2P Service worker 内部 sdk 的 lib 名称, 通过这个接口来操作 sdk

static XP2PSW.XP2PSWLib.version

静态属性, 获取 XP2PSW SDK 的版本号
返回 {string}

static XP2PSW.XP2PSWLib.create()

静态方法, 创建 Service Worker 内部 sdk 的实例, 单例模式, 多次调用都会返回同一个 sdk 实例
const xp2pSWSDKInstance = XP2PSW.XP2PSWLib.create();
返回 {XP2PSW.XP2PSWLib}

xp2pSWSDKInstance.enableLog(param: LogParam)

实例方法, 调用后可以开启日志功能,可以多次调用
type LogParam = {
enableLog: boolean, // true则使用console.log打印日志
enableUpload: boolean, // true则, 开启日志上传到P2P后台用于分析, 请不要在线上环境开启
logLevel: 'log' | 'info' | 'warn' | 'error', // 日志等级, 可选值有 log, info, warn, error, 默认是error级别
}
参数 {LogParam} param 传入参数来控制日志的功能
返回

xp2pSWSDKInstance.detectXP2PRequest(event)

实例方法, 用于检测 Service Worker 内拦截的 fetch 事件, 是否是 XP2P 内部的事件. 如果返回 true, 则这个 event 请务必使用 sdk 来处理(xp2pSWSDKInstance.match(event))
参数 {FetchEvent} event
返回 {boolean}

xp2pSWSDKInstance.match(event)

参数 {FetchEvent} event
返回 Promise<Response>
通过 xp2p service worker sdk 来代理这个请求,适用的 fetch event 包括如下三种
detectXP2PRequest(event) 返回 true
event.request.url 是 ts url (需要和 HLSP2P 初始化 m3u8 里边的 ts 一致)
event.request.url 是 m3u8 url (需要和 HLSP2P 初始化 m3u8 一致)
当 XP2P sdk 代理请求返回成功的时候, 会返回 Promise<Response>; 当代理请求失败的时候, 需要对返回 promise 进行异常处理,示例如下
// service worker内部
self.xp2pSWSDKInstance = XP2PSW.XP2PSWLib.create();

self.addEventListener('fetch',
/**
* @param {FetchEvent} event
*/
function (event) {
console.log('sw: fetch event', event.request.url);
if (self.xp2pSWSDKInstance && (self.xp2pSWSDKInstance.detectXP2PRequest(event) || isTsOrM3u8Url(event.request.url))) {
console.log('sw: fetch event XP2P sdk处理', event.request.url);
return event.respondWith(
self.xp2pSWSDKInstance.match(event)
.then(function (response) {
console.warn('sw: fetch event resp接收成功', event.request.url, response);
// 这里不要删除
if (self.xp2pSWSDKInstance.detectXP2PRequest(event)) {
// 此处需要直接返回, 客户不能做任何修改
return response;
}
// 这里不要删除
if (new URL(event.request.url).searchParams.get('xfrom')) {
// 此处需要直接返回, 客户不能做任何修改
return response;
}
return response;
})
.catch(function (e) {
console.warn(`sw: fetch event [XP2P] match error: ${e}, 异常兜底请求 ${event.request.url}`);
// 注意: safari会增加pragma header,导致发出不必要的cors preflight请求, 会导致请求失败. 这里删除掉
const r = new Request(event.request);
r.headers.delete('pragma');
const response = fetch(r);
// 这里不要删除
if (self.xp2pSWSDKInstance.detectXP2PRequest(event)) {
// 此处需要直接返回, 客户不能做任何修改
return response;
}
// 这里不要删除
if (new URL(event.request.url).searchParams.get('xfrom')) {
// 此处需要直接返回, 客户不能做任何修改
return response;
}
return response;
})
);
}
});

xp2pSWSDKInstance.destroy()

销毁 XP2P Service Worker SDK 实例