uni-app 使用uni.chooseVideo选中IOS里【照片】的由本机拍摄的实际时长和展示时长不一致的视频时,会导致整个APP闪退
uni-app 使用uni.chooseVideo选中IOS里【照片】的由本机拍摄的实际时长和展示时长不一致的视频时,会导致整个APP闪退
示例代码:
uni.chooseVideo({
sourceType: ['album', 'camera'],
success: res => {
console.log('success', res)
},
fail: err => {
console.error('fail', err)
},
});
操作步骤:
- 用IOS手机(我们称为【手机C】) 拍摄一段视频,检查其播放时长和展示时长是否一致。我们保留放时长和展示时长不一致的视频作为测试数据,此数据我们称作【视频A】。
- 打包一个可以调用uni.chooseVideo的APP在刚刚这台IOS【手机C】 上。授权使用所有的图片后,
- 利用该APP调用uni.chooseVideo选择刚刚的测试数据 视频A。
预期结果:
- 会打印出 success字符串和res , 或 fail字符串和错误err
实际结果:
- 没有打印出任务的log,APP直接闪退。
bug描述:
- 使用uni.chooseVideo选中 IOS 里【照片】的由本机拍摄的 实际时长和展示时长不一致的视频时,会导致整个APP闪退。
- 如选中【图IOS1】展示时长0:01而实际播放【图IOS2】时长是0:04的视频。
- 必须是 存在于本机【照片】的 由本机拍摄的视频。
- PS: 当把本机隔空投送到其他手机,在其他手机同一个APP调用uni.chooseVideo是没问题的。此时,该视频在其他手机 实际时长和展示时长是一样的,都是 0:04.
- 测试设备:iPhone12(ios15.1.1)、iPhone8(ios15.1)
| 信息类别 | 信息内容 |
|---|---|
| 产品分类 | uniapp/App |
| PC开发环境 | Windows |
| PC操作系统版本 | Windows 10 专业版20H2 |
| HBuilderX类型 | 正式 |
| HBuilderX版本 | 3.2.16 |
| 手机系统 | iOS |
| 手机系统版本 | iOS 15 |
| 手机厂商 | 苹果 |
| 手机机型 | iPhone12、iPhone8 |
| 页面类型 | vue |
| vue版本 | vue2 |
| 打包方式 | 云端 |
| 项目创建方式 | HBuilderX |

更多关于uni-app 使用uni.chooseVideo选中IOS里【照片】的由本机拍摄的实际时长和展示时长不一致的视频时,会导致整个APP闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html
没人解决这个问题 吗
更多关于uni-app 使用uni.chooseVideo选中IOS里【照片】的由本机拍摄的实际时长和展示时长不一致的视频时,会导致整个APP闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html
题主解决这个问题了没有
题主解决这个问题了没有
没呢
是否换一台手机测试过 拍摄的视频
我看你的截图视频信息中 hevc 视频时长 也是0.01
试过,我分别用 iPhone12、iPhone8拍的视频,如果时长和真实的不一致,就会产生这个问题。
你看一下倒数第二张视频截图,播放结束时是 0:04秒时长,这个是正确时长,和 hevc的是不一致的。
我用同一台手机 的微信选取同一个有问题的视频发送给好友,唤起微信 视频选取界面时,能够正常显示0:04这个时长。
而 HBUILDERX 打包的APP视频选取页,显示同一个视频的时长 是 0:01
不遇到根本不知道 题主解决了没有
还没解决吗
回复 b***@bansir.cn: 对啊,后续官方没有回复了。
这是一个已知的iOS系统原生API兼容性问题。当iOS设备拍摄的视频元数据中的展示时长与实际播放时长不一致时,调用系统相册选择器选择此类视频会导致应用崩溃。
问题根源: iOS系统相册选择器在返回视频信息时,会尝试读取视频的元数据。如果视频的实际播放时长与元数据中记录的展示时长存在差异,系统API在处理过程中可能出现异常,导致应用闪退。
解决方案:
-
临时规避方案:在调用
uni.chooseVideo时,通过compressed参数启用视频压缩。压缩过程会重新编码视频,修正元数据不一致的问题。uni.chooseVideo({ sourceType: ['album', 'camera'], compressed: true, // 启用压缩 success: res => { console.log('success', res) }, fail: err => { console.error('fail', err) } }); -
长期解决方案:建议在用户选择视频后,使用
uni.compressVideo对视频进行统一压缩处理。这不仅能避免闪退问题,还能减少视频体积,提升应用性能。uni.compressVideo({ src: videoPath, quality: 'medium', success: res => { console.log('压缩成功', res.tempFilePath) } });

