2012-08-09 4 views
0

mp3 인코딩/디코딩을 사용하는 응용 프로그램을 개발 중입니다. 원칙적으로 대부분의 파일에서 올바르게 작동하지만 몇 가지 예외가 있습니다. 이 파일에 누락 된 헤더가 있음을 발견했습니다. 디코딩을 시도 할 때 배열 예외를 벗어납니다. 나는 두 가지 방법을 사용했으나 둘 다 실패했습니다.디코딩 된 mp3 스트림을 읽을 수 없습니다.

제 :

DecodedMpegAudioInputStream dais = (DecodedMpegAudioInputStream) AudioSystem.getAudioInputStream(daisf, ais); 
    byte[] audioData = IOUtils.toByteArray(dais);//exception here 

둘째 :

ByteOutputStream bos = new ByteOutputStream(); 
    // Get the decoded stream. 
    byte[] byteData = new byte[1]; 
    int nBytesRead = 0; 
    int offset = 0; 
    int cnt=1; 

    while (nBytesRead != -1) { 
     System.out.println("cnt="+cnt); 
     nBytesRead = dais.read(byteData, offset, byteData.length);//exception here at first loop 
     if (nBytesRead != -1) { 
      int numShorts = nBytesRead >> 1; 
      for (int j = 0; j < numShorts; j++) { 
       bos.write(byteData[j]); 
      } 
     } 
     cnt+=1; 
    } 
    byte[] audioData = bos.getBytes(); 

스트림 콘텐츠가 연단 때문에 헤더 또는 구조에 문제가있을 것 같다/바이트. 그러나 그것은 대담성과 ffplay로 열 수 있으므로 해결 방법이 있어야한다고 생각합니다. 어떤 아이디어가 그것을 상쇄하는 방법?

답변

1

코드 중복을 사용하여 안정성을 향상시킬 수 있습니다. Xuggler 또는 JLayer와 같은 대체 라이브러리를 살펴보십시오.

관련 문제