[uniapp] 安卓端解决视频只能录制60秒的限制

一、新建.js文件util.js

function android(options) {
	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', options.time || 60000); //设置录像时间
	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) => {
				entry.file(function(file) {
					typeof(options.success) === 'function' && options.success({
						fullPath: entry.fullPath,
						file
					})
				});
			},
			(e) => {
				typeof(options.fail) === 'function' && options.fail(e)
			}
		);
	};
}

function ios(options) {
	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)
					entry.file(function(file) {
						console.log(entry.fullPath)
						typeof(options.success) === 'function' && options.success({
							fullPath: entry.fullPath,
							file
						}) 
					});
				},
				(e) => {}
			);
		},
		function(error) {
			typeof(options.fail) === 'function' && options.fail(error)
		}, {
			resolution: res,
			format: fmt,
			videoMaximumDuration: options.time || 10
		}
	);
}

export default {
	/**
	 *  options.time [number] 视频最大长度 单位s
	 *  options.success [function] 成功回调函数
	 *  options.fail [function] 失败回调函数
	 */
	camera(options) {
		if (uni.getSystemInfoSync().platform === 'android') {
			console.log('安卓')
			android(options)
		} else {
			ios(options)
			console.log('ios')

		}

	}
}

二、 使用

import video from '../../untils/util.js';


video.camera({
time: 200,

success: e => {
console.log("path=="+e.fullPath);

console.log("size=="+e.file.size);

console.log("name=="+e.file.name);

console.log(e);

}

});

UniApp是一个跨平台的框架,用于构建原生体验的应用。当你想要在uniapp应用中使用摄像头进行拍照功能,你可以通过`plus`模块提供的API来操作手机的相机。以下是一个基本的例子,展示如何调用`plus.camera.getCamera()`获取相机权限并拍照: ```javascript // 首先检查是否有相机权限,如果没有则请求 uni.requestPermissions({ permissions: ['scope.camera'], success: function (res) { if (res.granted) { // 如果用户授权了 // 调用相机接口 uni.plus.camera.getCamera({ camera: 'camera', // 指定使用前置或后置摄像头,默认值是'camera' toViewfinder: true, // 是否显示预览画面,默认true 露脸提示: true, // 是否开启人脸检测提示,默认false success: function (camera) { // 成功获取到相机对象,可以调用其拍照、像等方法 let options = { quality: 75, // 图片质量,默认0-100 destinationType: plus.DestinationType.FILE_URI, // 返回图片文件路径 saveToAlbum: false, // 是否保存到相册,默认false }; camera.takePicture(options, function (err, result) { if (!err) { console.log('拍摄成功:', result); // 这里可以根据result处理拍照后的图片,例如上传到服务器 } else { console.error('拍摄失败:', err); } }); }, fail: function (err) { console.error('打开相机失败:', err); } }); } else { uni.showToast({ title: '请允许访问相机权限' }); } }, fail: function (err) { console.error('请求相机权限失败:', err); } }); ``` 在这个代码中,你需要确保已经引入了`uni.plus`模块,并且用户已经给予了所需的权限。如果你需要录制视频,可以将`takePicture`替换为`recordVideo`。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值