更新记录
1.0.4(2025-09-09)
- 更新Android播放器事件回调
1.0.3(2025-09-05)
- 支持鸿蒙
- 调整接口
1.0.2(2025-08-23)
- 替换资源文件
查看更多
平台兼容性
uni-app(4.07)
Vue2 |
Vue3 |
Chrome |
Safari |
app-vue |
app-nvue |
Android |
iOS |
鸿蒙 |
√ |
√ |
- |
- |
√ |
√ |
5.0 |
√ |
√ |
微信小程序 |
支付宝小程序 |
抖音小程序 |
百度小程序 |
快手小程序 |
京东小程序 |
鸿蒙元服务 |
QQ小程序 |
飞书小程序 |
快应用-华为 |
快应用-联盟 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
uni-app x(4.07)
Chrome |
Safari |
Android |
iOS |
鸿蒙 |
微信小程序 |
- |
- |
5.0 |
√ |
√ |
- |
其他
videoJS万能视频播放器
集成步骤
- 拷贝demo里的nativeResources、AndroidManifest.xml文件到项目根目录
- 集成插件,集成插件步骤请参考
https://www.cnblogs.com/wenrisheng/p/18323027
文档
组件
<!-- #ifdef APP-HARMONY -->
<embed :style="'width:'+width+'px;height:'+height+'px;'" tag="videoplayer" :options="options"
@onvideoevent="onVideoEvent"></embed>
<!-- #endif -->
<!-- #ifndef APP-HARMONY -->
<wrs-uts-video ref='videoplayer' :params="params" :style="'width:'+width+'px;height:'+height+'px;'"
@onLoadView="onLoadView" @onVideoEvent="onVideoEvent"></wrs-uts-video>
<!-- #endif -->
- 使用了该组件的页面需要用nvue或uvue
- 属性params是json格式的字符串
let src = urlArray[urlArray.length - 1]
let poster = "https://vjs.zencdn.net/v/oceans.png"
// 使用app本地视频和封面,本地视频路径采用绝对路径,如/xxx/xxx/xxx.mp4
// src = getResourcePath("/static/test.mp4")
// poster = getResourcePath("/static/logo.png")
let params = {}
params.src = src // 视频链接,支持云端或本地视频
params.poster = poster // 视频封面,支持云端或本地视频
params.autoplay = true // 是否自动播放,这个属性适配大部分手机,不一定适配所有手机,
params.controls = true // 是否显示控制条
params.initSeek = 0 // 从第几秒开始播放
params.menusLeft = [{ // 视频顶部左边自定义按钮,按钮的点击事件通过组件onVideoEvent来回调
title: "X ", // 按钮标题
id: 0 // 按钮标识符
}]
params.menusRight = [{ // 视频顶部右边自定义按钮,按钮的点击事件通过组件onVideoEvent来回调
title: "收藏 ",
id: 1
},
{
title: "投屏",
id: 2
}
]
let business = ""
let params = {}
if (this.isAndroid) {
business = e.detail.params.dynamicJSONFields.business
params = e.detail.params.dynamicJSONFields.params.dynamicJSONFields
} else {
business = e.detail.params.business
params = e.detail.params.params
}
if (business != "") {
this.showMsg("onVideoEvent business:" + business)
}
switch (business) {
case "onComponentRead": {
// 视频组件加载完
this.showMsg("视频组件加载完:" + business)
}
break;
// 退出全屏
case "onExitFullWindow": {
this.showMsg("退出全屏:" + business)
}
break;
case "onEnterFullWindow": {
this.showMsg("进入全屏:" + business)
}
break;
case "": {
// {"current":4.418021303001639,"duration":7337.24,"progress":0.0006020861799527159}
// 播放进度
console.log("播放进度:" + JSON.stringify(params))
}
break;
case "menuLeftClick": {
this.showMsg("点击了左边按钮:" + JSON.stringify(params))
}
break;
case "menuRightClick": {
this.showMsg("点击了右边按钮:" + JSON.stringify(params))
}
break;
default:
break;
}
let newParams = {}
newParams.callVideoPlayerMethod = {
methodName: "seek",
params: {
time: 30
}
}
let newParamsStr = this.formatNewParams(newParams)
// android、ios
this.params = newParamsStr
// 鸿蒙
this.options = {
params: newParamsStr
}
let newParams = {}
newParams.callVideoPlayerMethod = {
methodName: "play"
}
let newParamsStr = this.formatNewParams(newParams)
// android、ios
this.params = newParamsStr
// 鸿蒙
this.options = {
params: newParamsStr
}
let newParams = {}
newParams.callVideoPlayerMethod = {
methodName: "pause"
}
let newParamsStr = this.formatNewParams(newParams)
// android、ios
this.params = newParamsStr
// 鸿蒙
this.options = {
params: newParamsStr
}
let src = "https://xxx/xxx.u3u8"
let newParamsStr = this.formatNewParams(newParams)
// android、ios
this.params = newParamsStr
// 鸿蒙
this.options = {
params: newParamsStr
}
小窗口画中画播放,暂不支持鸿蒙
- 是否已经开启小窗口权限,仅支持Android,iOS不需要判断
let hasPermission = canDrawOverlays()
- 开启小窗口播放,目前iOS采用的是应用内的小窗口,即app在前台运行时会显示小窗口,app在后台运行时会隐藏小窗口
let props = {}
props.src = "https://v2.tlkqc.com/202505/23/J2dwuThNJ074/video/index.m3u8"
props.poster = "https://vjs.zencdn.net/v/oceans.png" // 封面
props.autoplay = false
props.controls = true
props.initSeek = 0
let params = {}
params.props = props // props参数跟播放器组件的params一样,参考上面
params.deleteBtn = {
visibility: true // 左上角是否显示删除按钮,如需替换删除按钮,可以替换nativeResources文件夹下的图片
}
params.tag = 0 // 用来标识小窗口
showPicInPic(params, (resp) => {
})
let tag = 0 // 小窗口标识
deletePicInPic(tag, (resp) => {
})