android - 将第二个音轨添加到 MediaMuxer

标签 android audio video mediamuxer

我有一个视频文件 .mp4 - 只有视频轨道。

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

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

所以我再次使用 MediaExtractorMediaMuxer 来复制文件,(创建视频和音频轨道,读取 [extractor] 和写入 [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
}

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

顺便说一句,我正在努力避免使用第 3 方——比如 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

最佳答案

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

关于android - 将第二个音轨添加到 MediaMuxer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36190614/

相关文章:

android - File.renameTo 返回 false

android - 如何获取在 `BroadcastReceiver` 中定义的 `AndroidManifest.xml` 实例

android - 无法跨过 Eclipse 中的断点

java - OnItemLongClickListener 在释放按钮时也会运行 OnItemClickListener

video - 在视频中的 Ffmpeg 中重新缩放或动态缩放图像

audio - 有没有办法在Mac Book Pro上使用Apple脚本切换 “use audio port for”首选项

iphone - 播放音频时iPhone振动

c# - Alexa Skill C#无法播放音频

javascript - 如何在没有正确用户 ID 的情况下嵌入 YouTube 的所有 channel 视频

javascript - Microsoft Edge HLS 支持和其他浏览器