<div dir="ltr"><div>После замены стороннего модуля nginx_mod_h264_streaming на стандартный with-http_mp4_module обнаружилась проблема с раздачей mp4 видео файлов для псевдостриминга - сторонний модуль делал перестановку moov-атома в начало файла, стандартный отдает файл в неизменном виде (проверяем с помощью qtfaststart -l file.mp4).</div><div>В документации сказано что стандартный модуль должен это делать с оговоркой что это создает дополнительную нагрузку:</div><div>> До начала воспроизведения плееру необходимо прочитать метаданные. Для этого он отсылает специальный запрос с аргументом start=0. Многие кодирующие программы добавляют метаданные в конец файла. Это неоптимально для псевдо-стриминга, поскольку плееру потребуется загрузить файл целиком прежде чем начать воспроизведение. Если метаданные находятся в начале файла, nginx’у достаточно начать отправлять в ответ содержимое файла. Если же метаданные находятся в конце файла, потребуется прочитать весь файл и подготовить новый поток, в котором метаданные предшествуют медийным данным. Это требует дополнительного процессорного времени, памяти и дискового ввода/вывода, поэтому лучше заранее подготовить исходный файл для псевдо-стриминга, нежели делать это для каждого запроса.</div><div>В нашем хранилище видео лежит с moov-атомом в конце файла и мы понимаем что предварительная подготовка решит проблему, но при нашем объеме видео подготовка и проверка займет очень много времени.</div><div>Хотелось бы понимать почему модуль ngx_http_mp4_module не выполняет функцию заявленную в документации и исходя из этого принимать решение о дальнейших действиях.</div><div>Проблема наблюдается на двух версиях (хотя набор модулей практически одинаковый):</div><div><br></div><div>nginx 1.7.3</div><div>built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)</div><div>TLS SNI support enabled</div><div>configure arguments: --add-module=./../echo-nginx-module-0.47 --add-module=./../encrypted-session-nginx-module-master --add-module=./../ngx_devel_kit/ --add-module=./../nginx-upload-module-2.2 --add-module=./../lua-nginx-module --add-module=./../redis2-nginx-module-0.11 --add-module=./../set-misc-nginx-module-0.24 --add-module=./../nginx-ctpp --add-module=./../ngx_http_substitutions_filter_module --prefix=/etc/nginx/ --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_mp4_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_secure_link_module --with-http_stub_status_module --with-http_geoip_module --with-http_image_filter_module --with-http_xslt_module --with-md5=YES --with-file-aio --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic'</div><div><br></div><div>nginx 1.6.0</div><div>built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)</div><div>TLS SNI support enabled</div><div>configure arguments: --add-module=./../echo-nginx-module-0.47 --add-module=./../encrypted-session-nginx-module-master --add-module=./../ngx_devel_kit/ --add-module=./../nginx-upload-module-2.2 --add-module=./../lua-nginx-module --add-module=./../redis2-nginx-module-0.11 --add-module=./../nginx_upstream_hash-0.3.2 --add-module=./../set-misc-nginx-module-0.24 --add-module=./../nginx-ctpp --prefix=/etc/nginx/ --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-rtsig_module --with-select_module --with-poll_module --with-md5=YES --with-http_addition_module --with-http_ssl_module --with-http_realip_module --with-http_geoip_module --with-http_addition_module --with-http_sub_module --with-http_mp4_module --with-http_flv_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_secure_link_module --with-http_stub_status_module --with-file-aio --with-http_xslt_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic'</div><div><br></div><div><br></div><div>Это предыдующая версия со сторонним модулем в которой перестановка moov-атома работала:</div><div>nginx/1.4.7</div><div>built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)</div><div>TLS SNI support enabled</div><div>configure arguments: --add-module=./../mod_strip --add-module=./../echo-nginx-module-0.47 --add-module=./../nginx_syslog_patch --add-module=./../encrypted-session-nginx-module-master --add-module=./../nginx_mod_h264_streaming-2.2.7 --add-module=./../nginx_upstream_hash-0.3.2 --add-module=./../ngx_devel_kit/ --add-module=./../ngx_http_mp4frag/ --add-module=./../nginx-upload-module-2.2 --add-module=./../lua-nginx-module --add-module=./../redis2-nginx-module-0.10 --add-module=./../set-misc-nginx-module-0.22rc8 --add-module=./../nginx-ctpp --add-module=./../xss-nginx --prefix=/etc/nginx/ --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-rtsig_module --with-select_module --with-poll_module --with-md5=YES --with-http_addition_module --with-http_ssl_module --with-http_realip_module --with-http_geoip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_xslt_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic'</div><div><br></div><div>В соответствующем location включены только limit_rate и mp4 опции.</div><div><br></div>-- <br><div dir="ltr"><pre cols="72">Regards,
 Alexey Schurov<br></pre><pre cols="72"><br></pre></div>
</div>