浏览器文件上传场景下如何强制Android相机使用更低分辨率
Android端调用相机拍摄控制视频体积的可行方案
直接依赖<input type="file">默认弹出的系统操作选项,无法统一限制所有设备的相机拍摄分辨率——这个弹窗由系统组件控制,没有开放参数入口给网页指定录制规格,不同厂商的定制ROM适配差异极大,可按以下优先级选择实现方案:
基础兼容配置(生效范围有限,可作为默认配置加上)
给input标签补充accept和capture属性,提示系统相机优先使用低规格参数录制:<input type="file" accept="video/3gpp,video/mp4" capture="camcorder" >注意:该配置仅对部分遵守W3C规范的系统相机生效,大部分国产定制ROM会忽略该参数,依旧默认使用HD规格录制,不能作为核心解决方案。
稳定生效方案(推荐)
放弃input触发的系统默认选择弹窗,自行实现操作入口,拆分「相册选文件」「拍摄视频」两个按钮:- 相册选文件逻辑依旧可以调用input的文件选择能力,指定只展示视频类文件即可
- 拍摄视频时不要走input的默认capture逻辑,根据你的应用技术栈传参控制录制规格:
- 纯Web/H5场景:使用
MediaRecorderAPI直接调起摄像头,初始化时强制指定最低录制参数:// 调起后置摄像头,指定最低分辨率、帧率 const mediaStream = await navigator.mediaDevices.getUserMedia({ video: { facingMode: 'environment', width: { ideal: 320 }, height: { ideal: 240 }, frameRate: { max: 15 } }, audio: true }) // 绑定流到MediaRecorder完成录制,输出的视频10秒体积通常在2MB以内 - Android原生/混合开发场景:调系统相机时通过Intent传入官方标准画质参数:
Intent recordIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); // 0代表官方定义的最低画质档位,所有合规系统相机都会识别该参数 recordIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0); // 可选:额外限制最长录制时长,进一步控制文件体积 recordIntent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 15); startActivityForResult(recordIntent, REQUEST_VIDEO_CODE);
- 纯Web/H5场景:使用
该方案是Android平台兼容性最高的实现方式,
EXTRA_VIDEO_QUALITY=0参数会让系统相机自动切换到当前设备支持的最低分辨率、最低码率档位录制,不会出现10秒视频上百MB的情况。兜底保障方案
在上传逻辑前增加统一视频压缩步骤,不管用户是从相册选取的高清视频,还是拍摄得到的视频,都在本地转码压缩到指定分辨率、码率后再上传,彻底规避大文件问题。
内容的提问来源于stack exchange,提问作者Rohit Thakur
相关产品推荐
相关产品推荐

