更新记录
1.0.0(2026-08-26)
新版本发布
1.0.0(2026-08-26)
平台兼容性
uni-app(3.8.2)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| × | √ | √ | √ | √ | × | √ | √ | × |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| × | × | × | × | × | × | × | × | × | - | × | × |
su-video-stream 圆角流媒体视频播放器
基于 renderjs + HTML5 video 的自定义圆角视频组件。App 端远程 MP4 直链边下边播(HTTP Range),无需整文件下载;内置播放/暂停、进度、倍速、全屏、3 秒隐藏控件、选集连播。
适合教育、短剧、课程详情、跟读学习等需要自定义控制条的场景。uni-app 原生 <video> 在 App WebView 上圆角、控件、连播都不易做细,本组件专门解决这些问题。
使用方法(完整示例)见同目录 usage.md。 下文也有快速接入说明。
使用方法
1. 安装
从插件市场导入到项目后,目录为:
uni_modules/su-video-stream
无需改 pages.json,符合 easycom,页面里直接写标签。
2. 最简代码
<template>
<su-round-video-stream
v-if="src"
uid="demo"
:src="src"
:poster="poster"
:width="413"
:height="233"
:border-radius="16"
@ended=""
></su-round-video-stream>
</template>
<script setup>
import { ref } from 'vue';
const src = ref('https://example.com/video.mp4');
const poster = ref('https://example.com/cover.jpg');
function () {
console.log('播放结束');
}
</script>
3. 主动播放 / 暂停 / 跳转
<su-round-video-stream ref="videoRef" uid="demo" :src="src"></su-round-video-stream>
const videoRef = ref(null);
videoRef.value.play();
videoRef.value.pause();
videoRef.value.stop();
videoRef.value.seek(10);
const info = videoRef.value.getPlaybackInfo(); // { currentTime, duration, playing }
连播、跟读、多实例、大文件自动播等完整示例见 usage.md。
插件优势
-
流媒体起播更快
App 端不先downloadFile整包,远程 MP4 直接交给 HTML5 video 边下边播,长视频首帧更快。 -
完整自定义控制条
播放/暂停、进度拖动、时长、倍速(0.5x~2x)、全屏。可隐藏原生 controls,避免系统大播放按钮。 -
App / H5 一套 UI
App 端控件在 renderjs 内绘制;H5 用 vue 层控件。对外 props / 事件 / ref 方法一致。 -
3 秒无操作自动隐藏控件
点击视频任意区域重新显示,更接近系统播放器体验。 -
连播能力
传入episode-config,App 端在 renderjs 内切下一集,减少逻辑层卡顿。 -
跟读友好
支持muted、@timeupdate、getPlaybackInfo(),方便跟读区间弹窗、静音配音。 -
圆角裁剪可靠
用容器 overflow + HTML5 video 实现圆角,避免 App 原生 video 圆角失效。 -
命令式控制
ref.play()/pause()/stop()/seek(time),方便页面与录音、发音互斥。 -
同页多实例
通过uid隔离 DOM id,一页可放多个播放器。 -
即插即用
符合 easycom,导入 uni_modules 后直接写<su-round-video-stream>。
支持的平台
| 平台 | 支持 | 说明 |
|---|---|---|
| App-Android(vue) | 支持 | 主力,renderjs + HTML5 video |
| App-iOS(vue) | 支持 | 同上 |
| H5 | 支持 | 浏览器 HTML5 video |
| App-nvue | 不支持 | 依赖 renderjs,仅 vue 页 |
| 微信 / 各家小程序 | 不支持 | 小程序无 renderjs |
| 快应用 / 鸿蒙 uvue | 不支持 | — |
运行条件:
- uni-app Vue3
- 仅 vue 页面(非 nvue)
- App 端建议真机或自定义基座调试 renderjs
- 远程视频建议 MP4,CDN 支持 HTTP Range,推荐 faststart(
moov在文件头)
Props
| 属性 | 类型 | 默认 | 说明 |
|---|---|---|---|
| src | String | '' |
视频地址(http/https 或本地路径) |
| poster | String | '' |
封面图 |
| width / height | Number | 295.57 / 155.17 | 尺寸(rpx) |
| borderRadius | Number | 16 | 圆角(rpx) |
| autoplay | Boolean | false | 自动播放 |
| muted | Boolean | false | 静音 |
| loop | Boolean | false | 循环当前视频 |
| objectFit | String | 'contain' |
建议 contain,勿用 cover 裁切画面 |
| objectPosition | String | 'center center' |
画面对齐 |
| controls | Boolean | false | 是否显示 HTML5 原生控件(一般关) |
| showControlBar | Boolean | true | 是否显示自定义控制条 |
| playIcon / pauseIcon | String | 插件内置图标 | 居中播放/暂停图 |
| playBtnSize | Number | 59.11 | 播放按钮尺寸 rpx |
| centerPlayOffsetRpx | Number | 0 | 居中按钮上移,避免挡进度条 |
| progressActiveColor | String | #B7DBFD |
进度条已播颜色 |
| progressBgColor | String | rgba(255,255,255,0.5) |
进度条底色 |
| speedOptions | Array | [0.5,1,1.25,1.5,2] |
倍速列表 |
| uid | String/Number | '0' |
同页多实例必须不同 |
| episodeConfig | Object | {} |
连播配置,见下 |
| autoHideControls | Boolean | true | 3 秒无操作隐藏控件 |
| controlPadBottomRpx | Number | 10 | 控制条底边距 |
| quickAutoplay | Boolean | false | App 自动播:true 在 canplay 即播(大文件更快);false 等 canplaythrough(更稳) |
episodeConfig 连播
{
isLooping: true, // 是否连播下一集
isDescending: false,
currentIndex: 0,
total: 10,
nextIndex: 1,
nextSrc: 'https://xxx/ep2.mp4',
nextPoster: 'https://xxx/ep2.jpg',
}
isLooping: true 且提供 nextSrc 时,当前集结束后 App 端会在 renderjs 内切源并触发 @episodeswitch。
事件
| 事件 | 说明 |
|---|---|
| play / pause | 播放 / 暂停 |
| ended | 当前视频结束 |
| loaded | 元数据加载完成,含 duration |
| timeupdate | 进度更新 { currentTime, duration } |
| error | 加载/播放失败 |
| fullscreenchange | { isFullscreen } |
| speedchange | 倍速变化 |
| episodeswitch | 连播切集 { nextIndex, isLooping } |
ref 方法
| 方法 | 说明 |
|---|---|
| play() | 播放 |
| pause() | 暂停 |
| stop() | 暂停并回到 0 |
| seek(time) | 跳转到秒 |
| getPlaybackInfo() | { currentTime, duration, playing } |
videoRef.value.play();
videoRef.value.pause();
videoRef.value.seek(12);
const info = videoRef.value.getPlaybackInfo();
插槽
overlay(或默认插槽):盖在视频上的自定义层,pointer-events: none,不拦截点击。
<su-round-video-stream :src="src" uid="1">
<view>字幕或角标</view>
</su-round-video-stream>
典型场景
1. 课程 / 动画详情
设 src、poster、width/height,听 @ended 提示下一集;连播用 episode-config。
2. 跟读 / 配音
:muted="true" 切无声;@timeupdate 对比跟读起止秒数弹录音。
3. 大文件场景视频(约数 MB 以上)
:autoplay="true" 且 :quick-autoplay="true",在 canplay 即起播,缩短「加载中」等待。
注意事项
- 同页多个播放器必须传不同
uid,否则 host DOM id 冲突。 - 仅 vue 页;App 调试请用真机 / 自定义基座,HBuilder 内置基座对 renderjs 支持不完整。
- 容器 CSS 高度与
height对齐,减少黑边。 - 流式播放依赖 CDN Range 与 MP4 faststart;若听感丢开头(只剩后半段),可改回「先下载再播」方案,或关闭
quick-autoplay。 - 普通授权版经云打包加密;本地自定义基座可试用,正式包需购买后云打包。
- 默认图标位于插件
static/,可自行传入playIcon/pauseIcon覆盖。
目录结构
uni_modules/su-video-stream/
├── package.json
├── readme.md
├── usage.md # 完整使用方法
├── changelog.md
├── license.md
├── static/
│ ├── play.png
│ └── pause.png
└── components/
└── su-round-video-stream/
└── su-round-video-stream.vue
价格说明
在 package.json → dcloudext.sale 中已预设:
- 普通授权版:9.90 元
- 源码授权版:49.90 元
发布前请按实际定价修改。HBuilderX 发布界面若暂不支持前端组件改价,以 package.json 为准。
发布步骤:HBuilderX 中右键 uni_modules/su-video-stream → 提交到插件市场。

收藏人数:
购买源码授权版(
试用
使用 HBuilderX 导入示例项目
赞赏(0)
下载 0
赞赏 0
下载 12534778
赞赏 1947
赞赏
京公网安备:11010802035340号