我想将一个模拟摄像机连接到一台旧的 Linux 计算机上,并将 /dev/video0 直接传输到另一台计算机,在那里我可以再次将其用作设备(例如,/dev/video0 应该转到 /dev/remote0)
(这样做的原因是计算机没有足够的能力对视频进行编码)
这可能吗?我见过有人可以通过 ssh 将数据直接从设备传输到 mplayer,但我需要某种 Zoneminder 参考点。
编辑:正如 Phil Hannent 所说:SSH 可能也会占用过多的硬件资源,因为它必须加密发送的数据。那么,通过 tcptunnel 这样的程序也可以实现这一点吗?
编辑2:在Unix&Linux stackexchange网站上,我发现了一个使用它通过ssh进行管道传输的问题:
ssh localhost dd if=/dev/video0 | mplayer tv://device=/dev/stdin
可以通过tcptunnel完成吗?
答案1
您可以使用网猫。
cat /dev/video0 | nc -l 1234
这将在一个主机上打开一个服务器,监听端口并向任何连接的客户端1234
发送未压缩和未加密的数据/dev/video0
。您可以通过调用以下命令在其他主机上接收数据:
nc videohost 1234 | mplayer tv://device=/dev/stdin
videohost
主机从哪里发送数据/dev/video0
。
答案2
netcat 解决方案对我不起作用。它要么显示管道错误,要么cat
报告Invalid input
。
这是唯一对我有用的解决方案:
ssh user@host "ffmpeg -r 14 -s 640x480 -f video4linux2 -i /dev/video0 -f matroska -" | mplayer - -idle
这样做的好处是它被编码了,因此您可以节省带宽。
结合球座并且可以同时观看和录制:
ssh user@host "ffmpeg -r 14 -s 640x480 -f video4linux2 -i /dev/video0 -f matroska -" | tee $(date +%Y-%m-%d_%H-%M-%S)_recording.mkv | mplayer - -idle
这将打开 mplayer 进行实时流式传输,同时将其保存到包含当前日期时间的文件中(示例文件名:)2018-11-22_01-22-10_recording.mkv
。
替换-f matroska
为-f avi
使用压缩程度更高的 avi 格式。这将节省源上的大量 CPU 资源和大量带宽,从而获得更无延迟的体验。
答案3
我强烈建议你不要这样做。我最近尝试通过 ssh:// 文件访问流式传输 avi 视频,但很痛苦。你必须记住,在此过程中视频会被加密,然后解密。
如果您的计算机无法处理压缩流,那么它肯定也无法处理加密流。
实际上,您只想通过 TCP 隧道传输原始数据: