uni-app中使用video标签playbackRate设置倍速,H5端正常,但打包成app或在模拟器及真机上运行时playbackRate不起作用并报错
uni-app中使用video标签playbackRate设置倍速,H5端正常,但打包成app或在模拟器及真机上运行时playbackRate不起作用并报错
产品分类
uniapp/App
开发环境、版本号和项目创建方式
项目 | 信息 |
---|---|
PC开发环境操作系统 | Windows |
PC开发环境操作系统版本号 | win11 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 3.99 |
手机系统 | Android |
手机系统版本号 | Android 13 |
手机厂商 | vivo |
手机机型 | vivos6 |
页面类型 | vue |
vue版本 | vue2 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
bug描述
doubleSpeed() {
let videoContext = uni.createVideoContext('myVideo', this) //这里的'myVideo'要和上方video标签的id相对应
console.log(videoContext, "测试使用另一种倍速播放")
videoContext.playbackRate(2) //括号里面可以设置倍速
console.log("测试使用另一种倍速播放")
},
报错:
14:51:14.880 [Vue warn]: Property or method "toJSON" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property. See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.
操作步骤
无
预期结果
无
实际结果
wu
华为平板 也复现了 没报错 但就是不生效
请问解决了吗?我这也是h5预览倍速正常,但打包真机就没效果了。。。急呀!
这个我之前试过了,但是弹幕发现又不行了
即要倍速又要弹幕
回复 2***@qq.com: 最后怎么处理倍速的?
回复 菜菜2: 我换了个视频测试,发现是视频问题,可以倍速
还没修复?
在uni-app中使用<video>
标签的playbackRate
属性设置倍速播放时,如果在H5端正常,但在打包成App或在模拟器及真机上运行时playbackRate
不起作用并报错,这通常是由于不同平台的浏览器内核或原生组件支持差异导致的。
以下是一些可能的解决方案,以及如何在uni-app中尝试实现倍速播放的代码示例:
1. 使用uni-app提供的API
uni-app提供了一些跨平台的API,但直接控制视频播放倍速的API并不在列。不过,你可以尝试使用plus.video.createPlayer
(针对5+ App)来创建视频播放控件,并尝试设置倍速。不过需要注意的是,这个方法并非所有平台都支持倍速播放。
2. 自定义倍速播放逻辑
由于原生<video>
标签在某些平台上不支持playbackRate
,你可以尝试通过调整播放时间来实现倍速播放的效果。以下是一个简单的示例,通过JavaScript手动控制播放时间来实现倍速播放:
<template>
<view>
<video :src="videoSrc" ref="video" @loadedmetadata="onLoadedMetadata" @timeupdate="onTimeUpdate"></video>
<button @click="changePlaybackRate(1.0)">1x</button>
<button @click="changePlaybackRate(1.5)">1.5x</button>
<button @click="changePlaybackRate(2.0)">2x</button>
</view>
</template>
<script>
export default {
data() {
return {
videoSrc: 'path/to/your/video.mp4',
currentRate: 1.0,
lastTime: 0,
};
},
methods: {
onLoadedMetadata() {
this.lastTime = this.$refs.video.currentTime;
},
onTimeUpdate() {
const video = this.$refs.video;
const elapsed = video.currentTime - this.lastTime;
video.currentTime = this.lastTime + elapsed * this.currentRate;
this.lastTime = video.currentTime;
},
changePlaybackRate(rate) {
this.currentRate = rate;
},
},
};
</script>
注意事项
- 上述方法通过手动调整播放时间来实现倍速,可能会带来一些性能问题或播放不同步的情况。
- 在实际项目中,你可能需要更复杂的逻辑来处理播放、暂停、跳转等操作,以及处理不同平台之间的差异。
- 如果uni-app或相关平台后续提供了更直接的倍速播放支持,建议优先使用官方提供的方法。
由于不同平台的差异,上述方法可能无法在所有平台上完美工作。在实际开发中,建议根据具体平台进行适配和优化。