腾讯云X-P2PAPI 文档_音视频解决方案_同尘科技

X-P2P 2年前 (2023-09-27) 浏览 52

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折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心,购买腾讯云享受折上折,更有现金返利:同意关联,立享优惠

阿里云解决方案也看看?: 点击对比阿里云的解决方案

- 0人点赞 -

发表点评 (0条)

not found

暂无评论,你要说点什么吗?