2016-09-04 18 views
2

MediaRecorder을 사용하는 동안, 우리는 그렇게 할 수있는 방법이있을 수있다 (24) 아래 API 수준에 대한 일시 정지/다시 시작이없는 것은 :(API 레벨 <24)

  1. 일시 중지 이벤트에서 레코더를 중지하고 녹음 된 파일을 만듭니다.
  2. 다시 시작하면 다시 녹음을 시작하고 다른 파일을 만들고 사용자가 중지 할 때까지 계속합니다.
  3. 그리고 마지막으로 모든 파일을 병합합니다.

많은 사람들이이 질문에 답변했지만 어쨌든이를 해결할 수 없습니다. 사람들은 일시 중지 동작에서 녹음을 중지하고 이력서에서 다시 시작하여 여러 미디어 파일을 만드는 방법에 대해 이야기합니다. 그래서 내 질문은 어떻게 우리가 병합/모든 미디어 파일을 프로그래밍 방식으로 가입 할 수 있습니까?

내 경우에는 MPEG4 컨테이너 - 오디오 용 m4a 및 비디오 용 mp4.

SequenceInputStream을 사용하여 생성 된 각 기록 파일의 다중 InputStream을 병합하려고했습니다. 그러나 항상 첫 번째 파일 만 생성합니다.

코드 조각은 :

Enumeration<InputStream> enu = Collections.enumeration(inputStreams); 
     SequenceInputStream sqStream = new SequenceInputStream(enu); 
     while ((oneByte = sqStream.read(buffer)) != -1) { 
      fileOutputStream.write(buffer, 0, oneByte); 

     } 
     sqStream.close(); 
     while (enu.hasMoreElements()) { 
      InputStream element = enu.nextElement(); 
      element.close(); 
     } 
     fileOutputStream.flush(); 
     fileOutputStream.close(); 
+0

[Android에서 오디오 녹음 일시 중지 및 다시 시작] (https://stackoverflow.com/questions/5743165/pause-and-resume-audio-recording-in-android)의 가능한 복제본 – soshial

답변

9

나는 mp4parser 라이브러리를 사용하여이 문제를 해결할 수 있습니다. 이 라이브러리 :

의 작성자에게 많은 감사는 Gradle을 파일에 의존성 아래에 추가 : 이미 많은 다른 답변에서 언급 한 바와 같이

compile 'com.googlecode.mp4parser:isoparser:1.0.2' 

솔루션이 때 사용자가 일시 중지 레코더를 중지하고 다시 시작 다시 시작하는 것입니다 스택 오버플로. 배열에서 생성 된 모든 오디오/비디오 파일을 저장하고 아래 방법을 사용하여 모든 미디어 파일을 병합합니다. 예제는 또한 mp4parser 라이브러리에서 가져온 내 필요에 따라 조금 수정.

오디오 파일의 경우 isAudio를 true로, 비디오 파일의 경우 false를 사용합니다.