尝试使用来自 raspberry pi/picam 的流来模拟硬件相机?

尝试使用来自 raspberry pi/picam 的流来模拟硬件相机?

我有一台连接到 wifi 的 raspberry pi 和 pi cam v2。我试图通过 wifi 将摄像头信号传输到笔记本电脑,然后让该信号流看起来像是笔记本电脑上的硬件摄像头。我想这样做是为了将其放入需要硬件摄像头的其他软件中(无法重写此软件,只能绕过它)。

我在笔记本电脑上运行的是 ubuntu 18.04。根据我的研究,使用 ffmpeg 和 vfl2loopback 的某种组合应该非常有可能。我首先安装这个库来将摄像头传输到网络服务器:https://github.com/silvanmelchior/RPi_Cam_Web_Interface这有效,我可以在浏览器中访问摄像头流http://10.0.0.47/http为了简单起见,我没有设置用户名/密码。根据 nmap 输出,我认为摄像头端口是 80。

我现在正尝试重定向我的 ubuntu 笔记本电脑上的流。根据我的研究和实验,这个命令是我最接近的:

ffmpeg-re-ihttp://10.0.0.47/html-地图 0:v -f v4l2 /dev/video0

(或者用端口 80 代替 /html,不确定这是否重要):ffmpeg -re -ihttp://10.0.0.47:80-地图 0:v -f v4l2 dev/video0

一开始这似乎有效,但随后会产生以下错误:

http://10.0.0.47:80:处理输入时发现无效数据

从谷歌搜索来看,这可能是由于 rpi_cam_web 接口输出的流类型错误造成的,但我不确定这是否属实,如果属实,如何修复。我还调查了访问网络服务器的页面的 html 代码,我可以看到它正在发送一系列 jpg,这些 jpg 会随着文件名中的时间戳不断变化。所以也许这就是问题所在,但同样,我不确定。

有什么想法吗?非常感激您的帮助。

编辑:我尝试了另一种方法,似乎取得了一些进展,但仍然遇到问题:

(在 pi 上):raspivid -o - -t 0 -n -w 320 -h 240 -fps 30| cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8000/}' :demux=h264

-->这将启动一个流,我可以在 VLC 媒体播放器中成功查看

(然后在主机系统上):gst-launch-1.0 -v rtspsrc location=rtsp://10.0.0.47:8000/ ! v4l2sink device=/dev/video4

我尝试了各种设备,例如 /dev/video0、/dev/video1 等。它们都显示“/dev/videoX”不是输出设备,但 video4 除外,它一开始似乎可以正常工作,但随后出现错误:

错误:来自元素 /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc1:内部数据流错误。其他调试信息:gstbasesrc.c(3072):gst_base_src_loop (): /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc1:流式传输已停止,原因未链接 (-1) 执行在 0:00:00.082360368 后结束

知道那里可能出了什么问题吗?

再次感谢!

编辑2:

我可能让它与以下命令序列一起工作:

(在 pi 上):raspivid -o - -t 0 -n -w 320 -h 240 -fps 30| cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8000/}' :demux=h264

(在主机上):ffmpeg -f h264 -i tcp://10.0.0.47:8000/ -f v4l2 -pix_fmt yuv420p /dev/video0

这不会引发任何错误,但我不能 100% 确定它是否有效,因为我尚未能够在试图获取摄像头馈送的软件中加载流。我尝试使用这个网站工具进行测试:

https://test.webrtc.org/

该工具允许我选择“虚拟视频设备 0x0000”,我很确定就是这个,但它却告诉我“未检测到视频设备”,在测试中找不到任何摄像头,而且在随后的页面重新加载中,同一个虚拟视频设备不会显示为选项。所以我认为我传递流的方式有问题

答案1

此网站展示了如何将 RPi 流式传输到 OBS: https://www.instructables.com/Webcam-Over-WiFi-for-OBS/

然后您可以使用OBS虚拟摄像头来模拟硬件摄像头。

(我个人使用 OBS 虚拟相机,但没有将它与 RPi 一起使用。)

或者你可以尝试这个: https://www.tomshardware.com/uk/how-to/use-raspberry-pi-as-pc-webcam

相关内容