MediaRecorder
有一个 API,可让您自动将输出流分成大小相等的文件。
为此你必须:
setMaxFileSize
之前先调用 prepare
,并设置您希望每个文件设置的最大大小OnInfoListener
订阅信息通知,并在到达 setNextOutputFile
时致电 MEDIA_RECORDER_INFO_MAX_FILESIZE_APPROACHING
。问题是,尽管执行了文档指定的所有操作,但永远不会触发
MEDIA_RECORDER_INFO_MAX_FILESIZE_APPROACHING
,而是稍后触发MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED
,之后MediaRecorder
不再将数据输出到任何文件。
不幸的是,答案是 Android 的
MediaRecorder
API for setMaxFileSize
并未被所有音频编码器(MPEG-4、AAC、AMR)完全实现。
如果我们仔细看看他们的 C++ 实现:
我们可以看到,只有 MPEG-4 的实现会通知
MEDIA_RECORDER_INFO_MAX_FILESIZE_APPROACHING
事件:
notify(MEDIA_RECORDER_EVENT_INFO, MEDIA_RECORDER_INFO_MAX_FILESIZE_APPROACHING, 0);