1

我有一个生成 jpg 的程序。我想在生成这些图像时将它们发送到我的虚拟网络摄像头。我可以使用 gstreamer 创建一个虚拟网络摄像头v4l2loopback,并且一直在研究 gstreamer,但无法让它正常工作。

我已经尝试过使用 multifilesrc 的 gst-launch,但这似乎只在我已经生成图像时才有效。我还尝试将 gst-launch 设置为仅将一张图像发送到网络摄像头,然后在生成新图像时覆盖该图像。不幸的是,这会导致 gstreamer 崩溃。

有谁知道我怎么能做到这一点?我不必使用 gstreamer,但我希望在 Linux 中实现它,最好是在 Python 中。

4

2 回答 2

1

以下脚本将监视一个目录并将每个新添加的图像传递给 gstreamer,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
于 2013-11-06T16:46:07.277 回答
0

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>
于 2021-08-02T21:21:08.563 回答