将 IP 摄像机用作虚拟摄像机

Min*_*inz 19 webcam ffmpeg ip-camera

我想在 webrtc 中使用 IP 摄像头。但是 webrtc 似乎只支持网络摄像头。所以我尝试将 IP 摄像机的流转换为虚拟网络摄像头。

我找到了IP Camera Adapter 之类的软件,但它们不能很好地工作(每秒 2-3 帧,延迟 2 秒),而且它们只能在 Windows 上工作,我更喜欢使用 Linux(如果可能的话)。

我尝试 ffmpeg/avconv:-首先,我用v4l2loopback创建了一个虚拟设备(命令是:)sudo modprobe v4l2loopback。检测到虚拟设备,可以使用如下命令提供视频 (.avi): ffmpeg -re -i testsrc.avi -f v4l2 /dev/video1

- 来自 IP 摄像机的流可rtsp://IP/play2.sdp用于:Dlink DCS-5222L 摄像机。这个流可以被 ffmpeg 捕获。

我的问题是在这两个步骤之间建立链接(接收 rstp 流并将其写入虚拟网络摄像头)。我试过了,ffmpeg -re -i rtsp://192.168.1.16/play2.sdp -f video4linux2 -input_format mjpeg -i /dev/video0但 v4l2 有错误(找不到 v4l2)。

有没有人知道如何将流从 IP 摄像机转换为虚拟摄像机?

小智 7

FFMpeg 可以从您的网络摄像机接收视频并将其转发到虚拟摄像机设备。为此,您需要首先指定 IP 摄像机的所有参数,我猜如下:

-f video4linux2 -input_format mjpeg -i rtsp://192.168.1.16/play2.sdp
Run Code Online (Sandbox Code Playgroud)

然后是您在示例中使用的所有输出参数:

-f v4l2 /dev/video1
Run Code Online (Sandbox Code Playgroud)

所以试试这个命令:

ffmpeg -f video4linux2 -input_format mjpeg -i rtsp://192.168.1.16/play2.sdp -f v4l2 /dev/video1
Run Code Online (Sandbox Code Playgroud)


小智 7

实际上,您在第一次尝试时就非常接近了。输入格式在-i参数之前指定,如下所示:-f mjpeg -i rtsp://192.168.1.16/play2.sdp,您可能必须指定像素格式,例如yuv420p使转换成为v4l2可能 ( -pix_fmt yuv420p)。这给我们留下了这样的事情:

$ ffmpeg -f mjpeg -i rtsp://192.168.1.16/play2.sdp -pix_fmt yuv420p -f v4l2 /dev/video0
Run Code Online (Sandbox Code Playgroud)

您可以v4l2通过运行来检查您的 ffmpeg 安装是否支持

$ ffmpeg -formats 2>/dev/null | grep v4l2
Run Code Online (Sandbox Code Playgroud)

如果这返回非零退出代码(并且不打印结果),那么您必须自己编译 ffmpeg,或者找到v4l2启用的版本。更多关于ffmpeg 站点的信息

最后,在 StackOverflow 上有一个非常相关的问题,但它没有回答您的具体问题(关于使用 IP 摄像头作为网络摄像头)。