uni-app中使用video标签playbackRate设置倍速,H5端正常,但打包成app或在模拟器及真机上运行时playbackRate不起作用并报错

发布于 1周前 作者 htzhanglong 来自 uni-app

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


9 回复

华为平板 也复现了 没报错 但就是不生效


请问解决了吗?我这也是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或相关平台后续提供了更直接的倍速播放支持,建议优先使用官方提供的方法。

由于不同平台的差异,上述方法可能无法在所有平台上完美工作。在实际开发中,建议根据具体平台进行适配和优化。

回到顶部