uni-app中video组件的initial-time属性在微信ios H5不生效,且@loadedmetadata事件首次不执行,Android和PC浏览器均正常

uni-app中video组件的initial-time属性在微信ios H5不生效,且@loadedmetadata事件首次不执行,Android和PC浏览器均正常

示例代码:

<video  
    id="myVideo"  
    :src="videoInfo.url"  
    style="width: 100%; height: 700rpx"  
    :initial-time="initialTime"  
    :duration="videoInfo.videoAllTime"  
    :enable-progress-gesture="false"  
    :show-fullscreen-btn="false"  
    @play="handlePlay"  
    @pause="onPause"  
    @ended="onEnded"  
    @timeupdate="onTimeUpdate"  
    @waiting="onWaiting"  
    [@loadedmetadata](/user/loadedmetadata)="onLoadedmetadata"  
    @error="onError"  
>
</video>

操作步骤:

  • 从A页面获取数据,如url,视频初始播放位置,然后跳转B页面进行视频播放,并且定位到指定位置

预期结果:

  • 视频定位至指定位置播放,并且会执行[@loadedmetadata](/user/loadedmetadata)事件

实际结果:

  • 不会从指定位置播放(还是从0开始),并且首次[@loadedmetadata](/user/loadedmetadata)事件不会执行(第二次会执行)

bug描述:

  • video中的initial-time属性在微信ios H5中不生效,并且[@loadedmetadata](/user/loadedmetadata)事件首次不会执行

更多关于uni-app中video组件的initial-time属性在微信ios H5不生效,且@loadedmetadata事件首次不执行,Android和PC浏览器均正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app中video组件的initial-time属性在微信ios H5不生效,且@loadedmetadata事件首次不执行,Android和PC浏览器均正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在 uni-app 中,video 组件的 initial-time 属性在微信 iOS H5 环境下不生效,并且 @loadedmetadata 事件首次不执行,这可能是由于微信 iOS 环境的特殊处理导致的。以下是一些可能的解决方案和排查步骤:

1. 检查微信 iOS 环境下的兼容性

微信 iOS 环境对 H5 的支持可能存在一些限制或特殊处理,尤其是在视频播放方面。可以尝试以下方法:

  • 使用 controls 属性:确保 video 组件的 controls 属性为 true,以便用户可以手动控制视频播放。
  • 使用 autoplay 属性:尝试添加 autoplay 属性,确保视频自动播放,可能会触发 @loadedmetadata 事件。
  • 使用 src 动态赋值:尝试在 mountedonReady 生命周期中动态设置 src,以确保视频资源加载完成。

2. 使用 @ready 事件代替 @loadedmetadata

如果 @loadedmetadata 事件在首次不执行,可以尝试使用 @ready 事件,它通常会在视频资源加载完成后触发。

<template>
  <video
    :src="videoSrc"
    :initial-time="initialTime"
    controls
    @ready="onVideoReady"
  ></video>
</template>

<script>
export default {
  data() {
    return {
      videoSrc: 'your-video-url.mp4',
      initialTime: 10, // 初始时间
    };
  },
  methods: {
    onVideoReady(event) {
      console.log('Video is ready', event);
      // 在这里处理视频准备完成后的逻辑
    },
  },
};
</script>

3. 动态设置 initial-time

如果 initial-time 属性在 iOS 环境下不生效,可以尝试在 @ready@loadedmetadata 事件中手动设置视频的当前时间。

<template>
  <video
    :src="videoSrc"
    controls
    @ready="onVideoReady"
  ></video>
</template>

<script>
export default {
  data() {
    return {
      videoSrc: 'your-video-url.mp4',
      initialTime: 10, // 初始时间
    };
  },
  methods: {
    onVideoReady(event) {
      console.log('Video is ready', event);
      // 手动设置视频的当前时间
      event.target.currentTime = this.initialTime;
    },
  },
};
</script>

4. 使用 wx.createVideoContext 手动控制

在微信小程序环境下,可以使用 wx.createVideoContext 来手动控制视频播放,但在 H5 环境下可能不适用。如果 uni-app 支持微信小程序的 API,可以尝试使用 uni.createVideoContext 来控制视频。

const videoContext = uni.createVideoContext('myVideo', this);

// 在视频准备完成后手动设置时间
videoContext.seek(this.initialTime);

5. 检查微信 iOS 环境的缓存问题

微信 iOS 环境可能存在缓存问题,导致视频资源加载异常。可以尝试在视频 URL 后面添加时间戳或其他随机参数来避免缓存。

this.videoSrc = 'your-video-url.mp4?t=' + Date.now();

6. 使用 uni.getSystemInfo 获取环境信息

可以通过 uni.getSystemInfo 获取当前运行环境,判断是否为微信 iOS 环境,然后针对性地处理。

uni.getSystemInfo({
  success(res) {
    if (res.platform === 'ios' && res.app === 'WeChat') {
      console.log('Running on WeChat iOS');
      // 针对微信 iOS 环境的特殊处理
    }
  },
});

7. 使用 video 组件的 seek 方法

@ready@loadedmetadata 事件中,使用 video 组件的 seek 方法手动跳转到指定时间点。

onVideoReady(event) {
  const video = event.target;
  video.seek(this.initialTime);
}
回到顶部