camera2 + MediaRecorder 实现的分段循环录像功能

硬件设备Android系统 8.1;

硬件设备上开发过程中的问题记录:

问题1. 长时间录像后发现保存的录像文件始终只有4G。

原因及解决:Android 11之前的系统有对保存的文件大小有限制,所以只能修改成分段保存,即录像文件3.5G保存一份。

问题2:原定时5分钟录制保存一段视频,结果录像文件中显示录制了10分钟(录制了双倍时间),录像文件中的帧率减少了一半。分段保存时,只有第一段会出现这个问题,后面的视频文件则正常。注意:在手机上则不会出现这个问题。

解决方案:原因未知,但解决方法是,打开摄像头后,先设置预览画面(先前是直接进行录制视频,没有设置预览画面),然后在执行录像。

MediaRecorder是一个Android系统内置的API,用于记录音频和视频数据到特定文件或媒体存储。如果你想实现分段录制视频,你可以按照以下步骤操作: 1. **初始化MediaRecorder**: - 创建MediaRecorder实例,并指定需要的录音源,如摄像头、麦克风或者其他来源。 ```java MediaRecorder mediaRecorder = new MediaRecorder(); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMERA); // 如果是视频,替换为VideoSource.SURFACEMODE_FRONT或BACK ``` 2. **设置输出路径和格式**: - 设置输出文件的路径以及编码格式,如H.264、MPEG-4等。 ```java File file = new File(getOutputMediaFileUri(VIDEO_TYPE)); mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); mediaRecorder.setOutputFile(file.getAbsolutePath()); ``` 3. **准备录音设备**: - 这一步非常重要,因为如果在这个阶段出错,后面的start()会失败。 ```java try { mediaRecorder.prepare(); } catch (IllegalStateException e) { releaseMediaRecorderAndLogError(e); } ``` 4. **开始录制**: - 准备好后就可以开始录制了,然后等待录制完成。 ```java mediaRecorder.start(); ``` 5. **分段录制控制**: - 分段录制通常通过定时器或者用户操作触发停止和重新开始。例如,在达到预定时间或者空间限制后,调用`mediaRecorder.stop()`并暂停程序,让用户确认是否继续,然后重启`mediaRecorder.start()`。 6. **释放资源**: - 记录完成后记得关闭媒体记录器及其关联的线程,避免内存泄漏。 ```java mediaRecorder.stop(); mediaRecorder.release(); ``` 7. **异常处理**: - 对于可能出现的异常,如权限不足、设备不可用等情况,要妥善处理并记录日志。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值