替换.mp4文件的音轨

时间:2016-02-02 10:24:31

标签: android audio video-processing

我目前想用另一个.mp3音频文件替换.mp4视频文件的音频。如果无法替换原始视频的音轨,请给我解决方法如何保留两个音轨并让它用户在播放时选择所需的音轨。 我尝试使用MediaMuxer和mediaExtractor仍然无法找到正确的解决方案。任何人都可以帮助我。

在媒体复用程序示例程序https://developer.android.com/reference/android/media/MediaMuxer.html

 MediaMuxer muxer = new MediaMuxer("temp.mp4", OutputFormat.MUXER_OUTPUT_MPEG_4);
 // More often, the MediaFormat will be retrieved from MediaCodec.getOutputFormat()
 // or MediaExtractor.getTrackFormat().
 MediaFormat audioFormat = new MediaFormat(...);
 MediaFormat videoFormat = new MediaFormat(...);
 int audioTrackIndex = muxer.addTrack(audioFormat);
 int videoTrackIndex = muxer.addTrack(videoFormat);
 ByteBuffer inputBuffer = ByteBuffer.allocate(bufferSize);
 boolean finished = false;
 BufferInfo bufferInfo = new BufferInfo();

 muxer.start();
 while(!finished) {
   // getInputBuffer() will fill the inputBuffer with one frame of encoded
   // sample from either MediaCodec or MediaExtractor, set isAudioSample to
   // true when the sample is audio data, set up all the fields of bufferInfo,
   // and return true if there are no more samples.
   finished = getInputBuffer(inputBuffer, isAudioSample, bufferInfo);
   if (!finished) {
     int currentTrackIndex = isAudioSample ? audioTrackIndex : videoTrackIndex;
     muxer.writeSampleData(currentTrackIndex, inputBuffer, bufferInfo);
   }
 };
 muxer.stop();
 muxer.release();

我正在使用android API 23,我收到错误,说getInputBuffer和isAudioSample无法解析。

MediaFormat audioFormat=new MediaFormat(...);

我应该在paranthesis内写什么。我应该在哪里提及我的视频和音频文件。我搜索了很多请给我一些解决这个问题的方法

1 个答案:

答案 0 :(得分:1)

目前你不能在括号内写任何东西。您必须使用MediaFormat静态方法:

MediaFormat audioFormat = MediaFormat.createAudioFormat(MediaFormat.MIMETYPE_AUDIO_AAC, 160000, 1);
MediaFormat videoFormat = MediaFormat.createVideoFormat(MediaFormat.MIMETYPE_VIDEO_MPEG4, 1280, 720);

我在这里添加的值是随机的。你必须指定:

        
  • 对于音频:生成的文件的myme类型,生成的音频的比特率和通道数
  •     
  • 对于视频:生成的文件的myme类型,结果视频的高度和宽度。