You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们
导航

功能接入

最近更新时间2023.09.26 16:43:46

首次发布时间2022.09.09 16:30:28

在接入视频云播放器(VePlayer)的过程中,您需要根据使用场景配置不同的参数,本文为您提供了部分常见场景的接入示例。

RTM 协议拉流

VePlayer 支持 RTM 协议拉流,详细功能介绍请参见超低延时直播

  1. 使用视频直播控制台的地址生成器,生成 RTM 拉流地址
  2. 创建 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 的取值为 flvhls

主备流降级

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,开启清晰度降级提示。在播放等待超时后,播放器会提示观众是否需要降级到更低的清晰度。

  1. 进入控制台配置多个转码模版,操作方法可参考转码配置文档。

  2. 使用视频直播控制台的地址生成器,选择不同的转码模版,生成不同清晰度的播放地址。

alt

  1. 创建 VePlayer 对象实例,在 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],
});

直播时移

  1. 参考时移配置说明在直播控制台中配置时移。

  2. 拼接直播时移播放地址,拼接规则为:{PullDomain}/{AppName}/{StreamName}.m3u8?{鉴权参数},详细参数说明请参见后续操作

  3. 在播放器中传入拼接好的相对时移地址。

说明

  • 直播时移的参数配置详情,请参考接口说明
  • 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],
});

直播日志上报

  1. 联系技术支持获取 AppID。
  2. liveLogger 中传入 appid,开启日志上报。直播过程中,如果出现播放异常,您可以联系技术支持,定位并排查问题。
const playerSdk = new VePlayer({
    id:	'mse',
    isLive:true,
    width:600,
    height:400,
    url:'//pulldomain/appname/mainstream.flv',
    liveLogger: {
        appId: '2****4'
    }
});

SEI 监听

在播放器创建完成后,您可以设置 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,不存在则为空字符串
  }
}