通过使用带有内存限制的com.googlecode.mp4parser添加轨道来从文件创建影片?

pcj*_*pcj 5 android movie android-memory mp4parser

我有多个文件的录音.我正在使用com.googlecode.mp4parser:isoparser:1.0.2库创建一个连续的音频文件.

以下是我的代码:

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();
Run Code Online (Sandbox Code Playgroud)

以上代码在Android手机上运行.由于其移动环境,每个应用程序都有内存限制.

上面代码的问题是当我从文件加载Movie并为小文件创建一个轨道列表时它工作正常.但随着文件大小的增加,操作开始变得无响应.它需要大量的内存.如何才能提高内存效率.他们是否可以像在Java中进行文件复制操作那样在小流中执行此操作?

更新: 为了在文件中录制音频,我使用androidMediaRecorder进行此操作,输出格式为MPEG_4和音频编码器为AAC

mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
Run Code Online (Sandbox Code Playgroud)