更新记录

0.1.0(2026-03-18) 下载此版本

首个正式版本,基于 uni-app 官方 video 组件封装,提供面向业务场景的视频播放能力。

新增

组件与结构

  • 初始化 uni_modules/yvibe-play 插件结构
  • 新增 YvVideo 核心组件,支持 easycom 规范
  • 使用 Vue3 + <script setup> + TypeScript 实现

播放与控制

  • 基础播放:播放、暂停、停止、跳转、全屏、退出全屏
  • 倍速切换:支持 0.5 / 0.75 / 1 / 1.25 / 1.5 / 2 倍速
  • 静音切换:支持初始静音与动态切换
  • 全屏方向:支持横屏(90)、竖屏(0)、退出全屏,可自定义传参

展示状态

  • 空态、加载态、错误态
  • 封面播放态(poster + 播放按钮)
  • 播放结束重播态
  • 错误重试与加载超时兜底

业务能力

  • 播放进度记忆与恢复(本地存储,可配置 key)
  • 同组视频互斥播放(playbackGroupKey 分组)
  • 统一播放器状态透出(idle / poster / loading / playing / paused / ended / error

文档与示例

  • 完整 Props / Events / Methods / States 文档
  • 平台说明、使用提示与发布前检查清单
  • 演示页(基础播放、全屏方向、倍速、静音、互斥播放)

适配

  • 目标平台:小程序、app-vue、app-nvue、Android、iOS、鸿蒙
  • 已验证:微信小程序(基础播放、全屏、倍速、静音、互斥)、Android

平台兼容性

uni-app(4.04)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
× - - - - -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - -

YVibePlay

YVibePlay 是一个面向 uni-app 的视频播放业务组件插件,当前以 YvVideo 为核心组件,底层基于官方 video 组件封装,优先保证多端一致性、业务可用性和后续可扩展性。

当前定位

  • 组件名称:YvVideo
  • 技术栈:Vue3 + <script setup> + TypeScript
  • 组织方式:uni_modules/yvibe-play
  • 适用场景:内容播放页、课程视频、短视频详情、列表页单视频卡片

适配目标

  • 小程序
  • app-vue
  • app-nvue
  • Android
  • iOS
  • 鸿蒙

当前能力

  • 基础播放:播放、暂停、停止、跳转、全屏、退出全屏
  • 展示状态:空态、加载态、错误态、封面播放态、结束重播态
  • 控制能力:倍速切换、静音切换、全屏方向控制
  • 业务能力:进度记忆恢复、加载超时兜底、同组互斥播放
  • 状态能力:统一播放器状态透出

使用示例

<template>
  <view class="page">
    <YvVideo
      ref="videoRef"
      src="https://www.w3schools.com/html/mov_bbb.mp4"
      poster="https://dummyimage.com/750x420/000/fff.png&text=YVibePlay"
      :controls="true"
      :autoplay="false"
      :enable-progress-memory="true"
      :playback-rate="1.25"
      @play="handlePlay"
      @pause="handlePause"
      @statechange="handleStatechange"
    />
  </view>
</template>

<script setup lang="ts">
import { ref } from "vue";
import type {
  YvVideoInstance,
  YvVideoPlayerState,
} from "@/uni_modules/yvibe-play/components/YvVideo";

const videoRef = ref<YvVideoInstance | null>(null);

const handlePlay = () => {
  console.log("play");
};

const handlePause = () => {
  console.log("pause");
};

const handleStatechange = (state: YvVideoPlayerState) => {
  console.log("state", state);
};
</script>

Props

Prop 类型 默认值 说明
src string - 视频地址,必传
poster string "" 视频封面
width string "100%" 组件宽度
height string "420rpx" 组件高度
autoplay boolean false 是否自动播放
loop boolean false 是否循环播放
muted boolean false 是否静音
controls boolean true 是否显示原生控制栏
direction 0 \| 90 \| -90 0 全屏方向
objectFit "contain" \| "fill" \| "cover" "contain" 视频填充模式
initialTime number 0 指定初始播放位置
showFullscreenBtn boolean true 是否显示全屏按钮
showPlayBtn boolean true 是否显示播放按钮
enableProgressGesture boolean true 是否开启进度手势
videoId string "" 自定义 video id
loadingText string "视频加载中..." 加载中文案
loadingTimeoutText string "视频加载超时,请点击重试" 加载超时文案
emptyText string "暂无可播放视频" 空地址文案
errorText string "视频加载失败" 错误文案兜底
retryText string "点击重试" 重试按钮文案
posterPlayText string "点击播放" 封面播放按钮文案
replayText string "重新播放" 结束重播按钮文案
enableProgressMemory boolean false 是否开启进度记忆
progressStorageKey string "" 自定义进度存储 key
loadingTimeout number 15000 加载超时时间,单位毫秒
enablePlaybackMutex boolean false 是否开启同组互斥播放
playbackGroupKey string "default" 互斥播放分组 key
playbackRate 0.5 \| 0.8 \| 1 \| 1.25 \| 1.5 1 当前倍速
showRetry boolean true 错误态是否显示重试按钮
showPosterPlayButton boolean true 是否显示封面播放按钮
showReplayButton boolean true 是否显示结束重播按钮

Events

事件名 参数 说明
play - 开始播放
pause - 暂停播放
ended - 播放结束
error unknown 播放异常
retry - 点击重试后触发
mutechange boolean 静音状态变化
statechange YvVideoPlayerState 播放器统一状态变化
timeupdate TimeUpdateDetail 播放进度更新
fullscreenchange unknown 全屏状态变化
loadedmetadata unknown 元数据加载完成

Methods

通过 ref 调用:

方法名 参数 说明
play() - 播放视频
pause() - 暂停视频
stop() - 停止播放
seek(position) number 跳转到指定秒数
reload() - 重新加载视频
clearProgress() - 清理进度记忆
pauseOtherInGroup() - 主动暂停同组其他实例
setPlaybackRate(rate) VideoPlaybackRate 设置倍速
setMuted(muted) boolean 设置静音
toggleMuted() - 切换静音
requestFullScreen(direction?) 0 \| 90 \| -90 按指定方向进入全屏
exitFullScreen() - 退出全屏
getPlayerState() - 获取当前统一状态

States

播放器对外透出的统一状态 YvVideoPlayerState

状态值 说明
idle 无可播放地址或初始空闲状态
poster 封面待播放状态
loading 视频加载中
playing 正在播放
paused 已暂停
ended 播放结束
error 播放异常

平台说明

  • 小程序中 video 属于原生组件,复杂浮层和层级覆盖能力有限。
  • 微信小程序全屏横屏能力依赖基础库、机型和系统旋转设置,建议真机验证。
  • requestFullScreen({ direction }) 在部分平台支持方向参数,H5 等平台可能忽略该参数。
  • 进度记忆默认使用本地存储,建议业务层在切换账号或更换内容时按需清理。
  • 多实例互斥播放依赖 playbackGroupKey 分组,同组内才会互斥。

当前验证记录

平台 当前状态 说明
微信小程序 已验证 已完成基础播放、全屏方向、倍速、静音、互斥播放可视验证
app-vue 待验证 建议重点验证全屏、方向控制、进度记忆
app-nvue 待验证 建议重点验证样式尺寸、全屏、原生组件层级表现
Android 待验证 建议结合 app-vue / app-nvue 真机验证
iOS 待验证 建议重点验证全屏方向与自动恢复进度
鸿蒙 待验证 建议确认当前 HBuilderX / uni-app 版本支持情况后验证

已知限制

  • 当前默认以官方 video 组件能力为主,不包含自定义复杂控制栏。
  • 原生 video 组件在小程序和部分 App 场景下层级较高,不适合做复杂浮层覆盖。
  • 加载超时、倍速、全屏方向等能力在不同平台和基础库上的表现可能存在差异。
  • 文档中的能力说明基于当前实现版本,发布前建议再次做目标平台回归验证。

演示说明

当前仓库首页演示已覆盖:

  • 基础播放、暂停、跳转
  • 全屏方向切换
  • 倍速切换
  • 静音切换
  • 统一状态展示
  • 双视频同组互斥播放

发布前检查清单

  • [ ] 确认 uni_modules/yvibe-play/package.json 中版本号与发布内容一致
  • [ ] 确认 READMECHANGELOG、示例代码与当前实现一致
  • [ ] 清理调试性代码、临时资源和无效文案
  • [ ] 在目标平台完成至少一轮真实运行验证
  • [ ] 重点验证全屏、重试、进度恢复、互斥播放、倍速和静音切换
  • [ ] 如需上插件市场,补充作者信息、封面图、版本说明和平台截图

版本记录

  • 版本变更请维护在 uni_modules/yvibe-play/CHANGELOG.md

目录说明

  • 当前目录采用 uni_modules/yvibe-play 规范组织。
  • displayName 保持为 YVibePlay,便于品牌展示。
  • 实际发布到插件市场前,可按作者标识调整为更完整的插件 id
  • 插件市场发布文案草稿请查看 uni_modules/yvibe-play/PLUGIN_MARKET_COPY.md

隐私、权限声明

1. 本插件需要申请的系统权限列表:

本插件不申请任何系统权限。视频播放由 uni-app 内置 video 组件实现,网络访问由宿主应用统一管理。

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

本插件不采集用户个人数据,不向任何第三方服务器发送数据。 进度记忆功能(enableProgressMemory)使用 uni-app 本地存储 API(setStorageSync/getStorageSync)在用户设备本地保存播放进度(currentTime、duration),仅用于下次打开时恢复播放位置。该数据仅存储在用户设备本地,不会上传或传输至任何服务器。

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

暂无用户评论。