Объединение буфера 'audio / x-wav' и обслуживание с помощью 'Transfer-Encoding': 'chunked' - PullRequest
2 голосов
/ 02 декабря 2011

Этот вопрос является продолжением предыдущего вопроса , который был решен благодаря @ thejh.

Я пытаюсь преобразовать текст в аудио и передать данные клиенту как«порционные» данные.Пока мои заголовки выглядят так:

res.writeHead(200, {
  'Content-Type': 'audio/wav',
   // I tried 'audio/x-wav' as well
  'Transfer-Encoding': 'chunked'
});

И затем я преобразую фрагменты текста в аудио в очереди (которые я возвращаю как данные, закодированные в base64) и обслуживаю их так:

var src = Base64Audio.replace("data:audio/x-wav;base64,","");
var binAudio = new Buffer( src, 'base64');
res.write(binAudio);

Вся информация передается и отправляется клиенту, но по какой-то причине браузер (я тестирую ее в Firefox 7.0.1) воспроизводит ее и останавливается после первой порции.Вот результат / демонстрация , показывающий преждевременное завершение аудио , и это код, выполняемый на github.

Почему это так?Это потому, что данные x-wav имеют метаданные, такие как конец или указанная длина в заголовке / метаданных?Если да, что это за метаданные и есть ли какой-то способ их редактирования, чтобы браузер успешно конкатенировал полученные фрагменты?

Мне известен заголовок 'Content-Length': Buffer.length, но в этом случае я не знаюкак долго будет весь поток.

Может кто-нибудь предложить предложения.Можно ли редактировать буферы перед их отправкой так, чтобы браузер правильно их объединял?

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

Я думаю, что вам лучше всего сделать так, чтобы это напоминало аудиопоток, как было бы прислано icecast / shoutcast. Я не думаю, что FireFox будет обрабатывать это по умолчанию (старые версии этого не делают), поэтому есть так много прекрасных флеш-плагинов для воспроизведения потоков.

Вам нужно установить еще несколько заголовков, чтобы они напоминали поток:

HTTP/1.0 200 OK
Content-Type: audio/wav
Transfer-Encoding: chunked
icy-br: ##
ice-audio-info:bitrate=##;samplerate=#####
icy-description:Some Name
icy-genre:Alternative
icy-name:Name
icy-pub:0
icy-url:http://yoursite.com
Server:Whatever you want
Cache-Control: no-cache
Connection: Keep-Alive
0 голосов
/ 02 декабря 2011

Я не знаю ответа на этот вопрос, но посмотрим, как потоки Shoutcast проходят по проводам.Они представляют собой бесконечно длинный mp3-файл, и аналогичные концепции должны применяться, если вы посмотрите, как это делается.

...