video
基础库版本 >=
3.16.0
开始支持,低版本需做兼容处理。
视频。相关api: bl.createVideoContext
属性 | 类型 | 默认值 | 必填 | 说明 | 版本 |
---|---|---|---|---|---|
src | string | 是 | 播放视频的资源地址 | 3.16.0 | |
controls | boolean | true | 否 | 是否显示默认播放控件(播放/暂停按钮、播放进度、时间) | 3.16.0 |
danmu-btn | boolean | false | 否 | 是否显示弹幕按钮,仅在初始化时有效 | 3.16.0 |
enable-danmu | boolean | false | 否 | 是否展示弹幕,仅在初始化时有效 | 3.16.0 |
autoplay | boolean | false | 否 | 是否自动播放 | 3.16.0 |
loop | boolean | false | 否 | 是否循环播放 | 3.16.0 |
muted | boolean | false | 否 | 是否静音播放 | 3.16.0 |
initial-time | number | 0 | 否 | 指定视频初始播放位置 | 3.16.0 |
enable-progress-gesture | boolean | true | 否 | 是否开启控制进度的手势 | 3.16.0 |
object-fit | string | contain | 否 | 当视频大小与 video 容器大小不一致时,视频的表现形式 | 3.16.0 |
show-mute-btn | boolean | false | 否 | 是否显示静音按钮,不能动态修改 | 3.16.0 |
enable-play-gesture | boolean | false | 否 | 是否开启播放手势,即双击切换播放/暂停 | 3.16.0 |
vslide-gesture | boolean | false | 否 | 是否开启亮度与音量调节手势 | 3.16.0 |
enableAutoRotation | boolean | false | 否 | 是否跟随系统旋转自动全屏(开启后,仅视频播放状态下才生效) | 3.26.0 |
title | string | 否 | 全屏时title | 3.26.0 | |
sharedId | string | 否 | 共享播放器 id,仅对内开放 | 3.28.0 | |
free-flow-type | number | 0 | 否 | 3.33.0 | |
showFullscreenBtn | boolean | true | 否 | 是否显示全屏按钮(全屏模式下会自动隐藏) | 3.26.0 |
direction | number | 否 | 设置全屏时视频的方向,不指定则根据宽高比自动判断 | 3.26.0 | |
enableAccurateSeek | boolean | false | 否 | 是否开启精准seek(仅 android ) | 3.41.0 |
play | eventhandle | 否 | 当开始/继续播放时触发 play 事件 | 3.16.0 | |
pause | eventhandle | 否 | 当暂停播放时触发 pause 事件 | 3.16.0 | |
ended | eventhandle | 否 | 当播放到末尾时触发 ended 事件 | 3.16.0 | |
timeupdate | eventhandle | 否 | 播放进度变化时触发,event.detail = {currentTime, duration} | 3.16.0 | |
waiting | eventhandle | 否 | 视频出现缓冲时触发 | 3.16.0 | |
error | eventhandle | 否 | 视频播放出错时触发 | 3.16.0 | |
progress | eventhandle | 否 | 加载进度变化时触发,只支持一段加载。event.detail = {buffered},百分比 | 3.16.0 | |
loadedmetadata | eventhandle | 否 | 视频元数据加载完成时触发。event.detail = {duration} | 3.16.0 | |
controlstoggle | eventhandle | 否 | 切换 controls 显示隐藏时触发。event.detail = {show} | 3.16.0 | |
oncreated | eventhandle | 否 | 创建 video 后触发 | 3.16.0 | |
fullscreenchange | eventhandle | 否 | 视频进入和退出全屏时触发,event.detail = {fullScreen, direction},direction 有效值为 vertical 或 horizontal | 3.26.0 | |
freeflow | eventhandle | 否 | 免流事件通知,event.detail = {type, data} | 3.33.0 | |
videofirstrender | eventhandle | 否 | 视频首帧回调 | 3.38.0 |
src 支持的格式
格式 | 示例 | 说明 | 版本 |
---|---|---|---|
avid | 10318716 | 3.16.0 | |
bvid | 对外加密的视频id | 3.16.0 | |
ugc | ugc://aid/cid | 3.28.0 | |
http | http://* | 视频云地址 | 3.28.0 |
object-fit 有效值
值 | 说明 |
---|---|
contain | 包含 |
fill | 填充 |
cover | 覆盖 |
free-flow-type 合法值
值 | 说明 | 版本 |
---|---|---|
0 | 不显示免流提示 | 3.26.0 |
1 | 使用哔哩哔哩通用免流弹窗 | 3.26.0 |
2 | 自定义免流弹窗 | 3.35.0 |
freeflow 回调说明
event.detail
event.detail.type 说明
值 | 类型 | 说明 | 版本 |
---|---|---|---|
SHOW_FREE_FLOW | string | 显示免流弹窗 | 3.33.0 |
HIDE_FREE_FLOW | string | 免流弹窗消失 | 3.33.0 |
NEED_FREE_FLOW_CLICK | string | 我要免流点击 | 3.33.0 |
NO_FREE_FLOW_CLICK | string | 继续播放点击 | 3.33.0 |
VIDEO_STATE_MOBILE_DATA_HOOK | string | 当前状态流量播放会暂停视频,需要手动调用allowWWANPlay()才能继续播放,event.detail.data包含视频size | 3.35.0 |
VIDEO_STATE_MOBILE_DATA | string | 调用allowWWANPlay()后会记录状态,7天内会自动流量播放,当前状态流量播放,event.detail.data包含视频size | 3.35.0 |
VIDEO_STATE_WIFI | string | 触发时机 Android:WIFI自动播放,iOS:非WIFI网络环境切换到WIFI | 3.35.0 |
VIDEO_STATE_FREE_DATA | string | 免流成功自动播放 | 3.35.0 |
VIDEO_STATE_FREE_FAIL | string | 免流失败,event.detail.data包含错误码和视频size | 3.35.0 |
event.detail.data 说明
属性 | 类型 | 说明 | 版本 |
---|---|---|---|
videoSize | number | 视频大小,单位M,仅VIDEO_STATE_MOBILE_DATA_HOOK、VIDEO_STATE_MOBILE_DATA、VIDEO_STATE_FREE_FAIL 返回 | 3.35.0 |
errorCode | number | Android 错误码: 1998: IP检查错误JsonObject为空 2000: IP无效 2002: IP检查发生异常 2004: URL检查发生异常 2008: 直播请求返回无效 2010: 直播请求发生异常 2012: 媒体请求返回无效 2014: 媒体请求发生异常 2020: 组装URL错误 2022: 检查URL无用户ID参数 2024: 检查URL用户ID错误 2026: 检查URL错误enkey 2028: 检查URL无enkey参数 2030: 检查URL发生异常 3010: URL处理发生异常 3016: 代理规则正则不合法 3018: 代理规则MD5验证失败 3026: 代理检查IP无效 3028: WEB代理规则为空 3034: 代理规则类型不合法 2016:文件免流返回结果不合法 2018:文件免流过程异常 2032:伪码状态不对,针对 联通流量包(套餐到期) 2034:伪码状态不对,伪码未激活 2036:联通免流包超过流量 2040:直播推流原始url empty 2042:文件原始url empty 2044:流媒体原始url empty 3036:联通免流规则初始化异常 4000:电信免流URL处理异常 4002:电信免流规则初始化异常 4004:电信ip无效,当前ip没有在电信的ip段 5000:移动免流URL处理异常 5002:移动免流规则初始化异常 5004:移动ip无效,当前ip没有在移动的ip段 6000:免流范围不支持 7000:免流数据为空 7001:免流开关关闭 7002:免流缓存过期 7003:运营商不匹配 7004:订单类型为空 iOS 错误码:3001:URL本身有问题:例如长度为0 3002:当前URL无法免流,可能是host不在支持的范围内 3003:在线配置有问题 3005:没有找到对应的规则列表 3006:找到规则列表,但是没有命中其中任何规则 4001:URL转换之后的结果有问题:非法URL,或者URL中没有usrId等情况(与原有业务逻辑保持一致,目前联通免流包才有这种错误) 4002:调用联通接口超时 4003:超出定向流量的使用量(目前联通免流包才有这种错误) | 3.35.0 |
Bug & Tip
- 当前页面仅支持初始化一个视频播放器。
- video 的 API 调用在 loadedmetadata 回调前调用无效,只有播放器预载完数据后才能使用。
- video 在 iOS 平台且 SDKVersion ==
3.26.0
(App 6.20.0),应用主题与系统不一致时,会出现渲染错乱,建议使用 bl.updateApp 引导用户进行 App 更新。 - enable-play-gesture 与 vslide-gesture 属性,有一个开启,就同时开启。
- videofirstrender 事件,在视频播放后,首个画面展示出来之后会触发。循环播放视频时,也会触发。
- v-show隐藏后 video 会暂停
示例代码
<template>
<b-video
id="myVideo"
:src="src"
:controls="controls"
:danmu-btn="danmuBtn"
:enable-danmu="enableDanmu"
:autoplay="autoplay"
:loop="loop"
:muted="muted"
:initial-time="initialTime"
:enable-progress-gesture="enableProgressGesture"
:show-mute-btn="showMuteBtn"
:object-fit="objectFit"
:enable-play-gesture="enablePlayGesture"
:vslide-gesture="vslideGesture"
@play="eventChange"
@pause="eventChange"
@ended="eventChange"
@timeupdate="eventChange"
@waiting="eventChange"
@error="eventChange"
@progress="eventChange"
@loadedmetadata="eventChange"
@controlstoggle="eventChange"
></b-video>
</template>
<script>
export default {
data() {
return {
src: 'BV18J411E7r1',
controls: true,
danmuBtn: false,
enableDanmu: false,
autoplay: false,
loop: false,
muted: false,
initialTime: 0,
enableProgressGesture: true,
objectFit: 'contain',
showMuteBtn: false,
enablePlayGesture: false,
vslideGesture: false
};
},
methods: {
// 事件触发
eventChange(e) {
console.log('----- event -----', e)
}
}
};
</script>