Работа с mkfifo и транспортными потоками возможна?

Я хочу выполнить скрипт bash, который будет делать следующее:

Приложение «ffmpeg» создает файл LIVE транспортного потока (.ts). Мне нужно поработать над этим живым потоком (выполнить демультиплексирование и т. д.).

Теперь я знаю, что это нужно делать через FIFO; но вот моя задача.

Мне нужно перенаправить вывод ffmpeg для записи в fifo, а затем другое приложение будет работать с этим содержимым fifo. Это происходит непрерывно в режиме реального времени, пока я не нажму, скажем, Ctrl+C.

Это возможно? Придется ли мне делать это двумя терминалами?

Я в основном пишу сценарий bash для вышеуказанных операций (и других), так что мне нужно вызывать два терминала или, может быть, разветвление?

Добрый совет.

Заранее спасибо!


person vedant gala    schedule 30.09.2017    source источник
comment
Что не просто использовать трубу?   -  person szatmary    schedule 30.09.2017
comment
ffmpeg не поддерживает каналы; по крайней мере, не именованные каналы. Кроме того, мне приходится одновременно запускать три экземпляра ffmpeg для трех разных каналов, а затем использовать эти три канала в качестве входных данных для четвертого экземпляра ffmpeg, который как бы объединяет их вместе.   -  person vedant gala    schedule 02.10.2017
comment
Ffmpeg полностью поддерживает каналы.   -  person szatmary    schedule 02.10.2017


Ответы (1)


FFmpeg поддерживает каналы. Все, что вам нужно сделать, это подойти следующим образом:

  1. сделать fifo

    mkfifo first.ts  
    
  2. запустить ffmpeg с трубой

    ffmpeg -i sample.ts -c copy -muxrate 5000000 pipe:1 > first.ts
    
  3. запускайте любые другие инструменты, которые работают с файлами транспортного потока, например. Инструмент OpenCaster tscbrmuxer, который может добавить, например. Таблица NIT для передачи файла потока

    tscbrmuxer b:3008 NIT.ts b:5000000 first.ts > second.ts
    
  4. Если вы хотите остановить 2 инструмента, просто убейте последний, который использует pipe/fifo. в противном случае вам придется убить tscbrmuxer.

    kill tscbrmuxer
    

    ИЛИ
    Если вы не используете последний инструмент в фоновом режиме, просто уничтожьте его с помощью [ctrl+c]

Благодаря использованию такого подхода (например, в виде сценария оболочки или Python) все инструменты, использующие pipe/fifo, будут завершены из-за сломанного канала.

Я надеюсь, что это поможет вам.

person Przemo    schedule 07.12.2017