Есть ли способ перемещаться между двумя потоками RTMP (в зависимости от того, что происходит), используя что-то вроде FFMPEG?

(Извиняется за заголовок вопроса, не совсем уверен, как это сказать)

Поэтому я работаю над потоковым решением / сервером «под ключ» для локальной локальной сети, используя фантастический nginx-rtmp для обработки входящих потоков RTMP с нашего основного ПК и, как мы надеемся, передаем непрерывный сигнал Twitch и другим подобным потоковым службам.

Одна из основных вещей, которые я хотел бы достичь, – это переключить сервер, скажем, на локальную веб-камеру (или другой поток), если мы ничего не отправим на нее, что позволит улучшить подход с нулевым временем простоя, стремление. Я изучил использование ffmpeg для этого, с аргументами в строке:

ffmpeg -i "rtmp://127.0.0.1/in/stream" -i "rtmp://127.0.0.1/webcam/stream" -vcodec copy -acodec copy rtmp://127.0.0.1/out/stream 

но ffmpeg отказывается запускать вывод, если он не получает оба входа, и полностью останавливается, если он теряет его.

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

  • подключаться к nginx-rtmp's on_publish_done и запускать скрипт или что-то, чтобы запустить поток веб-камеры для запуска после короткой задержки (а затем просто остановить этот поток с помощью интерфейса управления) или
  • имея еще одну систему, запускающую что-то вроде Open Broadcaster Software и обработку микширования

Если у кого-то есть какие-то идеи, как бы ни глупо, я бы очень признателен, потому что я в тупике!

One Solution collect form web for “Есть ли способ перемещаться между двумя потоками RTMP (в зависимости от того, что происходит), используя что-то вроде FFMPEG?”

Насколько я знаю, ваш рабочий процесс не может быть выполнен в FFmpeg. Этот рабочий процесс может быть выполнен на стороне сервера Wowza Streaming Engine с использованием модуля Loop до Live.

https://www.wowza.com/docs/how-to-loop-a-pre-roll-until-a-live-stream-starts-loopuntillive

Базовая логика.

  1. Поток 1 – это «резервный» поток. Это может быть файл proroll VOD или живой поток.
  2. Поток 2 является основным потоком.
  3. Если выполняется только поток 1, то текущий поток 1. Когда поток 2 присутствует, переключитесь на поток 2 на ключевом кадре.
  4. Если поток 2 остановлен, переключитесь на поток 1 на ключевой кадр.

Я не нашел эту логику в FFmpeg.

Обратите внимание, что идеально, что все потоки идентичны при переходе от одного к другому.

Видео: кодек, ширина, высота, FPS, дистанция ключевого кадра (GOP) и битрейт. Аудио: кодек, каналы, частота и битрейт.

FFmpeg – это цепочка фильтров, зависящая от порядка, которая принимает входные данные, модифицирует их и затем выводит. Вы можете размещать изображения или видео и выводить изображения или видео. Аудио аналогично тому, что вы можете поместить один кодек в него, изменить его и выгрузить его в аудиоформате по вашему выбору.

Вы можете иметь несколько входов и несколько выходов. В случае нескольких входов их можно объединить в один выходной поток.

Аудио и видео из разных источников для создания одного выхода.

 ffmpeg -i video.input -i audio.input -[modifications] -output 

Аудио и видео поступают из одного источника, но поступают на несколько выходов. Я рассказываю об этом в сообщении в своем блоге.

https://videoblerg.wordpress.com/2016/08/16/how-to-create-abr-content-with-ffmpeg-in-one-pass/

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

Я знаю, что это не тот ответ, который вам нужен, однако вы можете либо добавить код в FFmpeg для поддержки этой функции, либо создать инструмент для выполнения этой функции вне FFmpeg. Любой созданный код также должен быть нейтральным и поддерживать RTSP, RTMP, MPEG-TS, RTP / SDP, HLS и файл цикла. Поскольку это не решает вашу проблему, я не ожидаю получить вашу награду +50 репутации.

  • Удалите опцию «ipv6only» из модуля Puppet nginx
  • начать nginx при загрузке с помощью systemd
  • Что делает этот logrotate config nginx?
  • Блокировать доступ к файлу или местоположению на Nginx
  • Правильный выбор virtualenv в uwsgi.conf
  • Nginx 404 не найден при попытке загрузить файлы в каталог
  • RTMP Streaming to Twitch
  • Как отладить код ошибки dpkg (1) при обновлении пакета deb?
  • Установите nginx 1.8 на Centos 7
  • Как я могу найти, какой пользователь обращается к файлу с помощью strace?
  • iptables / https: маршрутизатор, получающий трафик INPUT, исходящий от порта 443
  • Interesting Posts

    Эффективное перемещение между различными рабочими пространствами

    Максимальный размер файла для инструмента create_compressed_fs

    Странное поведение «sh -c» при прохождении через ssh

    Могут ли загрузочные загрузчики получить доступ ко всем разделам?

    Caja – слишком быстрое обновление

    Измените некоторые файлы, чтобы добавить имя файла

    Как заменить один пакет другим с помощью yum?

    udev для назначения / ограничения последовательных портов на ряд номеров

    Объединение различных полей с разным разделителем

    Многоэлементные бин-каталоги

    Отправить факс через SIP

    Предоставление PHP права на запись в файлы и папки

    Объем переменных при замещении процесса

    Как мне вернуться в Главное меню в YUMI после перехода на «boot:»

    Почему это, когда я загружаю двоичный файл из Интернета, у него нет установленных разрешений, но когда я использую gcc для создания двоичного файла, он это делает?

    Linux и Unix - лучшая ОС в мире.