代码调用顺序:
- 选择视频(selectAndUploadVideo函数)
- 校验视频时长(validateVideoDuration函数)
- 保存视频到相册(saveFile函数)
- 压缩视频(videoCompression中在保存视频函数saveFile的promise resolve后,调用uni.compressVideo)
1、选择视频代码:
selectAndUploadVideo() {
uni.chooseVideo({
sourceType: 'camera',
compressed: false,
maxDuration: 50,
success: res => {
// 选择视频后,调用validateVideoDuration校验视频时长是否符合要求
this.validateVideoDuration(res.tempFilePath, 30, 50)
.then(() => {
// 视频时长校验通过后,压缩视频
this.videoCompression(res); // 调用视频压缩方法
})
.catch(err => {
console.log(err)
});
},
fail: err => {
console.error('选择视频失败:', err);
},
});
2、校验视频时长函数:
validateVideoDuration(filePath, minDuration, maxDuration) {
return new Promise((resolve, reject) => {
uni.getVideoInfo({
src: filePath,
success: res => {
const duration = res.duration; // 秒数
if (duration < minDuration) {
reject(`视频不能少于 ${minDuration} 秒`);
} else {
console.log('视频时长验证通过,当前时长', duration);
resolve(duration);
}
},
fail: () => {
reject('读取视频信息失败');
},
});
});
}
3、压缩视频函数:
async videoCompression(res, addressInfo) {
try {
let savedFilePath = null;
if (res && res.size && res.tempFilePath) {
try {
// 保存原视频到永久路径并获取savedFilePath
savedFilePath = await this.saveFile(res.tempFilePath);
console.log('原视频已保存到永久路径:', savedFilePath);
} catch (e) {
console.warn('保存原视频失败', e);
}
}
uni.showLoading({
title: '压缩中...',
mask: true
});
const compressSrc = savedFilePath || res.tempFilePath;
uni.compressVideo({
quality: 'high',
src: compressSrc,
success: async _res => {
uni.hideLoading();
// 上传视频
this.handleVideoUpload(_res);
},
fail: err => {
// 视频压缩失败错误信息,nova 10 手机压缩失败的话,是在这里捕获到的错误
console.log(err)
uni.showToast({
title: err.message || err.errMsg
});
},
});
} catch (error) {
console.error('视频压缩异常:', error);
}
},
4、保存视频到相册
saveFile(tempFilePath) {
console.log('? 开始保存到相册:', tempFilePath);
return new Promise((resolve, reject) => {
try {
uni.saveFile({
tempFilePath: tempFilePath,
success: saveResult => {
const savedFilePath = saveResult.savedFilePath;
// console.log('视频已保存到:', savedFilePath);
uni.saveVideoToPhotosAlbum({
filePath: savedFilePath,
success: () => {
console.log('视频已保存到系统相册');
resolve(savedFilePath);
},
fail: err => {
console.error('保存到相册失败:', err);
resolve(savedFilePath);
},
});
},
fail: err => {
console.error('保存视频失败:', err);
reject(err);
},
});
} catch (error) {
console.error('保存视频失败:', error);
reject(error);
}
});
}
0 个回复