HTML5中的音频数据流

Kar*_*agi 17 javascript html5 google-chrome audio-streaming html5-audio

我正在以小块的形式从服务器接收PCM音频数据,并将它们存储在一个数组中.现在我想使用一些HTML5功能顺序播放这些音频块.我将其视为"可能"解决方案的两个选项是:

  1. 带有数据URI的 HTML5音频标记
  2. Web音频API

在我调查这些选项时,请向我建议我正在考虑的两个选项的任何其他选项或观点.虽然跨平台解决方案将是最好的,但我可以满足Chrome专用解决方案

ebi*_*del 20

调度音频是Web Audio API的设计目标.如果您将已解码的PCM音频块作为类型化数组(AUDIO_CHUNKS),则可以为每个块创建音频缓冲区,并在准确的时间(一个接一个)使用它们进行调度noteOn().就像是:

var startTime = 0;

for (var i = 0, audioChunk; audioChunk = AUDIO_CHUNKS[i]; ++i) {
  // Create/set audio buffer for each chunk
  var audioBuffer = audioCtx.createBuffer(NUM_CHANNELS, NUM_SAMPLES, SAMPLE_RATE);
  audioBuffer.getChannelData(0).set(audioChunk);

  var source = audioCtx.createBufferSource();
  source.buffer = audioBuffer;
  source.noteOn(startTime);
  source.connect(audioCtx.destination);

  startTime += audioBuffer.duration;
}
Run Code Online (Sandbox Code Playgroud)


Osk*_*son 2

选项 1 可能不起作用,因为音频标签不播放原始音频数据(我认为这就是您所说的 PCM 音频数据,还是我错了?)。每个浏览器都需要特定的编解码器。最重要的是,音频标签根本不可靠地播放没有间隙的东西。

选项 2 可能有效。网络音频 api 包含可能可以填充原始数据并播放的缓冲区,但我从未尝试过这样做。现在最大的缺点是;A。仅 Chrome B. 用户需要通过输入 about:flags 来配置 chrome,并启用网络音频,这可能会让某些人感到害怕。

第三种选择是音频数据 API,它是一种中间立场。我自己从未尝试过,但从规格来看,它看起来正是您正在寻找的。但我不知道实现,所以你必须自己做一些研究:) https://wiki.mozilla.org/Audio_Data_API#Writing_Audio

请注意,这些答案是我凭空给出的,而且我对 HTML5 音频还很陌生。