Re: Модуль ngx_http_mp4_module не переставляет moov-атом
Maxim Dounin
mdounin at mdounin.ru
Tue Sep 30 14:57:30 UTC 2014
Hello!
On Tue, Sep 30, 2014 at 06:37:00PM +0400, Алексей Щуров wrote:
> После замены стороннего модуля nginx_mod_h264_streaming на стандартный
> with-http_mp4_module обнаружилась проблема с раздачей mp4 видео файлов для
> псевдостриминга - сторонний модуль делал перестановку moov-атома в начало
> файла, стандартный отдает файл в неизменном виде (проверяем с помощью
> qtfaststart -l file.mp4).
> В документации сказано что стандартный модуль должен это делать с оговоркой
> что это создает дополнительную нагрузку:
> > До начала воспроизведения плееру необходимо прочитать метаданные. Для
> этого он отсылает специальный запрос с аргументом start=0. Многие
> кодирующие программы добавляют метаданные в конец файла. Это неоптимально
> для псевдо-стриминга, поскольку плееру потребуется загрузить файл целиком
> прежде чем начать воспроизведение. Если метаданные находятся в начале
> файла, nginx’у достаточно начать отправлять в ответ содержимое файла. Если
> же метаданные находятся в конце файла, потребуется прочитать весь файл и
> подготовить новый поток, в котором метаданные предшествуют медийным данным.
> Это требует дополнительного процессорного времени, памяти и дискового
> ввода/вывода, поэтому лучше заранее подготовить исходный файл для
> псевдо-стриминга, нежели делать это для каждого запроса.
> В нашем хранилище видео лежит с moov-атомом в конце файла и мы понимаем что
> предварительная подготовка решит проблему, но при нашем объеме видео
> подготовка и проверка займет очень много времени.
> Хотелось бы понимать почему модуль ngx_http_mp4_module не выполняет функцию
> заявленную в документации и исходя из этого принимать решение о дальнейших
> действиях.
Moov-атом переставляется в том и только в том случае, если в
запросе присутствует аргумент start. Если аргумента start нет, то
метаданные не переставляются.
Соответственно, если необходимо переставлять moov-атом, то нужно
убедиться, что исходный запрос плеер присылает со start=0.
Если, наоборот, переставлять moov-атом не надо (он заранее
правильно помещён в начало файла), то можно сэкономить ресурсы на
проверке "правильно ли размещён moov-атом", обеспечив отсутствие
аргумента start=0 в исходной запросе плеера.
--
Maxim Dounin
http://nginx.org/
Подробная информация о списке рассылки nginx-ru