Чтение потоков ответов HTTP Nginx в обратном порядке байтов - PullRequest
0 голосов
/ 29 октября 2018

Предлагает ли Nginx или HTTP 1/2 способ подачи файла в обратном порядке байтов? Я заинтересован в чтении двоичного потока HTTP Response в обратном порядке байтов, чтобы искать последовательность байтов в конце файлов (которые находятся в диапазоне 5-500 МБ). Мое текущее решение использует итеративные Range запросы и байтовое сканирование с помощью Streams API . Этого достаточно, но не оптимально.

Целью реализации является вычисление длительности аудиофайлов Opus, как объяснено в «Как получить длительность файла .opus. Сценарий на стороне сервера (Python, Go, PHP) всегда может работать как запасной вариант, но мне любопытно, может ли Nginx или другой HTTP-сервер уже сделать это «из коробки». Сохранение низкой задержки Opus очень важно. Если существующая опция этого не делает, будет написан пользовательский модуль Nginx, который отвечает HTTP-заголовками, содержащими продолжительность (и другую метаинформацию Opus).

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

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

https://unix.stackexchange.com/questions/416401/how-to-reverse-the-content-of-binary-file

0 голосов
/ 08 ноября 2018

TL; DR; Я бы порекомендовал вам извлечь длительность с помощью существующих инструментов.

Используйте утилиту opusfile , чтобы извлечь длительность и другие метаданные и сохранить их в отдельном файле рядом с каждым аудиофайлом.

Делайте это всякий раз, когда файлы загружаются или изменяются на сервере.

Ваш веб-клиент может затем получить все метаданные в одном, но отдельном http-запросе.

Немного стар, но в соответствии с Добавление заголовков динамического ответа из файла Не существует встроенного способа построения заголовков ответа из файла. Так что вам понадобятся оба запроса.

...