腾讯云X-P2PAPI 文档_音视频解决方案_同尘科技
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; // `
HLSP2P.createCommon(options): HLSP2P
创建通用的sdk实例参数 {Options}
options
必填参数options 参数详细如下
type Options = { videoId: string; // `
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
通过 xp2p service worker sdk 来代理这个请求,适用的 fetch event 包括如下三种detectXP2PRequest(event) 返回 trueevent.request.url 是 ts url (需要和 HLSP2P 初始化 m3u8 里边的 ts 一致)event.request.url 是 m3u8 url (需要和 HLSP2P 初始化 m3u8 一致)当 XP2P sdk 代理请求返回成功的时候, 会返回 Promise; 当代理请求失败的时候, 需要对返回 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 实例
对音视频的解决方案有疑惑?想了解解决方案收费? 联系解决方案专家
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心,购买腾讯云享受折上折,更有现金返利:同意关联,立享优惠
阿里云解决方案也看看?: 点击对比阿里云的解决方案
暂无评论,你要说点什么吗?