我可以通过 ssh 传输 /dev/video 吗

我可以通过 ssh 传输 /dev/video 吗

我有两台电脑,一台桌面在我的办公室(有一个摄像头附上)和一个笔记本电脑网络上的其他地方。

通常我通过运行网络摄像头查看我的办公室

ssh Office -Y "mplayer tv://device=/dev/video0"

从我的笔记本电脑。我不喜欢 Xforwarding mplayer,那么为什么我不能通过/dev/video在笔记本电脑上运行它来隧道到我的电脑呢?

sudo mkfifo /dev/video1
ssh Office 'dd if=/dev/video' | sudo dd of=/dev/video1'

然后观看网络摄像头(在我的笔记本电脑

mplayer tv://device=/dev/video1

答案1

如果您的带宽较低,我建议对视频流进行压缩(2020 年仍然有效)。

ffmpegmplayer

ssh USERNAME@REMOTEHOST ffmpeg -an -f video4linux2 -s 640x480 -i /dev/video0 -r 10 -b:v 500k -f matroska - | mplayer - -idle -demuxer matroska

在哪里

  • -an关闭音频编码。如果您需要音频,请替换-an-f alsa -ac 1 -i hw:3(其中 hw:3 也可以是 hw:0 或 hw:1,...请参阅arecord -l您的设备)。如果您只想要音频(不需要视频),用这个
  • -s 640x480是视频的 x 和 y 维度大小
  • -r 10是您想要接收的帧速率(较低的帧速率可以在低比特率下提供更好的图像,但看起来更笨拙)
  • -b:v 500k比特率为 500 kbit/s

您需要在远程主机上安装 ffmpeg 并在本地计算机上安装 mplayer。

ffmpegmpv

ssh USERNAME@REMOTEHOST ffmpeg -an -f video4linux2 -s 640x480 -i /dev/video0 -r 10 -b:v 500k -f matroska - | mpv --demuxer=mkv /dev/stdin

ffmpegffplay

ssh USERNAME@REMOTEHOST ffmpeg -an -f video4linux2 -s 640x480 -i /dev/video0 -r 10 -b:v 500k -f matroska - | ffplay -f matroska /dev/stdin

答案2

就像是:

dd if=/dev/video0 | mplayer tv://device=/dev/stdin

在本地为我工作(SOA#1)。也是如此:

ssh localhost dd if=/dev/video0 | mplayer tv://device=/dev/stdin

mkfifo test
dd if=/dev/video0 of=test &
mplayer tv://device=test

因此:

  1. 尝试不使用命名管道
  2. 检查带宽

另外 - 如何在不是工作(显示黑屏、抱怨未知设备等)?

答案3

接受的答案对我不起作用。dd根本不会读它。nc如果你不能腾出另一个端口就很糟糕了(无论如何我也没有让它工作)。cat也不适合我。

最终对我有用的是在接收端:

ssh user@host "ffmpeg  -r 14 -s 640x480 -f video4linux2 -i /dev/video0 -f matroska -" | mplayer - -idle

这样做的好处是它被编码,因此您可以节省带宽。在 Debian 机器上,任何论坛/网站上的其他内容都无法为我工作。


结合球座您可以同时观看和录制:

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)。

答案4

我不知道是否有任何原因你不能这样做,但我在你的实现中看到的一个问题是远程系统将在其系统上查找 /dev/video1 ,但无法找到它,因为您在本地系统上创建了它。

我要做的是以下内容

nc -l 12345 | sudo tee /dev/video > /dev/null &
ssh Office

然后告诉它转到本地系统的 TCP 端口 12345 来尝试一些操作。

相关内容