2016-09-21 143 views
0

我想將視頻(mp4)轉換爲Mp3格式。如果有人知道,請解釋我。將視頻轉換爲MP3

我試過這個,但它不工作。

我已經從這個鏈接實現,但它不會爲我工作。 How do I extractor audio to mp3 from mp4 using java in Android?

public class AudioFromVideo { 

    private String audio, video; 
    private MediaCodec amc; 
    private MediaExtractor ame; 
    private MediaFormat amf; 
    private String amime; 

    public AudioFromVideo(String srcVideo, String destAudio) { 
     this.audio = destAudio; 
     this.video = srcVideo; 
     ame = new MediaExtractor(); 
     init(); 
    } 

    public void init() { 
     try { 
      ame.setDataSource(video); 
      amf = ame.getTrackFormat(1); 
      ame.selectTrack(1); 
      amime = amf.getString(MediaFormat.KEY_MIME); 
      amc = MediaCodec.createDecoderByType(amime); 
      amc.configure(amf, null, null, 0); 
      amc.start(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    public void start() { 
     new AudioService(amc, ame, audio).start(); 
    } 

    private class AudioService extends Thread { 
     private MediaCodec amc; 
     private MediaExtractor ame; 
     private ByteBuffer[] aInputBuffers, aOutputBuffers; 
     private String destFile; 

     @SuppressWarnings("deprecation") 
     AudioService(MediaCodec amc, MediaExtractor ame, String destFile) { 
      this.amc = amc; 
      this.ame = ame; 
      this.destFile = destFile; 
      aInputBuffers = amc.getInputBuffers(); 
      aOutputBuffers = amc.getOutputBuffers(); 
     } 

     @SuppressWarnings("deprecation") 
     public void run() { 
      try { 
       OutputStream os = new FileOutputStream(new File(destFile)); 
       long count = 0; 
       while (true) { 
        int inputIndex = amc.dequeueInputBuffer(0); 
        if (inputIndex == -1) { 
         continue; 
        } 
        int sampleSize = ame.readSampleData(aInputBuffers[inputIndex], 0); 
        if (sampleSize == -1) break; 
        long presentationTime = ame.getSampleTime(); 
        int flag = ame.getSampleFlags(); 
        ame.advance(); 
        amc.queueInputBuffer(inputIndex, 0, sampleSize, presentationTime, flag); 
        MediaCodec.BufferInfo info = new MediaCodec.BufferInfo(); 
        int outputIndex = amc.dequeueOutputBuffer(info, 0); 
        if (outputIndex >= 0) { 
         byte[] data = new byte[info.size]; 
         aOutputBuffers[outputIndex].get(data, 0, data.length); 
         aOutputBuffers[outputIndex].clear(); 
         os.write(data); 
         count += data.length; 
         Log.e("write", "" + count); 
         amc.releaseOutputBuffer(outputIndex, false); 
        } else if (outputIndex == MediaCodec.INFO_OUTPUT_BUFFERS_CHANGED) { 
         aOutputBuffers = amc.getOutputBuffers(); 
        } else if (outputIndex == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) { 
        } 
       } 
       os.flush(); 
       os.close(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

} 

新AudioFromVideo(將videoPath,audioPath)。開始();

+1

請詳細解釋**,**,「它不工作」和「它不適合我」的含義。 – CommonsWare

+0

什麼不起作用?詳細解釋 – Piyush

+0

它會在aInputBuffers = amc.getInputBuffers()處給我nullpointer;這行 – Kinjal

回答