Expo React Native如何配置低画质视频录制缩短发送耗时
低画质录制缩短视频上传耗时方案
直接在recordAsync的配置项里加画质参数就行,你现在没传这个参数,SDK默认会用最高画质录制,5秒视频体积能到几十MB,当然上传慢。
你当前用的Expo 44 + expo-av 10.2.0版本完全支持录制画质自定义,不需要额外加依赖:
- 给
recordAsync传入quality参数指定录制画质,无画质要求直接选最低档的288p即可,单秒视频体积能压到100KB以内 - 可选加
videoBitrate参数进一步限制码率,把体积压到更小 - 录制时直接输出低画质文件,不需要录完再做本地转码压缩,不会额外增加本地处理耗时
- 现有expo-av的Video播放组件不需要改任何配置,原生支持低画质mp4播放
可用画质档位(按体积从小到大排)
Camera.Constants.VideoQuality['288p']:最低画质,体积最小,推荐你这个场景用Camera.Constants.VideoQuality['480p']:低清,体积比288p稍大,清晰度稍高- 720p、1080p、4k档位都是高清/超高清,不要选,就是你现在默认用的高画质选项
修改后的录制代码
首先记得在文件顶部从expo-camera导入Camera对象拿常量:
import { Camera } from 'expo-camera';
然后修改recordAsync的传参:
recordVideo = async () => { this.setState({ recording: true }); if (this.cameraRef.current) { try { const timerInterval = setInterval(this.timeCounter, 1000); const { uri, codec = "mp4" } = await this.cameraRef.current.recordAsync({ maxDuration: this.state.videoDuration, codec: "mp4", // 核心配置:最低画质 quality: Camera.Constants.VideoQuality['288p'], // 可选:限制码率为500kbps,进一步缩小体积 videoBitrate: 500 * 1000 }); clearInterval(timerInterval); if (uri) { this.setState({ codec: codec }); // 原有后续上传逻辑不需要改动 } } catch (err) { console.log('视频录制出错:', err) } } }
改完之后5秒时长的视频体积基本在300KB-1MB区间,原来30秒以上的上传耗时可以压缩到1-3秒,完全满足业务需求。
内容的提问来源于stack exchange,提问作者R. Mahbub
相关产品推荐
相关产品推荐

