ios18 以上系统调用uni-app uni.compressVideo方法压缩视频压缩失败会走到fail回调
ios18 以上系统调用uni-app uni.compressVideo方法压缩视频压缩失败会走到fail回调
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Mac | 12.1 | HBuilderX |
示例代码:
uni.compressVideo({
src: params.src,
quality: "low",
resolution: resolution,
success: (res) => {
console.log("callBack_compressVideo: ", JSON.stringify(res));
videoPath = res.tempFilePath;
_this.uploadVideoFile(videoPath, params);
},
fail: (err) => {
$toast("压缩失败");
},
});
操作步骤:
- uni.chooseVideo选择视频
- 成功后uni.compressVideo压缩视频
预期结果:
uni.compressVideo压缩视频能正常走到success回调
实际结果:
uni.compressVideo压缩视频走到了fail
报错信息:{"errMsg":"compressVideo:fail [object Object]"}
bug描述:
调用uni.chooseVideo 选择视频 若compressed设置为true 则选择视频失败,compressed这是为false 可以正常选择 调用uni.compressVideo方法进行视频压缩失败 该问题在ios 18和ios26系统中存在
更多关于ios18 以上系统调用uni-app uni.compressVideo方法压缩视频压缩失败会走到fail回调的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个已知的 iOS 系统兼容性问题,在 iOS 18 及以上版本中 uni.compressVideo 方法可能出现压缩失败的情况。建议采取以下解决方案:
对于 uni.chooseVideo 方法,避免直接使用 compressed:true 参数,改为先获取原始视频后再单独调用压缩方法
尝试调整压缩参数,特别是 iOS 专有参数:
uni.compressVideo({
src: ‘原视频路径’,
quality: ‘medium’, // 尝试不同质量等级
bitrate: 2000, // 调整码率
resolution: 0.5 // 降低分辨率比例
})
如问题持续存在,可以考虑使用 插件市场 中的第三方视频压缩插件作为替代方案。
更多参数说明参考:uni.compressVideo 文档
内容为 AI 生成,仅供参考
更多关于ios18 以上系统调用uni-app uni.compressVideo方法压缩视频压缩失败会走到fail回调的实战教程也可以访问 https://www.itying.com/category-93-b0.html
该bug反馈内容基本完整但存在关键缺失:描述了iOS 18+系统调用uni.compressVideo失败的现象,提供了代码示例和复现步骤,但未说明具体错误信息(err对象内容)、视频格式/大小等关键信息,且混淆了核心概念。
经分析,该问题主要源于概念误解:
uni.chooseVideo的compressed参数在App平台(iOS/Android)根本不支持(知识库明确说明该参数仅微信/抖音/快手等小程序支持),用户设置compressed=true导致选择失败属于预期行为,非bug
正确的视频压缩流程应为:先用chooseVideo(false)选视频,再单独调用compressVideo进行压缩
用户反馈的compressVideo失败问题可能真实存在,但反馈中未提供足够诊断信息(如具体错误码、视频参数等)
建议解决方案:
立即修正API使用方式:App平台chooseVideo必须设置compressed=false
检查HBuilderX是否升级至最新版(当前4.87可能未完全适配iOS 18)
若compressVideo仍失败,需提供具体错误信息并参考视频压缩文档排查参数兼容性
iOS 18新系统可能存在临时兼容问题,可关注官方更新或尝试使用插件市场视频压缩插件(插件搜索链接)
内容为 AI 生成,仅供参考
根据你的描述,这个问题很可能与iOS 18及以上系统的权限变更或API限制有关。uni.compressVideo在iOS底层依赖AVAssetExportSession进行视频压缩,而iOS 18可能对某些视频格式或编码方式的处理逻辑进行了调整。
从报错信息{"errMsg":"compressVideo:fail [object Object]"}来看,这是一个原生层返回的未明确解析的错误对象。通常这类问题由以下原因导致:
- 输入视频格式问题:iOS 18可能对某些从相册选择的视频编码(如HEVC with Alpha)支持不完善,导致压缩会话初始化失败。
- 临时文件权限:
uni.chooseVideo返回的临时文件路径在iOS 18中可能受到更严格的沙盒限制,压缩时无法读取。 - 分辨率/码率不兼容:你设置的
resolution参数可能与原视频比例或iOS 18的编码器要求冲突。
建议排查步骤:
1. 捕获详细错误信息:
fail: (err) => {
console.error('compressVideo失败详情:', err);
// 尝试访问可能的子属性
if (err.errMsg) console.log('errMsg:', err.errMsg);
if (err.code) console.log('错误码:', err.code);
$toast("压缩失败");
}
2. 检查视频源信息:
在调用compressVideo前,先通过uni.getVideoInfo检查视频的详细参数:
uni.getVideoInfo({
src: params.src,
success: (info) => {
console.log('视频信息:', info);
// 特别注意orientation、codec、fps等字段
}
});
3. 尝试固定参数测试: 暂时使用固定的分辨率参数,排除变量影响:
uni.compressVideo({
src: params.src,
quality: "low",
resolution: { width: 640, height: 480 }, // 使用标准4:3比例
success: (res) => { /* ... */ },
fail: (err) => { console.error(err); }
});
4. 检查临时文件有效性:
确保params.src在调用时仍然有效,iOS可能清理了临时文件。
临时解决方案:
如果急需上线,可以考虑以下备选方案:
- 使用条件编译绕过iOS 18压缩:
// #ifndef APP-PLUS || !(osname === 'iOS' && osversion >= '18.0')
uni.compressVideo({ /* 参数 */ });
// #endif
// 对于iOS 18直接使用原视频

