uni-app uni.compressVideo视频压缩api在ios上压缩后的文件不可用不可播放
uni-app uni.compressVideo视频压缩api在ios上压缩后的文件不可用不可播放
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | 23H2 | HBuilderX |
iOS | iOS 16 |
产品分类:uniapp/App
PC开发环境操作系统:Windows
HBuilderX类型:正式
HBuilderX版本号:4.36
手机系统:iOS
手机系统版本号:iOS 16
手机厂商:苹果
手机机型:苹果13proMAX
页面类型:vue
vue版本:vue2
打包方式:云端
项目创建方式:HBuilderX
示例代码:
that.$toast.show('正在压缩', 'loading')
uni.compressVideo({
src: res.tempFilePath,
quality: 'medium',
success(re) {
console.log(re)
uni.hideLoading()
uni.saveVideoToPhotosAlbum({
filePath: re.tempFilePath,
success(r) {
console.log(r)
}
})
uni.saveFile({
tempFilePath: re.tempFilePath,
success: function(res2) {
console.log(res2)
},
fail:function(err){
console.log(err)
}
});
},
fail:function(err){
console.log(err)
}
})
操作步骤:
that.$toast.show('正在压缩', 'loading')
uni.compressVideo({
src: res.tempFilePath,
quality: 'medium',
success(re) {
console.log(re)
uni.hideLoading()
uni.saveVideoToPhotosAlbum({
filePath: re.tempFilePath,
success(r) {
console.log(r)
}
})
uni.saveFile({
tempFilePath: re.tempFilePath,
success: function(res2) {
console.log(res2)
var savedFilePath = res2.savedFilePath;
let obj = {
filePath: savedFilePath,
fileSize: res.size
}
that.uploadAndSaveInfo(obj, function(res) {
console.log(res)
if (res && res.code == 1) {
setTimeout(that.getFileListSql(), 100)
}
})
},
fail:function(err){
console.log(err)
}
});
},
fail:function(err){
console.log(err)
}
})
预期结果:
压缩后的视频可读可播放
实际结果:
压缩后的视频不可用
bug描述:
使用uni.compressVideo进行视频压缩,success返回的tempFilePath不可用,不可播放
使用uni.saveFile将tempFilePath保存本地显示文件不可读
2 回复
这边没有复现问题 提供一下示例项目以及复现问题的视频吧
在处理 uni-app
中的 uni.compressVideo
API 在 iOS 上压缩视频后文件不可用或不可播放的问题时,我们可以考虑一些常见的错误原因和解决方案。由于 uni-app
框架本身是基于 Vue.js 和小程序的多端开发框架,其 API 行为在不同平台上可能有所不同。以下是一个示例代码,展示了如何正确使用 uni.compressVideo
API,并包含一些可能帮助调试和解决问题的策略。
// 示例代码:使用 uni.compressVideo 压缩视频
export default {
data() {
return {
src: '', // 视频源文件路径
compressedSrc: '' // 压缩后视频文件路径
};
},
methods: {
compressVideo() {
uni.compressVideo({
src: this.src, // 输入的视频文件路径
quality: 80, // 压缩质量,范围0~100
outputSize: 1024 * 768, // 输出视频的目标分辨率宽度,高度会自动计算,保持宽高比
success: (res) => {
console.log('压缩成功', res);
this.compressedSrc = res.tempFilePath; // 获取压缩后的视频文件路径
// 尝试播放压缩后的视频以验证其可用性
this.playCompressedVideo(this.compressedSrc);
},
fail: (err) => {
console.error('压缩失败', err);
// 处理压缩失败的情况,如提示用户或重试
}
});
},
playCompressedVideo(filePath) {
uni.createInnerAudioContext().src = filePath; // 注意:此方法用于音频播放,视频播放需使用 video 组件
// 对于视频播放,应使用 <video> 标签,并设置其 src 属性为 filePath
// 例如:<video :src="compressedSrc" controls></video>
},
// 加载视频源文件(假设从文件选择器选择)
chooseVideo() {
uni.chooseVideo({
sourceType: ['album', 'camera'],
maxDuration: 60,
camera: 'back',
success: (res) => {
this.src = res.tempFilePath;
this.compressVideo();
}
});
}
}
};
注意事项:
- 检查文件路径:确保
src
路径正确,并且文件确实存在于该路径。 - 质量和分辨率:调整
quality
和outputSize
参数,看是否能改善压缩后视频的可用性。 - 播放验证:使用
<video>
标签验证压缩后的视频是否能正常播放。 - 错误处理:在
fail
回调中打印详细的错误信息,有助于定位问题。 - 平台差异:注意
uni-app
在不同平台上的行为差异,特别是文件路径的处理和权限问题。
如果上述方法仍然无法解决问题,建议查看 uni-app
的官方文档或社区,看是否有其他开发者遇到并解决了类似的问题。