использование каналов для направления файлового ввода-вывода в другой процесс - PullRequest
1 голос
/ 12 марта 2011

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

Если быть точным, я хочу передать вывод ffmpeg (транскодированные видеоданные) в мое приложение, чтобы использовать его. Если я создам именованный канал, такой как /tmp/out.mp4, и передам его ffmpeg в качестве выходного имени файла, ffmpeg попытается снова создать этот файл, возможно, перезаписав мой канал (или что-то в этом роде). Как бороться с такой ситуацией?

Есть ли какой-либо общий способ прозрачного перенаправления файлового ввода-вывода приложения?

(я пытаюсь написать сервер потокового видео (только для изучения и развлечения), который транскодирует форматы, такие как avi, в дружественный потоковый формат, например mpeg4, во время потоковой передачи, я обнаружил, что ffmpeg слишком медленный для этой цели, он занимал примерно 2 сек для перекодирования 1 сек видео

Это проблема с моей установкой / ПК или ffmpeg известен медлительностью? ) * +1010 *

PS: Кстати, я пишу это в C .

Ответы [ 2 ]

3 голосов
/ 12 марта 2011

ffmpeg можно убедить вывести на канал:

ffmpeg -i whatever.avi -f mp4 -

«-» указывает ему выводить на стандартный вывод вместо файла, а «-f» указывает, каким должен быть выходной файл.

Конечно, вы могли бы перенаправить это на именованный канал, но вызов этого с помощью popen, чтобы получить вывод как дескриптор файла напрямую, кажется мне подходящим способом.

0 голосов
/ 13 июня 2013

ffmpeg также может читать из стандартного ввода и писать в стандартный вывод следующим образом:

ffmpeg -i pipe:0 -f wav pipe:1

, где 0 и 1 - стандартные файловые дескрипторы POSIX.

...