Потоковое аудио данных в HTML5 - PullRequest
17 голосов
/ 06 июля 2011

Я получаю аудиоданные PCM с сервера небольшими порциями и храню их в массиве. Теперь я хотел бы воспроизводить эти аудио-фрагменты последовательно без пропусков, используя некоторые возможности HTML5. В качестве «возможных» решений я рассматриваю два варианта:

  1. HTML5 Аудио тег с URI данных
  2. API веб-аудио

Пока я изучаю эти варианты, пожалуйста, предложите мне любой другой вариант или взгляды на два варианта, которые я рассматриваю. Хотя кроссплатформенное решение будет лучшим, но я могу согласиться на решение Chrome только как

Ответы [ 2 ]

20 голосов
/ 28 августа 2011

Планирование аудио - это то, для чего был разработан 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;
}
2 голосов
/ 05 августа 2011

Вариант 1, вероятно, не будет работать, потому что аудио-тег не воспроизводит необработанные аудио-данные (я предполагаю, что вы подразумеваете под аудио-данными PCM, или я ошибаюсь?).Каждому браузеру нужны определенные кодеки.В довершение всего к аудиотэгу вообще не стоит играть вещи без пробелов.

Вариант 2 может работать.API веб-аудио содержит буферы, которые, вероятно, могут быть заполнены необработанными данными и воспроизведены, но я никогда не пытался это делать.Большой недостаток сейчас в том, что;а.Только хром б.пользователь должен настроить chrome, набрав about: flags и включив Web Audio, что может пугать некоторых.

Третий вариант - это API Audio Data, который является чем-то средним.Я никогда не пробовал сам, но из спецификации это выглядит именно то, что вы ищете.Я не знаю о реализации, так что вам придется провести некоторое собственное исследование :) https://wiki.mozilla.org/Audio_Data_API#Writing_Audio

Пожалуйста, не то, чтобы я давал эти ответы на макушке, и я все еще довольноновичок в аудио HTML5.

...