Перезагрузите ffserver.conf во время потоковой передачи

Я хочу динамически обновлять ffserver.conf, чтобы добавить в него новый источник потока.

Есть ли способ перезагрузить ffserver.conf в ffserver, не останавливая работу потоков?

2 ответа

Решение

Перегрузка "ffserver.conf"Конфигурационный файл не поддерживается ffserver. И у него нет кода перезапуска, как я вижу.

Источники ffserver: ffmpeg / ffserver.c строка 4020:

4020 static int parse_ffconfig(const char *filename)

И парсер конфигурации вызывается только один раз - из main():

4710 int main(int argc, char **argv)
4711 {
...
4735     if ((ret = parse_ffconfig(config_filename)) < 0) { ...

Там нет специальных обработчиков сигналов (например, HUP в init) для перезапуска сервера или перечитывания конфигов (только SIGCHLD а также SIGPIPE Нужно было использовать вилку и работать с розетками).

Кажется возможным обойти эту проблему с помощью конфигурации ffserver.

Помня, что каналы приходят и потоки выходят, и что вы можете предоставлять каналы серверу с помощью ffmpeg - вы можете просто настроить большой набор общих каналов и потоков (вероятно, сгруппированных в соответствии с общими потребностями, такими как SD, HD, только аудио и т. Д.) и затем запустите каналы по мере необходимости, предоставив URL-адрес соответствующему клиенту (-ам), а затем повторно запросите этот "слот канала" после завершения канала.

Это означает, что вы можете эффективно управлять всеми другими аспектами динамического добавления / удаления потоков извне ffserver. Смотрите пример, который поставляется с ffserver (я нашел его в /etc/ffserver.conf). Здесь есть базовая демонстрация: https://www.ffmpeg.org/ffserver-all.html

Единственным недостатком этого является то, что ваши потоки будут названы не описательно, как HDStream1 ... и т. Д.

Другие вопросы по тегам