HLSP2P 主线程 SDK
SDK API
HLSP2P.uuid
返回
{string}
用户的uuid, 同一浏览器, 同一域名页面, UUID是固定的HLSP2P.version
返回
{string}
version sdk 版本号
查询 sdk 的版本HLSP2P.isSupported(): boolean
返回
{boolean
} isSupported 当前浏览器环境是否支持 sdk检查当前浏览器环境是否支持 sdk, 请务必在创建 sdk 实例之前需要使用此接口, 如果返回
false
,则不能初始化 sdkHLSP2P.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. 默认为errorchannelId?: string; // 可选. 您可以主动为当前资源生成一个ID, 如果不填, 则默认内部自动生成, 生成规则见 概览->FAQ->资源ID生成规则channelIdWithHost?: boolean; // 可选. 默认为true. 生成的资源ID包含m3u8 host部分, 不同host的url不会互相分享. 详见概览->FAQchannelIdWithSearch?: boolean; // 可选. 默认为false. 生成的资源ID不包含m3u8 search部分. 详见概览->FAQenableServiceWorker?: 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. 默认为errorchannelId?: 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 实例