我想实现循环视频记录(例如,用于车辆的DVR设备以这种方式工作。)
[MediaRecorder
具有setMaxDuration
方法:
记录达到指定的持续时间后,发送给MediaRecorder.OnInfoListener的代码是“什么”MEDIA_RECORDER_INFO_MAX_DURATION_REACHED并进行记录停了停止异步发生,无法保证记录器将在通知侦听器时停止。
因此,当达到“最大持续时间”时,它会停止录制,但会异步进行,如果以前的录制会话仍在进行中,我该如何开始新的录制会话?
是否应该为下一个录制会话创建MediaRecorder
的新实例?会正常吗?
private val infoListener: MediaRecorder.OnInfoListener =
MediaRecorder.OnInfoListener { mr, what, extra ->
when (what) {
MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED -> {
// I want to start a new recording session
}
...
}
}
对于连续记录应用程序,setMaxFileSize()更为有用,因为MediaRecorder将向OnInfoListener发送MEDIA_RECORDER_INFO_MAX_FILESIZE_APPROACHING代码,此时您的应用程序可以调用setNextOutputFile()来设置下一个文件名和允许MediaRecorder继续进入新文件,而无需停止和重新启动应用程序中的记录。如果知道视频和音频的比特率,则可以估计与所需持续时间相对应的文件大小。它不是确切的持续时间,但对于完成基本的分块记录仍然有用。
您的应用程序将需要跟踪您创建的文件并删除旧文件,如果您想实施总存储空间有限的循环记录方案。