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