因为uni-app的平台差异问题,所以无法直接限制视频的长度,类似与微信朋友圈拍摄十秒视频。现在提供一种App端可以实现的解决方案。
安卓解决方案
关联阅读
安卓使用njs来实现视频最大播放时长
// 安卓关键代码
const VIDEOZOOM = 200;
let MediaStore = plus.android.importClass('android.provider.MediaStore');
let Intent = plus.android.importClass('android.content.Intent');
// 导入后可以使用new方法创建类的示例对象
let intent = new Intent('android.media.action.VIDEO_CAPTURE');
intent.putExtra('android.intent.extra.videoQuality', 1); //0 means low quality, 1 means high quality
//intent.putExtra("android.provider.MediaStore.EXTRA_OUTPUT", url);
intent.putExtra('android.intent.extra.durationLimit', 10); //设置录像时间
let main = plus.android.runtimeMainActivity();
main.startActivityForResult(intent, VIDEOZOOM);
//获取返回参数
main.onActivityResult = function(requestCode, resultCode, data) {
let context = main;
plus.android.importClass(data);
let uri = data.getData();
let resolver = context.getContentResolver();
plus.android.importClass(resolver);
let cursor = resolver.query(uri, null, null, null, null);
plus.android.importClass(cursor);
cursor.moveToFirst();
let column = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
// 获取录制的视频路径
let filePath = cursor.getString(column);
// 解析视频文件的属性
plus.io.resolveLocalFileSystemURL(
filePath,
(entry) => {
console.log(entry.fullPath)
entry.file(function(file) {
console.log("size=="+file.size);
console.log("name=="+file.name);
});
},
(e) => {
console.log("Resolve file URL failed: " + e.message);
}
);
};
ios解决方案
关联阅读
ios 直接使用5+ Api 就可以实现相关功能
// ios关键代码
let cmr = plus.camera.getCamera();
let res = cmr.supportedVideoResolutions[0];
let fmt = cmr.supportedVideoFormats[0];
cmr.startVideoCapture(
function(path) {
plus.io.resolveLocalFileSystemURL(
path,
(entry) => {
console.log(entry.fullPath)
entry.file(function(file) {
console.log("size=="+file.size);
console.log("name=="+file.name);
});
},
(e) => {}
);
},
function(error) {
console.log("Resolve file URL failed: " + e.message);
}, {
resolution: res,
format: fmt,
videoMaximumDuration:10
}
);
Tips
- 安卓端使用njs,因为不同root的问题会有部分手机不支持
具体使用
详见附件,把代码进行简单整合,并判断平台 ,可以直接调用
video.camera({
time: 10,
success: e => {
console.log("path=="+e.fullPath);
console.log("size=="+e.file.size);
console.log("name=="+e.file.name);
console.log(e);
}
});