Перезагрузите 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 ... и т. Д.