2017-12-19 14 views
1

WebSocket에서 aac (adts) 스트리밍을 재생해야하는데 인터넷을 검색하여 aac.js가이를 수행 할 수 있지만 지연 시간이 거의 2 ~ 5 초라는 것을 알았습니다.WebAudio WebSocket에서 AAC 스트리밍 재생

그리고 일부 사람들이 WebAudio를 사용하여이 작업을 수행하는 것으로 나타났습니다. 나는 (항상하지만 오류를 반복하지) 일부 패킷 후 코드 만 디코더 반환 오류 아래로 시도 :

내 샘플 자바 스크립트
Uncaught (in promise) DOMException: Unable to decode audio data 

:

var context = new AudioContext(); 
    var nextStartTime = 0; 

    var audioWs = new WebSocket("ws://" + hostip + ":8084"); 
    audioWs.binaryType = 'arraybuffer'; 

    audioWs.onopen = function(evt) { 
     console.log("onOpen"); 
     bexit = 0; 
    }; 

    audioWs.onclose = function(evt) { 
     console.log("close"); 
    }; 

    audioWs.onmessage = function(evt) { 
     var blob = evt.data; 
     if (blob.slice == undefined) { 
      console.log("undefined message"); 
      return; 
     } 
     decodeAudio(blob); 
    }; 

    audioWs.onerror = function(evt) { 
     console.log("error"); 
    }; 

    var decodeAudio = function(blob) { 
     context.decodeAudioData(
      blob, 
      function(buffer) { 
       if (!buffer) { 
        console.log('error decoding file data: ' + url); 
        return; 
       } 
       console.log("playback buffer"); 
       playBuffer(buffer); 
      }, 
      function(error) { 
       console.error("decodeAudioData error", error); 
      }); 
    }; 

    var playBuffer = function(buffer) { 
     var source = context.createBufferSource(); 
     source.buffer = buffer; 
     if(nextStartTime == 0){ 
      nextStartTime = context.currentTime + buffer.duration/2; 
     } 
     source.connect(context.destination); 
     source.start(nextStartTime); 
     nextStartTime += buffer.duration; 
    }; 

이 데이터에 의해 발생의 I 확실하지 않은 경우가로부터받은 웹 소켓 너무 빨리 incomming 다음 디코더 오류가 발생합니다! 어떻게 수정해야합니까?

아니면 WebAudio API로이 작업을 수행하는 것이 좋지 않을 수 있습니다.

+0

스트리밍 재생을 위해 Media Source Extension을 시도하십시오. – beetlej

답변

1

WebAudio의 decodeAudioData은 부분 얼룩을 디코딩 할 수 없습니다. 대부분의 인코딩 형식에서는 필요한 정보 (샘플 속도, 채널, 샘플 크기 등)가 처음에 있기 때문에 일반적으로 전체 파일이 필요합니다.