最近更新时间:2024.04.23 17:58:03
首次发布时间:2021.05.17 17:30:40
本文为您介绍如何实现 VePlayer 提供的进阶功能。
VePlayer 搭配视频点播转码服务,可实现 MP4、HLS 和 DASH 加密视频的播放,以满足用户对版权视频安全播放的需求。
注意
如果加密视频不是由视频点播转码服务生成的,那么 VePlayer 无法保证能够正确播放。
注意
VePlayer 播放 HLS 标准加密视频存在以下已知限制:
对于不支持的浏览器环境,建议您进行风险评估,减少在这类环境下加密视频内容的投放或引导用户跳转至 App 端播放。
VePlayer 支持通过 Vid 和 DirectUrl 两种模式播放 HLS 标准加密视频。在播放之前需要业务服务端提前下发 keyToken 用于解密。
return (<Tabs defaultActiveTab="1"> <Tabs.TabPane title="Vid 模式" key="1"><RenderMd content={` 通过 Vid+PlayAuthToken 模式播放时,您需要设置 `getVideoByToken` 参数传入 \`playAuthToken\` 和 \`keyToken\`。具体参数介绍请见 [IPlayAuthTokenConfig](https://www.volcengine.com/docs/4/1248898#iplayauthtokenconfig)。示例代码如下: `}></RenderMd> <PreCode lang="javascript" text={` const playerSdk = new VePlayer({ id: 'mse', width: 800, height: 500, getVideoByToken: { playAuthToken: 'playAuthToken', keyToken: 'keyToken' } }); `} /> </Tabs.TabPane> <Tabs.TabPane title="DirectUrl 模式" key="2"><RenderMd content={` 通过 DirectUrl 模式播放时,除了视频地址 \`url\`,还需设置 `EncryptHlsPlugin` 参数传入 \`keyToken\`。详细参数介绍请见 [IEncryptHlsPluginConfig](https://www.volcengine.com/docs/4/1248898#iencrypthlspluginconfig)。示例代码如下: `}></RenderMd> <PreCode lang="javascript" text={` const playerSdk = new VePlayer({ id: 'mse', width: 800, height: 500, url: 'hls的加密视频地址', EncryptHlsPlugin: { keyToken: '解密用的keyToken', } }) `} /> </Tabs.TabPane> </Tabs>);
如想在不销毁播放器的情况下更换视频源,可调用播放器实例的 playNext
方法。Vid 和 DirectUrl 两种模式均支持通过这种方式切换视频。
Vid+PlayAuthToken 模式下切换视频的示例代码如下:
playerSdk.playNext({ getVideoByToken: { playAuthToken: 'new playAuthToken', // 新的playAuthToken keyToken: 'new keyToken' // 新的keyToken } });
系统/浏览器 | 说明 |
---|---|
PC Chrome | 支持 34 以上版本。 |
PC Edge | 部分支持 Windows 10+。 |
移动端 iOS 系统 | 部分支持 iOS 10 及以上系统。 注意 不支持 iOS 11.2 ~ 11.4 的系统。 |
移动端 Android 系统 | 部分支持 Android 5 及以上系统。 注意 不支持播放器被劫持环境,如 UC 浏览器、QQ 浏览器以及部分手机厂家自带的浏览器(例如,VIVO)。 |
火山引擎视频点播自研的私有 DRM 方案,采用火山引擎私有加密算法,安全级别高,能够便捷、高效、安全地保护您的音视频版权,VePlayer 支持 HLS、MP4 和 DASH 的私有 DRM 加密播放。
使用私有 DRM 播放需要通过视频点播控制台提前转码输出相应的转码产物,在播放器实例化时传入以下参数:
参数名 | 类型 | 是否必填 | 默认值 | 含义 |
---|---|---|---|---|
unionId | String | 是 | - | 唯一 ID,用于生成混淆密钥的用户唯一相关的 unionInfo。您在接入时请保证每一个用户的 unionId 是唯一的,没有其他格式限制。 |
getVideoByToken.playAuthToken | String | 是 | - | 服务端下发的播放临时安全凭证,下发时指定 FileType 为 evideo ,Format 指定为需要的播放格式,详见 客户端播放 |
getVideoByToken.getDrmAuthToken |
| 是 | - | 获取 说明 业务方需要通过这些参数调用业务方服务端接口获取 |
业务服务端需要提供签发私有 DRM 加密 AuthToken的接口,以供业务方的 getDrmAuthToken
回调函数调用,并最终返回所需要的 PrivateDrmAuthToken
。
说明
在 Web 端私有 DRM 播放时,需要指定参数 DrmType
取值为 webdevice
。
示例代码如下:
const playerSdk = new VePlayer({ id: 'mse', width: 640, height: 360, unionId: 'veplayer_demo', getVideoByToken: { playAuthToken: '加密视频的 playAuthToken', getDrmAuthToken: (playAuthIds, vid, unionInfo) => { // 获取 PrivateDrmAuthToken 回调 // 播放器携带 playAuthIds, vid, unionInfo 请求业务方 AppServer 获取 PrivateDrmAuthToken const request = window.fetch(`http://video-service.demo.com/api/GetDrmKeyToken/?kid=${encodeURIComponent(playAuthIds)}&vid=${vid}&uid=${unionInfo}`); return request.then(res => res.json()).then(data => data.result); } }, });
系统/浏览器 | 说明 |
---|---|
PC Chrome | 支持 34 以上版本的 HLS、MP4、DASH 的格式/协议。 |
PC Edge | 支持 Windows 10 及以上系统的 HLS、MP4、DASH 的格式/协议。 |
移动端 iOS 系统 | 部分支持 iOS 10 及以上系统,仅支持 HLS 协议。 注意 不支持 iOS 11.2 ~ 11.4 的系统。 |
移动端 Android 系统 | 部分支持 Android 5 及以上系统,支持 HLS、MP4、DASH 的格式/协议。 注意 不支持播放器被劫持环境,如 UC 浏览器、QQ 浏览器以及部分手机厂家自带的浏览器(例如,VIVO)。 |
服务端下发指定 DASH 格式的 PlayAuthToken
,即可快速实现 DASH 视频的播放,如果是指定为加密的 DASH 视频,也能按照以下示例代码快速实现 DASH 格式的加密视频播放。
const playerSdk = new VePlayer({ id: 'mse', width: 800, height: 500, streamType: 'dash', getVideoByToken: { playAuthToken: '指定DASH格式且为加密视频的playAuthToken' } });
面对一些灵活的需求场景时,您可自行获取 DASH 的播放信息,并设置 VePlayer 的 DASH 播放配置。具体参数介绍请见 IDashPluginConfig。示例代码如下:
const Service = window.VePlayer.Service; const playAuthToken = '指定DASH格式且为加密视频的playAuthToken'; Service.url(playAuthToken, '//vod.volcengineapi.com').then((res) => { // 业务侧处理DASH的相关配置 const playerSdk = new VePlayer({ id: 'mse', lang: 'zh', width: 800, height: 500, DASHPlugin: { vid: res.Vid, playInfoType: 'TOP', getLicenseUrl: '//i.snssdk.com/video/drm/v1/play_licenses', definitionText: { '360p': '流畅 360p', '480p': '清晰 480p', '720p': '高清 720p', '1080p': '超高清 1080p' }, defaultDefinition: '360p', preloadTime: 180, defaultFormat: 'dash', dashOpts: { Data: res } } }); });
系统/浏览器 | 说明 |
---|---|
PC Chrome | 支持 34 以上版本。 |
PC Edge | 部分支持 Windows 10+。 |
移动端 iOS 系统 | 仅支持 iPadOS 13 以上系统。 |
移动端 Android 系统 | 部分支持 Android 5 及以上系统。 注意 不支持播放器被劫持环境,如 UC 浏览器、QQ 浏览器。 |
说明
移动端不推荐使用 DASH 进行播放,更推荐兼容性比较好的 HLS 和 MP4 格式。
H.265 编码格式支持更高的压缩效率,相同的清晰度下,能够节省码率 40%,在保证画质的条件下,达到节省带宽流量的目的。VePlayer 支持 H.265 视频编码格式,能够为您节省流量。
在不支持 H.265 的浏览器环境下,设置 enableH265Degrade
为 true
,当播放 H.265 视频时可以 H.265 兼容模式进行适配播放,代码示例如下所示。
const playerSdk = new VePlayer({ id: 'video', width: 800, height: 500, url: 'xx265.mp4', enableH265Degrade: true, // 开启 H.265 兼容模式 codec: 'h265' // 视频编码格式 });
说明
如果开启了 H.265 兼容模式,且以 URL 形式播放,推荐提供视频的编码格式 codec
,否则 VePlayer 会拉取码流进行编码格式自动检测,这将会消耗一定流量(约 300kb),并延缓起播速度( 约 0.5s )。
VePlayer 支持通过三种方式自定义播放器 UI。其中,方式一和方式二仅支持更改播放器局部颜色或图标,方式三则是自定义程度最高也最为通用的方式。您可以结合这三种方式来满足您 UI 设计的需求。
您可通过配置项 commonStyle
设置一些关键点的颜色,如进度条颜色。以下是支持的设置示例和说明:
commonStyle: { // 进度条底色 progressColor: '#f4f4f4', // 播放完成部分进度条底色 playedColor: '#e3db68', // 缓存部分进度条底色 cachedColor: '#ffb027', // 进度条滑块样式,支持字符串或 Style 样式对象 sliderBtnStyle: { backgroundColor: '#6b47e2' }, // sliderBtnStyle: 'rgb(46 70 146)'; // 音量颜色 volumeColor: '#5bed67' },
注意
该方式通过设置元素的 style
属性来更改样式,因此其权重要高于您自定义的 CSS 样式。
效果演示:
您可以在设置中传入 SVG 图标来更改各个功能按钮的图标。
通过配置项 icons
传入图标。每一项都需要是返回 HTMLElement
类型的函数。以更改外挂字幕开启按钮的图标为例:
icons: { // 图标配置 Key vttSubOpen: () => { const img = document.createElement('img'); img.src = 'https://p6-addone.byteimg.com/tos-cn-i-hhc0kcolqq/92573eef59104db4acdc990fcc7a14cf.png~tplv-hhc0kcolqq-image.image'; img.width = 20; img.height = 20; return img; } },
您也可以对各个包含图标的插件的配置项 icons
进行单独设置,支持传入类型为 string | url |() => HTMLElement
。以更改 Control 栏播放按钮的图标为例:
// 插件名称 play: { icons: { play: '<img src="https://p6-addone.byteimg.com/tos-cn-i-hhc0kcolqq/7e93776a1f854453ba809add03f3647e.svg~tplv-hhc0kcolqq-image.image">', } },
效果演示:
更改前 | 更改后 |
---|---|
下表列出了图标配置 Key 和对应的插件名称。
图标配置 Key | 图标说明 | 对应插件名称(不区分大小写) | 备注 |
---|---|---|---|
play | 控制栏播放按钮图标 | play | 无 |
pause | 控制栏暂停按钮图标 | play | 无 |
startPlay | 屏幕中间开始播放按钮图标 | start | 无 |
startPause | 屏幕中间暂停播放按钮图标 | start | 无 |
loadingIcon | 屏幕中间加载时的图标 | loading | 无 |
replay | 播放结束时屏幕中间重播按钮图标 | replay | 无 |
fullscreen | 进入全屏按钮图标 | fullscreen | 无 |
exitFullscreen | 退出全屏按钮图标 | fullscreen | 无 |
cssFullscreen | CSS 进入全屏按钮图标 | cssFullscreen | 仅开启 CSS 全屏生效 |
exitCssFullscreen | CSS 退出全屏按钮图标 | cssFullscreen | 仅开启 CSS 全屏生效 |
pipIcon | 控制栏开启画中画按钮图标 | pip | 无 |
pipIconExit | 控制栏退出画中画按钮图标 | pip | 无 |
volumeSmall | 音量较小时按钮图标 | volume | 无 |
volumeLarge | 音量较大时按钮图标 | volume | 无 |
volumeMuted | 静音时按钮图标 | volume | 无 |
rotate | 视频旋转按钮图标 | rotate | 无 |
download | 下载按钮图标 | download | 下载功能仅播放 MP4 格式视频时生效 |
seekTipIcon | Seek 时的图标 | mobile | 仅移动端生效 |
playNext | 下一集按钮图标 | playNext | 无 |
danmuSetting | 弹幕设置按钮图标 | danmuPlugin | 无 |
openDanmu | 打开弹幕角标图标 | danmuPlugin | 无 |
closeDanmu | 关闭弹幕角标图标 | danmuPlugin | 无 |
vttSubOpen | 外挂字幕开启按钮图标 | Subtitle | 无 |
vttSubClose | 外挂字幕关闭按钮图标 | Subtitle | 无 |
您可以自行添加 CSS 进行样式覆盖。以下示例展示了如何将播放器中间的播放按钮位置移至左下角、更改进度条拖拽按钮、更改底部控制栏的背景样式。
.xgplayer .xgplayer-controls { background-color: #7fd3f0; background-image: none; } .xgplayer .xgplayer-start { left: 50px; bottom: 50px; top: unset; } .xgplayer-pc .xgplayer-progress .xgplayer-progress-btn { width: 24px; height: 24px; box-shadow: none; background:none; } .xgplayer .xgplayer-progress-btn:before { background-image: url("https://p6-addone.byteimg.com/tos-cn-i-hhc0kcolqq/0689ad58f2a94789bca639eac7fecc02.png~tplv-hhc0kcolqq-image.image"); background-size: 100% 100%; background-color: transparent; width: 20px; height: 20px; }
效果演示: