Статистика потокового видео nginx - PullRequest
0 голосов
/ 30 июня 2018

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

Для настройки nginx я использовал следующее:

location /content/ {
    mp4;
    mp4_buffer_size       1m;
    mp4_max_buffer_size   5m;
}

Я храню все видео в папке / content на моем сервере и получаю к ним доступ через URL: http://example.com/content/testvideo.mp4

Поскольку я могу получить доступ к своему серверу с несколькими доменами, я могу посмотреть одно и то же видео, посетив

http://mydomain1.com/content/testvideo.mp4

или

http://mydomain2.com/content/testvideo.mp4

Вопрос: как я могу регистрировать статистику, по какой ссылке просматривалось видео и сколько секунд?

1 Ответ

0 голосов
/ 30 июня 2018

Настройка формата ведения журнала, который включает переменные $host и $request_time.

Используйте этот формат регистрации в директиве местоположения.

Он полностью документирован на веб-сайте Nginx вместе со списком переменных, доступных для включения в журналы, следующее относится к блоку http и представляет собой модифицированную версию стандартного формата журнала combined с двумя вышеупомянутыми переменными, добавленными в конец:

log_format streaming '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" $host $request_time';

Это определяет формат журнала с именем streaming, переменная $host, очевидно, является именем хоста из запроса клиента. $request_time, согласно документам:

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

Если ваше видео представляет собой CBR, вы также можете использовать $bytes_sent для регистрации всех данных, переданных клиенту, и вычисления продолжительности видео, переданного таким образом.

Как только вы определили свой пользовательский формат журнала, затем в своем блоке местоположения для потоковой передачи вы устанавливаете директиву для запросов к этому местоположению, чтобы использовать этот формат для регистрации, как это:

access_log /path/to/log/video.log streaming;

Это просто путь для записи журнала, а streaming - это формат журнала, который будет использоваться для этого журнала.

Теперь Nginx создаст один файл журнала, содержащий все запросы к этому местоположению, независимо от домена, который посетил клиент.

Может быть, вы бы предпочли отдельные журналы для каждого домена? Нет проблем, просто используйте переменную $host как часть пути в вашей директиве access_log

access_log /path/to/log/$host-video.log streaming;

Теперь у каждого домена будет свой журнал. example.com-video.log, example.net-video.log и т. д.

Может быть, вы хотите оба? Нет проблем, вы можете указать несколько директив access_log на одном уровне:

access_log /path/to/log/video.log streaming;
access_log /path/to/log/$host-video.log streaming;
...