Как "тройник" /dev/video в Linux?

Как можно "подать" на выход устройства /dev/videox, чтобы поток живого видео мог одновременно использоваться двумя программами?

Я хочу отправить живое видео из /dev/video1:input=1:norm=NTSC сразу в две программы (mplayer и mencoder), чтобы получить не замедленное живое представление в то же время, когда mencoder записывает.

Я знаю, как взять только что закодированный вывод из mencoder и воспроизвести его, но это приводит к задержке в несколько кадров (слишком много). Мне сказали, что VLC может сделать это, но также не без существенного отставания.

Лучшее, что я могу сейчас сделать - это заставить mplayer воспроизводить его на экране, и в то же время использовать "avconv -f x11grab", чтобы захватывать видео с дисплея и кодировать его. Это работает (это не добавляет задержки), но захват видео с дисплея идет медленно - у меня получается около 10 кадров в секунду вместо 30.

Должен быть какой-то простой способ "tee" /dev/video1 на два виртуальных устройства, чтобы и mplayer, и mencoder могли читать их одновременно (без того, чтобы одно из них жаловалось, что устройство "занято").

Что это за путь?

1 ответ

Не совсем то, что вы просите, но сделайте это в одной программе: GStreamer ( попробуйgst-launch). Это делает для видеопотоков, что bash делает для входных / выходных труб.

Плагин GStreamer camerabin2 может делать то, что вам нужно, без задержки: и воспроизводить поток, и записывать его. Хотя в настоящее время его можно использовать только из клиентского кода, а не из gst-launch,

GStreamer имеет tee Фильтруйте, если вам нужно сделать что-то более сложное, например, кодировать и отправлять видеопоток, скажем, по сетевому протоколу RTP.

Другие вопросы по тегам