如何远程HTTP流传输无桌面Ubuntu Server上的USB摄像头画面
嘿,看你已经搞定了VPN SSH和摄像头的基础验证,那咱们直接用Ubuntu Server里现成的开源工具就能搞定HTTP远程流,完全不用掏一分钱买付费服务。给你俩靠谱的方案,都是无桌面环境下能直接跑的:
方案一:用VLC(你已经熟悉的工具)
首先确保VLC已经装了,没装的话SSH进去跑:sudo apt update && sudo apt install vlc -y
然后直接用这条命令启动HTTP流(参数都给你调好了,适合浏览器访问):
cvlc -I dummy v4l2:///dev/video0 \ --sout '#transcode{vcodec=h264,scale=1,width=640,height=480,acodec=none}:http{mux=ffmpeg{mux=flv},dst=:8080/stream}' \ --no-sout-audio
给你拆解下关键参数:
-I dummy:强制无界面模式,适合服务器环境v4l2:///dev/video0:指定你的USB摄像头设备(如果有多个摄像头可能是video1,自己调整)transcode{vcodec=h264,...}:把摄像头的原始视频转成浏览器支持的H.264编码,同时关闭音频(你不需要)http{mux=flv,...}:用FLV封装流,通过8080端口对外提供,路径是/stream
如果想让SSH断开后流还能继续跑,就用nohup后台启动:nohup cvlc -I dummy v4l2:///dev/video0 --sout '#transcode{vcodec=h264,scale=1,width=640,height=480,acodec=none}:http{mux=ffmpeg{mux=flv},dst=:8080/stream}' --no-sout-audio > /dev/null 2>&1 &
然后你在VPN连接状态下,直接在浏览器里输入 http://192.168.0.10:8080/stream 就能看到画面了。
方案二:用FFmpeg(更轻量,低延迟)
如果觉得VLC有点重,试试FFmpeg,同样是开源免费的:
先安装FFmpeg:sudo apt update && sudo apt install ffmpeg -y
启动HTTP流的命令(用HLS格式,几乎所有浏览器都支持):
ffmpeg -f v4l2 -i /dev/video0 \ -vcodec libx264 -preset ultrafast -tune zerolatency \ -f hls -hls_time 2 -hls_list_size 5 -hls_flags delete_segments \ http://0.0.0.0:8080/stream.m3u8
参数解释:
-f v4l2 -i /dev/video0:指定输入为USB摄像头设备libx264 -preset ultrafast -tune zerolatency:用最快的编码速度和低延迟模式,适合实时流-f hls ...:生成HLS切片流,每个切片2秒,只保留最近5个切片(节省磁盘空间)http://0.0.0.0:8080/stream.m3u8:在8080端口对外提供播放列表
同样,后台运行的话加nohup:nohup ffmpeg -f v4l2 -i /dev/video0 -vcodec libx264 -preset ultrafast -tune zerolatency -f hls -hls_time 2 -hls_list_size 5 -hls_flags delete_segments http://0.0.0.0:8080/stream.m3u8 > /dev/null 2>&1 &
浏览器访问的话输入 http://192.168.0.10:8080/stream.m3u8 就行,大部分现代浏览器直接支持HLS,要是不行的话装个HLS插件就行。
注意事项
- 权限问题:如果运行命令时提示无法访问
/dev/video0,把你的用户加入video组:sudo usermod -aG video your_username,然后重新登录SSH生效 - 端口冲突:如果8080端口被占用了,把命令里的8080改成其他闲置端口(比如8081)
- 带宽:如果VPN网速慢,可以把命令里的
width=640,height=480改成更小的分辨率(比如320x240)来降低带宽消耗
备注:内容来源于stack exchange,提问作者scrollout

