Skip to content

video ​

视频播放组件。

属性说明

属性名类型默认值说明平台差异说明
srcString要播放视频的资源地址
autoplayBooleanfalse是否自动播放
loopBooleanfalse是否循环播放
mutedBooleanfalse是否静音播放
initial-timeNumber指定视频初始播放位置,单位为秒(s)。
durationNumber指定视频时长,单位为秒(s)。抖音小程序、快手小程序不支持
controlsBooleantrue是否显示默认播放控件(播放/暂停按钮、播放进度、时间)快手小程序不支持
danmu-listObject Array弹幕列表抖音小程序、快手小程序不支持
danmu-btnBooleanfalse是否显示弹幕按钮,只在初始化时有效,不能动态变更抖音小程序、快手小程序不支持
enable-danmuBooleanfalse是否展示弹幕,只在初始化时有效,不能动态变更抖音小程序、快手小程序不支持
page-gestureBooleanfalse在非全屏模式下,是否开启亮度与音量调节手势微信小程序、H5
directionNumber设置全屏时视频的方向,不指定则根据宽高比自动判断。有效值为 0(正常竖向), 90(屏幕逆时针90度), -90(屏幕顺时针90度)H5、快手小程序不支持
show-progressBooleantrue若不设置,宽度大于 240 时才会显示抖音小程序、快手小程序不支持
show-fullscreen-btnBooleantrue是否显示全屏按钮
show-play-btnBooleantrue是否显示视频底部控制栏的播放按钮
show-center-play-btnBooleantrue是否显示视频中间的播放按钮抖音小程序不支持
enable-progress-gestureBooleantrue是否开启控制进度的手势抖音小程序不支持
object-fitStringcontain当视频大小与 video 容器大小不一致时,视频的表现形式。 contain :包含, fill :填充, cover :覆盖微信小程序、抖音小程序、H5
posterString视频封面的图片网络资源地址,如果 controls 属性值为 false 则设置 poster 无效
show-mute-btnBooleanfalse是否显示静音按钮微信小程序、抖音小程序
titleString视频的标题,全屏时在顶部展示微信小程序
play-btn-positionStringbottom播放按钮的位置微信小程序、抖音小程序
enable-play-gestureBooleanfalse是否开启播放手势,即双击切换播放/暂停微信小程序、快手小程序
auto-pause-if-navigateBooleantrue当跳转到其它小程序页面时,是否自动暂停本页面的视频微信小程序
auto-pause-if-open-nativeBooleantrue当跳转到其它微信原生页面时,是否自动暂停本页面的视频微信小程序
vslide-gestureBooleanfalse在非全屏模式下,是否开启亮度与音量调节手势(同 page-gesture )微信小程序、快手小程序
vslide-gesture-in-fullscreenBooleantrue在全屏模式下,是否开启亮度与音量调节手势微信小程序、快手小程序
ad-unit-idString视频前贴广告单元ID,更多详情可参考开放能力视频前贴广告微信小程序
poster-for-crawlerString用于给搜索等场景作为视频封面展示,建议使用无播放 icon 的视频封面图,只支持网络地址微信小程序
is-liveBooleanfalse是否为直播源微信小程序(2.28.1+)
@playEventHandle当开始/继续播放时触发 play 事件
@pauseEventHandle当暂停播放时触发 pause 事件
@endedEventHandle当播放到末尾时触发 ended 事件
@timeupdateEventHandle播放进度变化时触发, event.detail = {currentTime, duration} 。触发频率 250ms 一次
@fullscreenchangeEventHandle当视频进入和退出全屏时触发, event.detail = {fullScreen, direction} , direction 取为 vertical 或 horizontal
@waitingEventHandle视频出现缓冲时触发快手小程序不支持
@errorEventHandle视频播放出错时触发
@progressEventHandle加载进度变化时触发,只支持一段加载。 event.detail = {buffered} ,百分比微信小程序、抖音小程序、H5
@loadedmetadataEventHandle视频元数据加载完成时触发。 event.detail = {width, height, duration}微信小程序、H5、抖音小程序
@controlstoggleEventHandle切换 controls 显示隐藏时触发。 event.detail = {show}微信小程序2.9.5

