Потоковая передача без Content-Length в ответе - PullRequest
2 голосов
/ 30 августа 2011

Я использую Node.js, Express (и подключение) и fluent-ffmpeg.

Мы хотим передавать потоковые аудиофайлы, которые хранятся в Amazon S3, через http.

Мывсе работает, за исключением того, что мы хотели бы добавить функцию, преобразование потока на лету через ffmpeg.

Это работает хорошо, проблема в том, что некоторые браузеры проверяют заранее, прежде чем получитьфайл.

Входящие запросы, содержащие заголовок Range, на который мы отвечаем 206 со всей информацией от S3, имеют фундаментальную проблему: нам нужно заранее знать длину содержимого файла.

Мы не знаем, что, поскольку он проходит через ffmpeg.

Одним из решений может быть выписка результирующей длины содержимого непосредственно на S3 при сохранении файла (в специальном заголовке),но это значит, что нам приходится испытывать трудности с очередями для кодирования после загрузки, чтобы узнать размер будущих запросов.Это также означает, что если мы поменяем компрессор или пресет, нам нужно будет пройти через все это снова, так что это не жизнеспособное решение.

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

Дело в том, что без надлежащего заголовка длины содержимого в ответ все кажется сломанным, или браузеры зацикливаются или перезапускают поток в свое удовольствие.

Идеи?

1 Ответ

2 голосов
/ 30 августа 2011

Кажется, это работает для меня.

Было бы здорово, если бы вы могли подтвердить, дает ли он ожидаемые результаты и в ваших браузерах.

res.writeHead(200, {
                       'Transfer-Encoding': 'chunked'
                     , 'Content-Type': 'audio/mpeg'
                     , 'Accept-Ranges': 'bytes' //just to please some players, we do not actually allow seeking
});

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...