Программно отправлять изображения на v4l2-устройство

У меня есть программа, которая генерирует JPG. Я хотел бы отправить эти изображения на мою виртуальную веб-камеру, когда они будут созданы. Я могу создать виртуальную веб-камеру, используя v4l2loopback и смотрел на gstreamer, но не могу заставить его работать.

Я пробовал gst-launch с multifilesrc, но, похоже, это работает только тогда, когда у меня уже есть сгенерированные изображения. Я также попытался настроить gst-launch, чтобы просто отправить одно изображение на веб-камеру, а затем просто перезаписать изображение при создании нового. Это, к сожалению, приводит к сбою gstreamer.

Кто-нибудь знает, как я мог бы сделать это? Мне не нужно использовать gstreamer, но я хочу реализовать это в Linux, в идеале в Python.

2 ответа

Решение

Следующий скрипт будет отслеживать каталог и передавать каждое вновь добавленное изображение в gstreamer, который отправит его на видео-устройство (/dev/video0, но меняем по желанию).

вызов с путем мониторинга в качестве единственного аргумента (например, ./pics2v4l2 /tmp/pics)

#!/bin/sh

DIR=$1
DEVICE=/dev/video0

inotifywait -m "${DIR}" \
| awk '$2== "CLOSE_WRITE,CLOSE" {print $1"/"$3; fflush()}' \
| while read f; do
 gst-launch-0.10 uridecodebin uri="file://${f}" \
 ! ffmpegcolorspace \
 ! videoscale \
 ! imagefreeze \
 ! identity error-after=2 \
 ! v4l2sink show-preroll-frame=false device=${DEVICE}
done

Скрипт для gst-launch-1.0

      
DIR=$1
DEVICE=/dev/video0

inotifywait -m "${DIR}" \
| awk '$2== "CLOSE_WRITE,CLOSE" {print $1"/"$3; fflush()}' \
| while read f; do
 gst-launch-1.0 uridecodebin uri="file://${f}" \
 ! videoconvert \
 ! videoscale \
 ! imagefreeze \
 ! identity error-after=2 \
 ! v4l2sink show-preroll-frame=false device=${DEVICE}
done

Выполнить с помощью

      sh <FILE_NAME>.sh <DIRECTORY_PATH>
Другие вопросы по тегам