2014-12-29 5 views
2

웹 소켓을 통해 인코딩 된 라이브 오디오 스트림 (mp3 또는 ogg)을 보내고 있으며 웹 오디오 API로 재생하려고합니다. 몇 가지 사항을 읽고 시도했지만 지금까지 아무 것도 작동하지 않았습니다 ...웹 오디오 API로 인코딩 된 오디오 스트림 재생

decodeAudioData 메서드로 항상 시도했습니다. 그러나이 메서드는 연속 스트림을 처리 할 수 ​​없습니다.

ws.onmessage = function (evt) { 

     context.decodeAudioData(evt.data, function (decodedData) { 
      source = context.createBufferSource(); 
      source.buffer = decodedData; 
      source.start(startTime); 
      source.connect(context.destination); 

      startTime += decodedData.duration; 
     }, 
     function(e) { 
      var test = e; 
     } 
     ); 

    }; 

이 작동 적어도 MP3 파일로하지만 아주 잘 : 그래서 내 마지막 방법이이었다. 수신 된 덩어리 사이에는 매우 작은 휴식 시간이 있습니다. 따라서 스트림의 유동적 인 재생은 없습니다. 나는 그 이유가 무엇인지 모르겠다. 아마도 decodedData.duration 속성이 충분히 정확하지 않거나 어떤 종류의 지연이있을 수있다.

어쨌든 ogg 파일은 전혀 작동하지 않습니다. 처음받은 청크를들을 수 있지만 나머지는 무시됩니다. 어쩌면 이것은 누락 된 헤더와 관련이있을 것입니까?

웹 오디오 API에 인코딩 된 라이브 스트림을 재생하고 decodeAudioData를 재생하는 다른 방법이 있습니까? 아무것도 찾을 수 없습니다 ...

도움 주셔서 감사합니다!

답변

1

도움이 될만한 경우 웹 소켓을 통해이를 수행하지 마십시오. 브라우저가 HTTP를 통해 작업을하고이를 플레이하게하십시오. 그렇지 않으면 모든 것을 재발 명해야합니다. 당신이 어떤 이유로 모든 것을 개혁을 주장하는 경우

, 다음을 수행해야합니다

  • 버퍼 들어오는 데이터
  • 데이터
  • 버퍼의 데이터를
  • 을 디코딩 디코딩하는 스크립트로 디코딩 PCM 버퍼를 재생 노드
  • 버퍼 언더런/오버런 (무음 재생 또는 PCM 샘플 삭제로 인한 것일 수 있음)을 처리하십시오.

각 항목의 수행 방법은 특정 요구 사항과 구현에 따라 달라 지므로 그 중 어떤 것에도 문제가 있으면 질문을 나누는 것이 좋습니다.

관련 문제