uni-app video 在苹果nvue页面设置poster封面图点击播放时会明显闪一下黑色再播放
uni-app video 在苹果nvue页面设置poster封面图点击播放时会明显闪一下黑色再播放
| 项目信息 | 详情 |
|---|---|
| 产品分类 | uniapp/App |
| PC开发环境 | Windows |
| PC版本号 | 23H2 |
| HBuilderX | 正式 |
| HBuilderX版本 | 4.84 |
| 手机系统 | iOS |
| 手机版本号 | iOS 26 |
| 手机厂商 | 苹果 |
| 手机机型 | iPhone 13 |
| 页面类型 | nvue |
| Vue版本 | vue3 |
| 打包方式 | 云端 |
| 项目创建方式 | HBuilderX |
示例代码:
<template>
<view>
<video :src="src" :poster="poster" autoplay></video>
</view>
</template>
<script setup>
import { ref } from 'vue';
const src = ref('https://alimp4.shiboshuzi.com/f0234921a10371ef88906732b68e0102/3f365b3da1c2498ea90179bf7477ee50-c6d4ac45138baa09cba31ccf262ac42f-ld.mp4')
const poster = ref('https://alimp4.shiboshuzi.com/a0ece1b1095c71f0bfba5017f0e80102/snapshots/dbe529e3979a45f99d28683e38eb6838-00001.jpg')
</script>
<style scoped lang="scss"></style>
操作步骤:
新建uniapp vue3项目,视频播放页面使用nvue,我用的list组件来写的视频上下滑动,你可以用swiper来复现
预期结果:
在ios端设置视频封面poster的时候播放视频时要无缝播放该视频而不是闪一下黑色的再播放,安卓就比较顺畅,主要的问题视频我都已经缓存到本地,也是使用本地地址来播放的视频
实际结果:
在ios端设置视频封面poster的时候播放视频会闪一下黑色再播放视频
更多关于uni-app video 在苹果nvue页面设置poster封面图点击播放时会明显闪一下黑色再播放的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1 回复
更多关于uni-app video 在苹果nvue页面设置poster封面图点击播放时会明显闪一下黑色再播放的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个iOS nvue页面中video组件的已知问题,主要原因是iOS原生视频播放器在poster和视频内容切换时的渲染机制导致的。
问题分析:
- iOS系统在视频开始播放时,会先移除poster封面图,然后初始化视频解码器
- 这个切换过程会短暂显示黑色背景,直到第一帧视频画面渲染完成
- 在Android上这个过渡相对平滑,但iOS上较为明显
解决方案:
- 使用自定义封面层替代poster属性
<template>
<view class="video-container">
<video :src="src" @play="onVideoPlay" autoplay></video>
<image v-if="showPoster" :src="poster" class="poster-image" />
</view>
</template>
<script setup>
import { ref } from 'vue';
const src = ref('your_video_url')
const poster = ref('your_poster_url')
const showPoster = ref(true)
const onVideoPlay = () => {
showPoster.value = false
}
</script>
<style scoped>
.video-container {
position: relative;
width: 750rpx;
height: 422rpx;
}
.poster-image {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
</style>
- 预加载视频首帧
通过设置视频的
preload="auto"属性,让视频提前加载,减少黑屏时间:
<video :src="src" preload="auto" autoplay></video>