<video> 默认宽度 300px 、高度 225px ,可通过 css 设置宽高。

direction 的合法值 ​
值说明
0正常竖向
90屏幕逆时针90度
-90屏幕顺时针90度
object-fit 的合法值 ​
值说明
contain包含
fill填充
cover覆盖
play-btn-position 的合法值 ​
值说明
bottomcontrols bar上
center视频中间

示例 查看示例

vue
<template>
  <view>
    <view class="uni-padding-wrap uni-common-mt">
      <view>
        <video
          id="myVideo"
          src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/2minute-demo.mp4"
          @error="videoErrorCallback"
          :danmu-list="danmuList"
          enable-danmu
          danmu-btn
          controls
        />
      </view>
    </view>
  </view>
</template>
<template>
  <view>
    <view class="uni-padding-wrap uni-common-mt">
      <view>
        <video
          id="myVideo"
          src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/2minute-demo.mp4"
          @error="videoErrorCallback"
          :danmu-list="danmuList"
          enable-danmu
          danmu-btn
          controls
        />
      </view>
    </view>
  </view>
</template>
js
<script>
export default {
  data() {
    return {
      src: '',
      danmuList: [
        {
          text: '第 1s 出现的弹幕',
          color: '#ff0000',
          time: 1,
        },
        {
          text: '第 3s 出现的弹幕',
          color: '#ff00ff',
          time: 3,
        },
      ],
      danmuValue: '',
    },
  },
  methods: {
    videoErrorCallback: function(e) {
      qin.showModal({
        content: e.target.errMsg,
        showCancel: false,
      });
    },
  },
};
</script>
<script>
export default {
  data() {
    return {
      src: '',
      danmuList: [
        {
          text: '第 1s 出现的弹幕',
          color: '#ff0000',
          time: 1,
        },
        {
          text: '第 3s 出现的弹幕',
          color: '#ff00ff',
          time: 3,
        },
      ],
      danmuValue: '',
    },
  },
  methods: {
    videoErrorCallback: function(e) {
      qin.showModal({
        content: e.target.errMsg,
        showCancel: false,
      });
    },
  },
};
</script>

相关api:qin.createVideoContext

注意

  • 视频播放格式说明:

  • video全屏后,如何自行绘制界面?比如加个标题、加个分享按钮

    • 微信基础库 2.4.0 以上可通过cover-view来绘制界面覆盖元素
    • H5端可通过通用h5做法实现
    • 其他端无法全屏后自行绘制内容
  • 如何实现抖音、映客等全屏视频垂直滑动切换效果?

    • 微信基础库 2.4.0 以上,可通过在垂直的swiper中内嵌video来实现。原生导航栏设置为custom,视频长宽设为手机屏幕大小,通过cover-view覆盖视频内容。插件市场有相关示例
  • <video/> 组件在非H5端是原生组件,层级高于普通前端组件,覆盖其需要使用cover-view组件。微信基础库 2.4.0+和抖音小程序 已支持 video 组件的同层渲染,也就是video在非全屏时,可以被前端元素通过调节z-index来遮挡,但video全屏时,仍需要cover-view覆盖。

  • 除微信基础库 2.4.0+ 和 抖音小程序,其他情况下非H5的video不能放入scroll-view和swiper。注意参考 原生组件使用限制。

  • 你也可以尝试换个设计思路,如:列表中的视频组件是通过图片与icon模拟的,点击后播放全屏播放视频的方案。详情【video组件会覆盖页面其他非原生组件的设计替代方案示例】

  • H5平台: 在部分浏览器中会强制调用原生播放器播放(如:微信内置浏览器、UC浏览器等),在 x5 内核的浏览器中支持配置同层播放器。