最近更新时间:2023.09.26 16:43:46
首次发布时间:2022.09.09 16:30:28
在接入视频云播放器(VePlayer)的过程中,您需要根据使用场景配置不同的参数,本文为您提供了部分常见场景的接入示例。
VePlayer 支持 RTM 协议拉流,详细功能介绍请参见超低延时直播。
// 判断是否支持 RTM const isRTMSupported = VePlayer.isRTMSupported(); // 判断 RTM 是否支持 H264 格式播放 (v1.5.13 版本开始支持) const isRTMSupportH264 = await VePlayer.isRTMSupportCodec('h264'); const playerSdk = new VePlayer({ id: 'mse', url: isRTMSupported && isRTMSupportH264 ? 'https://testpull.mycloud.com/live/mystream.sdp' : 'https://testpull.mycloud.com/live/mystream.m3u8', isLive: true, width: 600, height: 400, rtm: { // 备用地址及类型。RTM 播放失败时,降级到该拉流地址 backupURL: 'https://testpull.mycloud.com/live/mystream.m3u8', backupStreamType: 'hls' } });
说明
RTM 拉流支持降级为 flv 和 hls 两种格式,即,参数 backupStreamType
的取值为 flv
或 hls
。
VePlayer 支持同时设置多个拉流地址,实现主备流降级。
您可通过设置 sdkErrorPlugin.isNeedDemoteBack
的取值,开启主流异常降级;主拉流地址异常后,播放器将自动切换为 playList
中配置的备用拉流地址。
说明
vePlayer 仅支持相同格式的拉流降级。
const playerSdk = new VePlayer({ id: 'mse', isLive: true, width: 600, height: 400, sdkErrorPlugin: { // 主播放地址推流异常时,是否降级到备用播放地址。 isNeedDemoteBack:true, // 重试次数 retryLoopNum: 1 }, playList: [ { url:"//pulldomain/appname/mainstream.flv", // 备流 backUrlList:['//pulldomain/appname/backupstream.flv'] } ] });
如果您的拉流域名开启了 URL 鉴权,则生成的拉流地址超过过期时间就会失效,可能导致观众看不到直播内容。为了保持不间断拉流,请获取新的拉流地址,并调用播放器的 switchURL
方法更新拉流地址。
const playerSdk = new VePlayer({ id: 'mse', isLive: true, width: 600, height: 400, url: '//testpull.mycloud.com/live/mystream.m3u8?{鉴权参数}' }); // 最新的拉流地址 const newUrl = '//testpull.mycloud.com/live/mystream.m3u8?{新的鉴权参数}' // 更新拉流地址 playerSdk.switchURL(newUrl)
您可以通过设置清晰度自动降级参数 DefinitionDemotePlugin
,开启清晰度降级提示。在播放等待超时后,播放器会提示观众是否需要降级到更低的清晰度。
playList
中传入所有清晰度地址。代码示例如下所示。const playerSdk = new VePlayer({ id: 'mse', isLive: 'true', width: 600, height: 400, // 清晰度降级 DefinitionDemotePlugin:{ oftenWaitingCount:3, oftenWaitingTime:5000, // 单位(ms),等待超过该时间,则提示用户是否进行清晰度降级 longWaitingTime:5000, // 是否开启自动降级提示 isNeedAutoDemote:true, // 可自定义降级顺序 demotePriority: ['uhd','hd','ld'] }, playList:[ { url:'//testpull.mycloud.com/live/mystream_uhd.m3u8', definition: 'uhd', // 清晰度 definitionTextKey: 'UHD' }, { url:'//testpull.mycloud.com/live/mystream_hd.m3u8', definition:'hd', // 清晰度 definitionTextKey:'HD' }, { url:'//testpull.mycloud.com/live/mystream_ld.m3u8', definition: 'ld', // 清晰度 definitionTextKey: 'LD' } ], plugins:[VePlayer.DefinitionDemotePlugin], });
参考时移配置说明在直播控制台中配置时移。
拼接直播时移播放地址,拼接规则为:{PullDomain}/{AppName}/{StreamName}.m3u8?{鉴权参数}
,详细参数说明请参见后续操作,
在播放器中传入拼接好的相对时移地址。
说明
livingStartTime
需要使用浏览器本地时间。const playerSdk = new VePlayer({ id: 'mse', isLive: true, url: "//testpull.mycloud.com/live/mystream.m3u8", width: 600, height: 400, // 时移配置 TimeShiftPlugin: { // 时移开始时间,单位为 s livingStartTime: Date.now() / 1000 - 60, // 最大时移时间,单位为 s maxMoveTime: 60 }, plugins: [VePlayer.TimeShiftPlugin], });
liveLogger
中传入 appid
,开启日志上报。直播过程中,如果出现播放异常,您可以联系技术支持,定位并排查问题。const playerSdk = new VePlayer({ id: 'mse', isLive:true, width:600, height:400, url:'//pulldomain/appname/mainstream.flv', liveLogger: { appId: '2****4' } });
在播放器创建完成后,您可以设置 SEI 补充增强信息监听。
const playerSdk = new VePlayer({ id: 'mse', isLive: true, // 支持 FLV 和 HLS 协议拉流 url: "//pull.example.com/live/stream1.flv", width: 600, height: 400, }); playerSdk.on('player_create_finish', () => { // 设置监听事件 playerSdk.player.on('core_event', (data) => { if(data.eventName === "core.sei") { console.log('sei信息', data) } }) });
当解析到视频 SEI 消息时,播放器将触发监听,监听的数据如下所示。
interface Data { originPts: number; // 原始 PTS。视频帧在实际推流中的显示时间戳 PTS pts: number; // 修正后的 PTS。在直播场景中,播放器会根据观众进入直播间时间,从 0 开始重新定义显示时间戳 PTS time: number; // 该 SEI 消息在当前直播视频中的时间点,单位为 s data: { payload: Uint8Array; // SEI 数据 type: number; // SEI 类型 size: number; // SEI 大小 uuid: string; // SEI UUID,不存在则为空字符串 } }