这让我忙了一下午的大部分时间,我还没能让它工作,但我觉得我真的很接近。
我已经设置了openCV,它可以从网络摄像头获取视频。为了能够访问这个视频feed(使用openCV overlay),我想将openCV python脚本的输出管道化为一个VLC流。我成功地让这条流运行起来,并且可以连接到它。VLC调整到正确的宽高比和分辨率,以便获得一些正确的数据,但我得到的图像只是抖动
python opencv.py | cvlc --demux=rawvideo --rawvid-fps=30 --rawvid-width=320 --rawvid-height=240 --rawvid-chroma=RV24 - --sout "#transcode{vcodec=h264,vb=200,fps=30,width=320,height=240}:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=:8081/stream.flv}" &
脚本的输出是一个发送到stdout的恒定视频源,如下所示
from imutils.video import WebcamVideoStream
vs = WebcamVideoStream(src=0)
while True:
frame = vs.read()
sys.stdout.write(frame.tostring())
上面的例子是我正在使用的脚本的简化版本;也可以看到我正在使用imutils库;https://github.com/jrosebr1/imutils
如果有人能把我推向正确的方向,我将不胜感激。我的猜测是stdout.write(frame.tostring())不是vlc所期望的,但我自己还没有弄清楚。
这对我有效,尽管我正在发送到RTSP流,而不是使用imutils库:
然后在命令行中:
请注意,不需要将opencv BGR转换为RGB。
下面是我在Python 3下的工作
和命令行(我的摄像头有不同的分辨率,我只显示结果,但你没有问题)
当然,这需要从BGR到RGB的转换,因为前者在OpenCV中是默认的。
相关问题 更多 >
编程相关推荐