我可以通过SSH传递/ dev / video吗


26

我有两台计算机,办公室中的台式机(带有网络摄像头)和网络上其他位置的笔记本电脑

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

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

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

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

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

mplayer tv://device=/dev/video1

Answers:


14

就像是:

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. 检查带宽

此外-如何做工作(显示黑屏,抱怨未知设备等)?


我认为mplayer出了点问题。如果运行,dd if=/dev/video0 | mplayer tv://device=/dev/stdin它将告诉我资源正忙。否则,即使我跑步也能正常工作(我看视频)mplayer tv://device=/dev/null
Stefan

1
这个答案很有误导性。的“正确”调用mplayer将是mplayer tv:// -tv device=/dev/stdin或类似的,但这是行不通的(字符设备比dd可以正常处理的功能更特殊)。运行时,mplayer tv://device=/dev/stdin它没有看到设备规格/dev/video0,而是直接回退,给人一种“工作”的错觉。但是,当网络摄像头和mplayer进程被网络分开时,它将根本无法工作。
Daniel Wagner

是的,这看起来像在正常工作,因为您要通过SSH方式连接到本地主机,但实际上,它失败了,并且mplayer下降到了本地主机上的/ dev / video0。如果您尝试使用以下命令将SSH SSH到另一台计算机(即不是localhost),则会看到本地网络摄像头,而不是远程网络摄像头。
杰森·安特曼

您在本地主机中尝试过,但是ssh localhost dd if=/dev/video0 | mplayer tv://device=/dev/stdin在使用两台不同的计算机时如何运行命令?
Francesco Boi

mplayer tv://device=/dev/stdin在OSX上有什么替代方法?
Francesco Boi

14

如果带宽较低,建议压缩视频流:

ssh USER@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 kb / s的比特率

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


4

VideoLAN的项目存在在很大程度上你想要做什么而已。

我没有使用过它的流功能,但在单台机器上使用它对我来说是坚如磐石。


因此,请您为这种情况做详细说明...?
MikeW

1

接受的答案对我不起作用。dd根本不会读。nc如果您不能腾出另一个端口是很不好的(无论如何我还是没有让它正常工作)。cat也不适合我

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

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

这具有被编码的​​好处,因此可以节省带宽。任何论坛/网站上的其他任何东西都无法在debian机器上为我工作。


tee结合使用,您可以同时观看和记录:

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


0

我不知道是否有任何原因不能执行此操作,但是我发现您的实现存在一个问题,即远程系统将在其系统上查找/ dev / video1,但由于找不到该原因,您是在本地系统上创建的。

我要做的是以下事情

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

然后通过告诉它去本地系统的TCP端口12345尝试尝试。


我试图澄清我的问题。请查看更新的版本
Stefan 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.