我有一个视频文件.mp4
- 仅限视频广告。
我使用MediaExtractor
和MediaMuxer
添加音频文件。
这很好。
在已处理的文件上,我想添加另一个音轨。
所以我再次使用MediaExtractor
和MediaMuxer
来复制文件,(创建视频和音轨,阅读[提取器]和编写[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
答案 0 :(得分:1)
对于到达这里的人,我在link找到了这个官方文档。在旧的API版本中似乎不支持Muxing Multiple Video / Audio Tracks,甚至在最新版本中也是如此。