【问题标题】:WebAudio AAC streaming playback from WebSocket来自 WebSocket 的 WebAudio AAC 流式播放
【发布时间】:2017-12-19 00:44:54
【问题描述】:

我需要从 WebSocket 播放 aac (adts) 流,我搜索了互联网,发现 aac.js 可以做到,但听起来延迟差不多 2~5 秒。

我发现有些人使用 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 完成这项任务可能不是好方法?

【问题讨论】:

  • 尝试使用媒体源扩展进行流式播放。

标签: websocket web-audio-api


【解决方案1】:

WebAudio 的 decodeAudioData 无法解码部分 blob。一般来说,它需要整个文件,因为在许多编码格式中,必要的信息(采样率、通道、样本大小等)只是在开头。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多