exec_block
Директива `exec_block` позволяет выполнять внешние команды в ответ на определённые события RTMP.
Описание
Директива 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.
Будьте осторожны при использовании команд с длительным временем выполнения, так как они могут блокировать рабочий процесс. По возможности используйте асинхронную обработку или многопоточность.