Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: vedant galaОтветов: 1

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

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

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

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

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

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

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

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

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

bashstreamffmpegnamed-pipestransport

Ответы

Ответ 1 · рейтинг 1 · Przemo

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, будут завершены из-за сломанного канала.

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы