Javascript HTML5中的音频数据流

Javascript HTML5中的音频数据流,javascript,html,google-chrome,audio-streaming,html5-audio,Javascript,Html,Google Chrome,Audio Streaming,Html5 Audio,我从服务器接收小块PCM音频数据,并将其存储在阵列中。现在,我想使用一些HTML5功能连续播放这些音频块,不留任何间隙。我认为“可能”的解决方案有两种: HTML5音频标签,带有 在我调查这些选项时,请就我正在考虑的两个选项向我提出任何其他选项或观点。虽然跨平台解决方案将是最好的,但我可以满足于仅使用Chrome的解决方案,因为选项1可能不起作用,因为音频标签不会播放原始音频数据(我认为这就是您所说的PCM音频数据,或者我错了吗?)。每个浏览器都需要特定的编解码器。在音频标签的顶端,播放没有间

我从服务器接收小块PCM音频数据,并将其存储在阵列中。现在,我想使用一些HTML5功能连续播放这些音频块,不留任何间隙。我认为“可能”的解决方案有两种:

  • HTML5音频标签,带有

  • 在我调查这些选项时,请就我正在考虑的两个选项向我提出任何其他选项或观点。虽然跨平台解决方案将是最好的,但我可以满足于仅使用Chrome的解决方案,因为选项1可能不起作用,因为音频标签不会播放原始音频数据(我认为这就是您所说的PCM音频数据,或者我错了吗?)。每个浏览器都需要特定的编解码器。在音频标签的顶端,播放没有间隙的东西是完全不可靠的

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

    第三种选择是音频数据API,这是一种中间立场。我自己从来没有试过,但从规格上看,它看起来正是你想要的。但我不知道如何实现,所以您必须自己做一些研究:)


    请不要以为我是在头脑中给出这些答案,我对HTML5音频还是相当陌生的

    安排音频是Web audio API的设计目标。如果将解码的PCM音频块作为类型化数组(
    audio\u 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;
    }
    

    关于不播放原始PCM,您是对的,但WAV文件是原始音频的一个非常薄的包装(其中“包装”表示44字节的头)。这是经常做的。当然,两年后的今天,网络音频API似乎是一个更好的选择。