将第二个音轨添加到MediaMuxer

时间:2016-03-23 23:26:50

标签: android audio video mediamuxer

我有一个视频文件.mp4 - 仅限视频广告。

我使用MediaExtractorMediaMuxer添加音频文件。 这很好。

在已处理的文件上,我想添加另一个音轨。

所以我再次使用MediaExtractorMediaMuxer来复制文件,(创建视频和音轨,阅读[提取器]和编写[muxer])。此外,我试图将第二个音轨添加到多路复用器。但这会引发错误Failed to add the track to the muxer

在这个link中我们可以看到muxer不支持多个音轨。

代码来自链接:

// Throws exception b/c 2 audio tracks were added.
muxer = new MediaMuxer(outputFile, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);
muxer.addTrack(MediaFormat.createAudioFormat("audio/mp4a-latm", 48000, 1));
try {
    muxer.addTrack(MediaFormat.createAudioFormat("audio/mp4a-latm", 48000, 1));
    fail("should throw IllegalStateException.");
} catch (IllegalStateException e) {
   // expected
}

还有其他办法吗? 优雅的方式?

顺便说一下,我试图避免使用第三方 - 比如ffmpeg左右......但是,如果这将是我唯一的解决方案...

- 编辑 -

我的代码的相关部分

MediaMuxer muxer = new MediaMuxer(outputFile, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);

MediaExtractor extractor = new MediaExtractor();
extractor.setDataSource(videoAndAudioFile);

for (int currTrackIdx = 0; currTrackIdx < extractor.getTrackCount(); currTrackIdx++) {
   MediaFormat trackFormat = extractor.getTrackFormat(currTrackIdx);
   tracksIdx.add(muxer.addTrack(trackFormat));
}

MediaExtractor extractor2 = new MediaExtractor();
extractor2.setDataSource(secondAudioFile);
MediaFormat trackFormat = extractor2.getTrackFormat(0);
tracksIdx.add(muxer.addTrack(trackFormat)); // Crashes here

1 个答案:

答案 0 :(得分:1)

对于到达这里的人,我在link找到了这个官方文档。在旧的API版本中似乎不支持Muxing Multiple Video / Audio Tracks,甚至在最新版本中也是如此。