exec_block

Директива `exec_block` позволяет выполнять внешние команды в ответ на определённые события RTMP.

Синтаксисexec_block { command; }
По умолчаниюnone
Контекст
Аргументыnone

Описание

Директива exec_block является частью модуля NGINX RTMP, который определяет, как внешние команды могут выполняться при возникновении определённых событий во время обработки RTMP-потока, например при публикации или закрытии потока. Эта функциональность имеет решающее значение для интеграции дополнительной обработки или уведомлений в потоковые рабочие процессы в приложениях, работающих в реальном времени.

Когда поток публикуется или закрывается, директива запускает выполнение заданной команды или скрипта, передавая релевантные параметры, такие как имя потока и идентификаторы клиентов. Это позволяет разработчикам автоматизировать задачи, такие как управление записями, обработка уведомлений о потоках или даже задания по транскодированию с использованием внешних инструментов, таких как FFmpeg. Команда выполняется в контексте рабочего процесса NGINX, который обрабатывает запрос, что обеспечивает обратную связь в реальном времени по активности потоков.

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

Пример конфига

rtmp {
    server {
        listen 1935;

        application live {
            live on;
            exec_block {
                exec /usr/local/bin/notify_stream.sh "$name";
            }
        }
    }
}
⚠

Убедитесь, что внешняя команда может быть выполнена рабочим процессом NGINX без ограничений безопасности.

⚠

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

⚠

Будьте осторожны при использовании команд с длительным временем выполнения, так как они могут блокировать рабочий процесс. По возможности используйте асинхронную обработку или многопоточность.

← Ко всем директивам