我有两台电脑,一台桌面在我的办公室(有一个摄像头附上)和一个笔记本电脑网络上的其他地方。
通常我通过运行网络摄像头查看我的办公室
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 年仍然有效)。
与ffmpeg
和mplayer
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。
与ffmpeg
和mpv
ssh USERNAME@REMOTEHOST ffmpeg -an -f video4linux2 -s 640x480 -i /dev/video0 -r 10 -b:v 500k -f matroska - | mpv --demuxer=mkv /dev/stdin
与ffmpeg
和ffplay
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
因此:
- 尝试不使用命名管道
- 检查带宽
另外 - 如何在不是工作(显示黑屏、抱怨未知设备等)?
答案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 来尝试一些操作。