2012-06-18 38 views
6

Tôi đang viết một dự án Android, nơi tôi đang ghi một số tệp âm thanh. Vì vậy, tôi đang thiết lập các thông số sau. Việc ghi âm hoạt động tốt.Android - kết hợp hai tệp MP4

recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 

Vấn đề của tôi là mỗi lần tôi ghi lại, đầu ra được ghi trong một tệp riêng biệt. Bây giờ, tôi cần phải kết hợp các tệp này vào một tệp. Có ai có một ý tưởng làm thế nào để kết hợp một số tập tin MPEG 4 trong một dự án Android?

Nhờ sự giúp đỡ của bạn ....

+0

bạn muốn kết hợp tệp mp4 hoặc âm thanh với mp4file? – Dinesh

+0

http://stackoverflow.com/questions/8268195/strange-issue-in-combining-audio-files-and-playing-in-different-api-versions – Venky

+0

http://stackoverflow.com/questions/8243947/best -way-to-combined-audio-files-in-android – Venky

Trả lời

1

Trong android không có bất kỳ chức năng sẵn có để kết hợp hai tập tin âm thanh, Nếu bạn đang thực hiện nó thông qua bất kỳ hoạt động tập tin thì đây cũng xuống để làm việc vì nó không làm việc như tiêu đề của các tệp âm thanh khác nhau.

Tôi khuyên bạn nên sử dụng thư viện bên ngoài FFMPEG cho ứng dụng Android của bạn.

8

Tôi khuyên bạn nên sử dụng thư viện mp4parser của mình sau đó bạn không phải đối phó với các thư viện gốc. Có một cái nhìn tại AppendExample. Nó thực hiện chính xác những gì bạn muốn làm. Hãy tìm phiên bản mới nhất. Xem dưới đây để AppendExample để có được một ý tưởng làm thế nào nó hoạt động.

Movie[] inMovies = new Movie[]{MovieCreator.build(Channels.newChannel(AppendExample.class.getResourceAsStream("/count-deutsch-audio.mp4"))), 
      MovieCreator.build(Channels.newChannel(AppendExample.class.getResourceAsStream("/count-english-audio.mp4")))}; 

    List<Track> videoTracks = new LinkedList<Track>(); 
    List<Track> audioTracks = new LinkedList<Track>(); 

    for (Movie m : inMovies) { 
     for (Track t : m.getTracks()) { 
      if (t.getHandler().equals("soun")) { 
       audioTracks.add(t); 
      } 
      if (t.getHandler().equals("vide")) { 
       videoTracks.add(t); 
      } 
     } 
    } 

    Movie result = new Movie(); 

    if (audioTracks.size() > 0) { 
     result.addTrack(new AppendTrack(audioTracks.toArray(new Track[audioTracks.size()]))); 
    } 
    if (videoTracks.size() > 0) { 
     result.addTrack(new AppendTrack(videoTracks.toArray(new Track[videoTracks.size()]))); 
    } 

    IsoFile out = new DefaultMp4Builder().build(result); 

    FileChannel fc = new RandomAccessFile(String.format("output.mp4"), "rw").getChannel(); 
    fc.position(0); 
    out.getBox(fc); 
    fc.close(); 
+1

tôi đã đặt thư viện isoviewer-2.0-RC-22.jar, và sau khi tôi sao chép mã nó nói rằng AppendExample.class không tồn tại, tôi có phải tạo nó, hoặc là nó từ thư viện? –

+1

bạn không cần nó. Tôi chỉ sử dụng nó để truy cập vào classpath –

+0

thư viện mp4parser không hoạt động trên Android cho hơn 2 tệp! – Alin