Программно отправлять изображения на 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>