uni-app 动态修改 video播放地址后,连续修改播放地址导致 video黑屏及app闪退

uni-app 动态修改 video播放地址后,连续修改播放地址导致 video黑屏及app闪退

操作步骤:

  • android nvue
  • 案例1:
    1. 第一次加载video正常播放 (video的src有播放地址)
    2. 然后动态修改1次video播放地址,video就黑屏了(但是播放时间还在走)。
    3. 连续动态修改2次 video的播放地址,app就闪退
  • 案例2:
    1. 进入页面video的src为空
    2. 然后动态修改1次video的src播放地址, app就闪退

只能把video关掉(v-if控制开关),再用新地址开启video才能播放
附件示例 代码 ,app闪退时候报错:
reportJSException >>>> exception function:draw android view, exception:WX_RENDER_ERR_LAYER_OVERFLOWLayer overflow limit error: 14 layers!
示例中view的层级非常少,就一层

预期结果:

希望 可以动态修改 video播放地址,连续修改播放地址后 video不黑屏 以及 app不闪退

实际结果:

第一次加载video正常播放,然后动态修改1次video播放地址,video就黑屏了(但是播放时间还在走)。
连续动态修改2次 video的播放地址,app就闪退

bug描述:

android nvue
第一次加载video正常播放,然后动态修改1次video播放地址,video就黑屏了(但是播放时间还在走)。
连续动态修改2次 video的播放地址,app就闪退
只能把video关掉,再用新地址开启video才能播放 (v-if 控制video开启和关闭)
hbx 正式版本 3.2.12.20211029, 安卓系统版本 v4.4.2

相关链接 :

信息类别 信息内容
产品分类 uniapp/App
PC开发环境 Mac
PC开发环境版本 10.13.6
HBuilderX类型 正式
HBuilderX版本 3.2.12
手机系统 Android
手机系统版本 Android 4.4
手机厂商 smartisan
手机机型 T1
页面类型 nvue
Vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

[download file_name-test_video.nvue_.zip url-//ask.dcloud.net.cn/file/download/file_name-dGVzdF92aWRlby5udnVlXy56aXA=__url-Ly9pbWctY2RuLXRjLmRjbG91ZC5uZXQuY24vdXBsb2Fkcy9xdWVzdGlvbnMvMjAyMTExMTMvZGY2MDE5OWJjNDQ5NjU3OGQwYzExZDJiZGRjNGUzZWI=] [download file_name-test-mp4.zip url-//ask.dcloud.net.cn/file/download/file_name-dGVzdC1tcDQuemlw__url-Ly9pbWctY2RuLXRjLmRjbG91ZC5uZXQuY24vdXBsb2Fkcy9xdWVzdGlvbnMvMjAyMTExMTMvNjkwYjY4NzgyNTNmNzFhMDMxMTQ1ZmI4OGNkMzM2M2M=]


更多关于uni-app 动态修改 video播放地址后,连续修改播放地址导致 video黑屏及app闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html

26 回复

HX 3.3.0 alpha bug已修复

更多关于uni-app 动态修改 video播放地址后,连续修改播放地址导致 video黑屏及app闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html


3.3.5版本在小米电视6.0.1的系统上还是崩溃

回复 紫0仓: 新提一个ask,给出可以复现问题的示例

1、3.3版本video的安卓版本性能不行,播放1个小时的长视频非常卡(iphone录制的mov),退回3.2.16就完全没问题 2、https://ask.dcloud.net.cn/article/39136 这个高级设置也无效了吗?想调试参数看看也完全无效

回复 q***@163.com: 出现很多的waiting事件

回复 q***@163.com: 解决了吗 我的也是更换完src地址 会随机不定时的出现调用缓冲事件 然后就闪退

微信小程序也有这个问题

请提供简单可复现的完整示例(上传附件),方便我们快速排查问题哦。 【bug优先处理规则】https://ask.dcloud.net.cn/article/38139

附件已上传

微信小程序也有这个问题

附件示例 代码 ,app闪退时候报错: reportJSException >>>> exception function:draw android view, exception:WX_RENDER_ERR_LAYER_OVERFLOWLayer overflow limit error: 14 layers!
示例中view的层级非常少,就一层

我看看

你好你好,我使用uni开发钉钉程序;使用标签,在外部浏览器可以正常播放,在钉钉小程序黑屏不能播放是因为什么呢

回复 2***@qq.com: 单独提个ask吧。 相关同事会回复你

微信小程序也有这个问题

video 组件加上 codec=“software” 试试还有没有问题

刚测试,加上 codec=“software” 没有问题,可以正常切换播放地址

回复 makeit: 那这就是个已知问题。 上个版本更新导致 android 8.0一下设备在硬件加速模式下,动态切换src 会导致类似问题。 临时解决方案先切换成软解码。 下个版本会修复此问题

那这就是个已知问题。 上个版本更新导致 android 8.0以下设备在硬件加速模式下,动态切换src 会导致类似问题。 临时解决方案先切换成软解码。 下个版本会修复此问题

好的,辛苦啦

微信小程序也有这个问题

这个问题依然存在这个是代码网上找了好多方法都没解决
下边这个是让安卓同事帮忙调试的报错
动态切换video的src大概切换三十次往上就不行了


这个问题解决了吗?我这边也遇到这个问题了,频繁切换视频src应用就崩掉了

这个问题解决了吗?我这边是通过多次切换视频src,会偶发APP闪退

这个问题是Android nvue环境下video组件动态修改src地址时的已知问题,主要原因是底层渲染引擎在处理video源切换时存在内存管理和图层渲染的bug。

从报错信息WX_RENDER_ERR_LAYER_OVERFLOWLayer overflow limit error: 14 layers!可以看出,每次修改video地址都会创建新的渲染层,但没有正确释放之前的图层资源,导致图层溢出引发闪退。

临时解决方案:

  1. 使用v-if强制重新渲染(你已发现的方法):
<video v-if="showVideo" :src="videoSrc"></video>

修改地址时先设置showVideo=false,在nextTick中更新地址后再设置showVideo=true

  1. 使用key强制重建组件
<video :key="videoKey" :src="videoSrc"></video>

每次修改地址时同时更新videoKey值(如时间戳)。

  1. 延迟修改地址: 在修改地址前先暂停播放,添加短暂延迟:
this.videoContext.pause()
setTimeout(() => {
  this.videoSrc = newUrl
}, 100)
回到顶部