通过 SSH 或 tcptunnel 传输视频设备?

通过 SSH 或 tcptunnel 传输视频设备?

我想将一个模拟摄像机连接到一台旧的 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 隧道传输原始数据:

http://www.vakuumverpackt.de/tcptunnel/

相关内容