Есть ли способ перемещаться между двумя потоками 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 репутации.

  • Почему я получаю ошибку несуществующего класса в PHP на Fedora?
  • Правильный выбор virtualenv в uwsgi.conf
  • Какой пользователь (www-data или vagrant) запускает приложение Laravel в виртуальном сервере Homestead?
  • Как я могу найти, какой пользователь обращается к файлу с помощью strace?
  • Как установить nginx для http и https
  • Настройка сшивания OCSP - проверьте сертификаты CA
  • iptables / https: маршрутизатор, получающий трафик INPUT, исходящий от порта 443
  • Nginx + PHP-FPM, обслуживающий файлы .php в качестве загрузок
  • Конфигурация сервера nginx с несколькими местоположениями не работает
  • nginx обслуживает info.php, но не поддерживает index.php
  • Как nginx получает запросы от клиента и перенаправляет его на фактический сервер?
  • Редактирование вложенного текста и определенных строк в файле с использованием сценария bash
  • Interesting Posts

    Определите, сколько из Unicode поддерживает мой терминал, даже через экран

    Двоичные клавиши ввода / dev / входного уровня

    Безопасно использовать параметр rsync -z для синхронизации базы данных (двоичная репликация Postgresql)?

    GNOME-Terminal: создание новой вкладки терминала на удаленной машине

    Код выхода Ansi в VIM

    Не удается удалить файл на разделе NTFS, событие с правами root

    Как остановить вывод консоли Linux при использовании экрана?

    команда: ls / etc | сортировать | grep d * не дает результатов, но ls / etc | сортировать | grep p * перечисляет всю директорию

    Сделать zkbd игнорировать $ DISPLAY

    Тот же IP-адрес целевой при использовании tsocks

    SOX обнаруживает тишину при чтении mp3 с url

    Используя терминал, какие другие способы вы можете удалить файл?

    Как проверить упавшие пакеты на процесс / сокет, когда буфера сокета переполняется для сокетов домена UNIX?

    PID-файл /var/run/named/named.pid не читается (еще?) После запуска

    Найти и удалить много файлов по определенному контенту

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