2017-12-19 29 views
1

私はWebSocketからaac(adts)ストリーミングを再生する必要があります。インターネットを検索して、aac.jsがそれを行うことができますが、遅延はほぼ2〜5秒です。WebAudio WebSocketからのAACストリーミング再生

そして私は、WebAudioを使用している人もいます。私は、コードが、デコーダリターンエラー一部のパケットの後に(常にではないが、繰り返しエラー)以下でそれを試してみてください。

Uncaught (in promise) DOMException: Unable to decode audio data 

私のサンプルのjavascript:

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; 
    }; 

私はそれがデータによって引き起こされるかどうかわからないのWebSocketから受け取りましたあまりにも速すぎるとデコーダエラーが発生します!どのように修正する必要がありますか?

WebAudio APIを使用してこのタスクを実行するのは良い方法ではないでしょうか?

+0

ストリーミング再生用にMedia Source Extensionを試してください。 – beetlej

答えて

1

WebAudioのdecodeAudioDataは部分ブロブをデコードできません。多くのエンコードされたフォーマットでは、必要な情報(サンプルレート、チャンネル、サンプルサイズなど)が冒頭にあるだけなので、ファイル全体が必要です。

関連する問題