音频数据流如何以HTML5格式播放?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (116)

我正在以小块接收来自服务器的PCM音频数据,并将它们存储在一个阵列中。现在我想用一些HTML5功能按顺序播放这些音频块。我正在寻找的两种可能的解决方案是:

  1. 带有数据URI的 HTML5音频标签
  2. 网络音频API

在我调查这些选项的同时,请建议任何其他选项或对我正在查看的两个选项的看法。虽然跨平台解决方案将是最好的,但我可以解决Chrome浏览器解决方案。

提问于
用户回答回答于

选项1可能无法工作,因为音频标签不播放原始音频数据(我假设你是指PCM音频数据,或者我错了)。每个浏览器需要特定的编解码器 最重要的是音频标签不可靠地播放没有间隙的东西。

选项2可能有效。网络音频api包含缓冲区,可能会充满原始数据并播放,但我从来没有尝试过。现在最大的缺点是:一个。只有Chrome浏览器。用户需要通过键入about:flags并启用Web Audio来配置chrome,这对于某些人来说可能是可怕的。

第三个选择是音频数据API,它是一个中间地带。我从来没有尝试过,但从规格看,它看起来像你正在寻找的。我不知道实现,所以你必须做一些你自己的研究。

用户回答回答于

计划音频是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;
}

所属标签

可能回答问题的人

  • 找虫虫

    0 粉丝0 提问5 回答
  • 天使的炫翼

    17 粉丝531 提问5 回答
  • 不吃貓的鱼oo

    4 粉丝466 提问4 回答
  • 人生的旅途

    10 粉丝484 提问4 回答

扫码关注云+社区

领取腾讯云代金券