如果仍然有此问题,您可以在此处参考我的答案。对于 API 级别 >= 24 暂停/恢复方法,Android MediaRecorder 类中可用。
对于 API 级别 < 24
在您的 gradle 文件中添加以下依赖项:
compile 'com.googlecode.mp4parser:isoparser:1.0.2'
解决方案是当用户暂停并重新开始时停止记录器,正如在stackoverflow中的许多其他答案中已经提到的那样。将生成的所有音频/视频文件存储在一个数组中,并使用以下方法合并所有媒体文件。该示例取自 mp4parser 库,并根据我的需要进行了一些修改。
public static boolean mergeMediaFiles(boolean isAudio, String sourceFiles[], String targetFile) {
try {
String mediaKey = isAudio ? "soun" : "vide";
List<Movie> listMovies = new ArrayList<>();
for (String filename : sourceFiles) {
listMovies.add(MovieCreator.build(filename));
}
List<Track> listTracks = new LinkedList<>();
for (Movie movie : listMovies) {
for (Track track : movie.getTracks()) {
if (track.getHandler().equals(mediaKey)) {
listTracks.add(track);
}
}
}
Movie outputMovie = new Movie();
if (!listTracks.isEmpty()) {
outputMovie.addTrack(new AppendTrack(listTracks.toArray(new Track[listTracks.size()])));
}
Container container = new DefaultMp4Builder().build(outputMovie);
FileChannel fileChannel = new RandomAccessFile(String.format(targetFile), "rw").getChannel();
container.writeContainer(fileChannel);
fileChannel.close();
return true;
}
catch (IOException e) {
Log.e(LOG_TAG, "Error merging media files. exception: "+e.getMessage());
return false;
}
}
使用标志 isAudio 作为音频文件的 true 和视频文件的 false。