最近更新时间:2024.03.27 16:56:23
首次发布时间:2023.06.06 17:46:16
视频点播为微信小程序播放场景提供播放器、日志上报等一系列 SDK 和组件,助您实现需要的业务功能。
您需要在小程序后台 > 开发 > 开发设置 > 服务器域名中添加日志上报域名:https://mcs.zijieapi.com
。
操作截图示例如下。
说明
视频资源的 CDN 域名不需要添加到域名配置中。
# npm npm i veplayer-mp-wechat // 播放器 SDK npm i veplayer-mp-logger // 日志上报 SDK # yarn yarn add veplayer-mp-wechat // 播放器 SDK yarn add veplayer-mp-logger // 日志上报 SDK
说明
构建前,请先了解微信小程序官网对于 npm 支持 的介绍。
您需要点击微信开发者工具菜单栏中的工具 > 构建 npm。
详情请参考微信官方文档小程序自定义组件的引入方式。引入微信小程序点播 SDK 的代码示例如下:
{ "usingComponents": { "veplayer": "veplayer-mp-wechat" } }
您需要在火山引擎视频点播控制台,新建应用并获取应用 ID(App ID)。
引入日志组件,在页面加载前设置数据采集 SDK 的构造器。
代码示例如下所示:
import { initCollector } from 'veplayer-mp-logger' initCollector({ appId: xxxx, // 您可在火山引擎视频点播控制台上获取应用 AppID userId: '7231***6007992', // 用户 ID,强烈建议您使用与业务相关的用户 ID。如不传入,SDK 将随机生成一个值 })
说明
setCollector
方法第二项参数中的 userId
。这是用于识别单一用户的 ID。强烈建议您使用与业务相关的用户 ID,以便在发生播放错误时进行单点排查,精准定位故障。如您没有设置用户 ID,SDK 将随机生成一个值。按照如下示例代码在项目中引用播放器。
<view> <!-- 以下是对小程序播放器组件的引用 --> <veplayer id="videoContainer" showPlayBtn autoplay src="{{src}}" logInfo="{{logInfo}}" bindplay="onPlay" /> </view>
对应业务组件中添加日志上报需要的视频信息配置,代码示例如下:
// index.js Component({ data: { src: 'https://xxxx.mp4', logInfo: { vtype: 'MP4', // [可选]播放格式类型, 默认为 'MP4',可选值'HLS' || 'MP4' codecType: 'h264', // [可选]视频编码类型,默认 h264,'h264' || 'h265' sourceType: 'url', // [可选]播放资源类型, 可选 'url' bitrate: 1334556, // [可选]视频码率,默认为 0 tag: 'myTag', // [可选]播放场景 subtag: 'subtag', // [可选]二级播放场景 logger: true, // [可选] 是否开启 log 打印,默认 false, 开发环境可设置为 true } } })
视频信息配置完成后,查看日志上报数据的操作步骤如下:
登录视频点播控制台。
单击左侧导航栏质量平台 > 播放看板,进入播放看板页面,选择大盘速览页签。
在查询条件中选择微信小程序。详细操作说明请见查看大盘速览。
注意
小程序播放质量数据仅采集真机 Android 和 iOS 系统的数据。
小程序播放器封装了 video 原生组件,支持配置大部分的 video 属性。原生组件支持的属性配置详情请参考微信官方文档。以下列表展示了新增属性及差异化属性。
说明
show-
开头的开关,既影响原生组件,又影响自定义 UI。video
组件的属性,如:show-play-btn
这类中划线分割的属性名,需要改写成驼峰式命名showPlayBtn
。属性 | 类型 | 默认值 | 是否必选 | 说明 |
---|---|---|---|---|
mode |
|
| 否 | UI 模式。支持 2 种播放 UI 模式。取值如下:
|
disableLogVerify | Boolean |
| 否 | 关闭日志配置验证。取值如下:
|
componentId | String | - | 否 | video 组件 ID。
|
logInfo | Object | 否 | 日志上报时用到的视频信息 | |
src | String | - | 是 | 播放视频的资源地址。支持网络路径、本地临时路径、云文件 ID等。 |
controls | 'custom' | 'native' |'false'| 'focus' | 'hidden' | 'blur' | 'focus' | 'immerse' |
| 否 | 播控 UI 的模式。取值如下:
说明
|
playBtnPosition | 'center' | 'bottom' | 'center-bottom' | bottom | 否 | 播放按钮的位置。取值如下:
|
duration | number | - | 否 | 指定视频时长。 说明 不会控制实际播放的时长。因此该属性不设置给原始 video 组件,只提供给自定义 UI 使用。 |
showCenterPlayBtn | Boolean |
| 否 | 是否显示视频正中心的播放按钮。取值如下:
|
showBottomProgress | Boolean |
| 否 | 是否展示底部进度条。取值如下:
|
needLoading | Boolean |
| 否 | 是否显示 loading 加载标识。 说明
|
timeUpdateInterval | Number | 400 | 否 | 进度条更新的频率,单位为 ms。用于减少频繁的渲染造成内存升高的问题。 |
autoBlurTime | Number | 15000 | 否 | 自动失焦,即播放器在处于激活态,用户无操作多长时间隐藏播控。 |
interactiveConfig |
|
| 否 | 响应式配置。取值如下:
|
enableTapActive | Boolean | true | 否 | 是否启用点击触发激活(进入 说明 当自定义 |
bindplay | eventhandle | - | 否 | 当开始/继续播放时触发 play 事件。 |
bindpause | eventhandle | - | 否 | 当暂停播放时触发 pause 事件。 |
bindended | eventhandle | - | 否 | 当播放到末尾时触发 ended 事件。 |
bindtimeupdate | eventhandle | - | 否 | 播放进度变化时触发
触发频率 250ms 一次。 |
bindfullscreenchange | eventhandle | - | 否 | 视频进入和退出全屏时触发
|
bindwaiting | eventhandle | - | 否 | 视频出现缓冲时触发 waiting 事件。 |
binderror | eventhandle | - | 否 | 视频播放出错时触发 error 事件。 |
bindprogress | eventhandle | - | 否 | 加载进度变化时触发
|
bindloadedmetadata | eventhandle | - | 否 | 视频元数据加载完成时触发
|
bindcontrolstoggle | eventhandle | - | 否 | 切换
|
bindenterpictureinpicture | eventhandle | - | 否 | 播放器进入小窗 enterpictureinpicture 事件。 |
bindleavepictureinpicture | eventhandle | - | 否 | 播放器退出小窗 leavepictureinpicture 事件。 |
bindseekcomplete | eventhandle | - | 否 | seek 完成时触发 说明
|
binduseraction | eventhandle | - | 否 | 用户行为触发。例如,用户点击暂停、滑动进度条。 |
小程序播放器封装了 VideoContext,提供同原生接口一致的 API。代码示例如下所示。
const component = this.selectComponent("#videoContainer"); const player = component.getContext() // 原生接口 player.play() player.pause() player.stop() player.seek(10) player.sendDanmu(Object data) player.playbackRate(1) player.requestFullScreen({ direction: 90 }) player.exitFullScreen() player.exitPictureInPicture() player.requestBackgroundPlayback() player.exitBackgroundPlayback()
微信小程序播放器对外支持 2 种方式的事件监听形式:
组件属性 bind 方式事件监听
组件对象提供事件订阅的机制进行事件监听
请选择其中一种进行订阅,尽量不要两者混用。这两种方式在组件实例中,被从页面节点树移除(lifetimes->detached)时,进行事件解绑,您无需单独关注事件泄漏的问题。
请参见组件属性中 bind 开头的事件属性。
小程序播放器提供了接口可以获取 player context,并可以对 player
添加事件订阅,从而实现任意时刻对各种播放事件添加/移除监听的功能。代码示例如下所示。
const component = this.selectComponent("#videoContainer"); const player = component.getContext(); // 事件订阅 player.on('error', (e) => { console.log('event error:', e) }); player.on('timeupdate', (e) => { const { currentTime, duration } = e.detail; console.log('event timeupdate:', currentTime, duration) }); // ...
详细的事件列表如下所示。
事件名称 | 是否可自定义事件 | 说明 |
---|---|---|
play | 否 | 当开始/继续播放时触发 play 事件。 |
pause | 否 | 当暂停播放时触发 pause 事件。 |
ended | 否 | 当播放到末尾时触发 ended 事件。 |
timeupdate | 否 | 播放进度变化时触发。 |
fullscreenchange | 否 | 视频进入和退出全屏时触发 fullscreenchange 事件。 |
waiting | 否 | 视频出现缓冲时触发 waiting 事件。 |
error | 否 | 视频播放出错时触发 error 事件。 |
progress | 否 | 加载进度变化时触发 progress 事件,只支持一段加载。 |
loadedmetadata | 否 | 视频元数据加载完成时触发 loadedmetadata 事件。 |
controlstoggle | 否 | 切换 controls 显示隐藏时触发 controlstoggle 事件。 |
enterpictureinpicture | 否 | 播放器进入小窗 enterpictureinpicture 事件。 |
leavepictureinpicture | 否 | 播放器退出小窗 leavepictureinpicture 事件。 |
seekcomplete | 否 | seek 完成时触发 seekcomplete 事件。 |
controlstoggle | 否 | 切换 controls 显示隐藏时触发 controlstoggle 事件。 |
useraction | 是 | 用户行为触发,如用户点击暂停、滑动进度条。 |