首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向MediaMuxer添加第二声道

向MediaMuxer添加第二声道
EN

Stack Overflow用户
提问于 2016-03-23 23:26:50
回答 1查看 2.8K关注 0票数 3

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

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

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

因此,我再次使用MediaExtractorMediaMuxer复制文件,(创建视频和音频轨道、读取提取器和编写muxer)。此外,我试图添加第二个音频轨道的穆克塞。但这会引发错误Failed to add the track to the muxer

在这个链接中,我们可以看到muxer不支持多个轨道。

链接中的代码:

代码语言:javascript
复制
// 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之类的..。但如果是我唯一的解决办法..。

-编辑--

我代码中的相关部分

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2020-09-15 14:45:12

对于到达这里的人,我在链接找到了一位官方医生。在旧的API版本中似乎不支持多个视频/音频轨道,甚至在最新版本中也不支持。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36190614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档