Эмулируйте трубу с несколькими выходами.Достаточно ли быстр Python для этого? - PullRequest
1 голос
/ 10 февраля 2011

У меня есть входные байты из ffmpeg. Я хотел бы отправить этот вывод нескольким другим процессам ffmpeg. Поскольку я не могу использовать Unix Pipe, Socket, ... для этого (или могу ли я?) Я использую python в качестве принимающего конца канала. Затем подпрограмма копирует полученные данные во все ранее «зарегистрированные» торговые точки.

Это неправильно!

В частности, у меня такое ощущение, что это означает много памяти для копирования. Это работает прямо сейчас. Но я бы очень хотел подумать о «правильном» способе сделать это.

    def writeData(self,data):
    """Write 'data' to all outputs"""
    if len(self.outlets) > 0:
        for outlet in self.outlets:
            outlet.writeData(data)
    else:
        self.logger.warn("Received data but no outlets registred (yet?)")

Ответы [ 3 ]

2 голосов
/ 10 февраля 2011

РЕДАКТИРОВАТЬ : Спасибо Филу, который исправил ошибку в более ранней версии (см. Комментарии).

Используя bash, вы можете сделать

ffmpeg ... | tee >(ffmpeg ...) >(ffmpeg ...) >(ffmepg ...) > /dev/null

Это передаст выходные данные первого ffmpeg трем другим.

Если вы не используете bash, вы можете вручную создать именованные каналы, подключить их к ffmpeg процессам и использоватьtee для передачи к именованным каналам:

mkfifo pipe1 pipe2
ffmpeg ... < pipe1
ffmpeg ... < pipe2
ffmpeg ... | tee pipe1 pipe2 | ffmpeg ...
rm pipe1 pipe2

Вышеприведенный код bash делает в основном то же самое.Создание и удаление именованных каналов происходит прозрачно.

1 голос
/ 11 февраля 2011

Вы смотрели на утилиту "pee" из пакета moreutils? Это именно то, что вы описываете:

ffmpeg | pee 'ffmpeg -stuff1' 'ffmpeg -stuff2' 'ffmpeg -stuff3'

1 голос
/ 10 февраля 2011

Скорее всего, это будет достаточно быстро, особенно если учесть, что сейчас скорость ЦП сравнивается с относительно более низкой пропускной способностью сжатых видеоданных.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...