2015-04-06 230 views
1

是否有可能將音頻和視頻文件合併到一個文件中。我的 需求是:一個可以錄製視頻(mp4)的android應用程序,然後我的本地文件夾中有一些音頻文件(mp3),我想將它添加到通過camcoder捕獲的視頻中。所以最終的效果就像播放視頻一樣,並且將會聽到要在內部合併的添加音頻。我該怎麼做? P.S.合併必須在內部完成.Camcorder不會錄製任何音頻。在android中合併音頻文件和捕獲的視頻

請幫

+0

我使用MP4解析器的例子,但它不是幫助很大, – user2724486

回答

1

我不能使用MP3 files.Instead成功我使用的MP4文件的背景音樂。如果你有興趣來處理MP4文件,下面的代碼片段可以幫助你

String root = Environment.getExternalStorageDirectory().toString(); 
      String audio = root +"/test.mp4"; 
      String video = root +"/myvideo.mp4"; 
      String output = root+ "/ouputVideo.mp4"; 
      Log.e("FILE", "audio:"+audio + " video:"+video+ " out:"+output); 
      mux(video, audio, output); 



public boolean mux(String videoFile, String audioFile, String outputFile) { 
    Movie video; 
    try { 
     video = new MovieCreator().build(videoFile); 
    } catch (RuntimeException e) { 
     e.printStackTrace(); 
     return false; 
    } catch (IOException e) { 
     e.printStackTrace(); 
     return false; 
    } 

    Movie audio; 

    try { 
     audio = new MovieCreator().build(audioFile); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     return false; 
    } catch (NullPointerException e) { 

     e.printStackTrace(); 
     return false; 
    } 

    Track audioTrack = audio.getTracks().get(1); 

    //video.getTracks().remove(1); 
    video.addTrack(audioTrack); 

    Container out = new DefaultMp4Builder().build(video); 

    FileOutputStream fos; 
    try { 
     fos = new FileOutputStream(outputFile); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
     return false; 
    } 
    BufferedWritableFileByteChannel byteBufferByteChannel = new BufferedWritableFileByteChannel(fos); 
    try { 
     out.writeContainer(byteBufferByteChannel); 
     byteBufferByteChannel.close(); 
     fos.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     return false; 
    } 
    return true; 
} 
+0

感謝,所有的MP3文件不會在這裏工作。只有少數是工作任何想法? – Sandy09

+0

MovieCreator類在哪裏? –