在开始前,请先明确你的使用场景:

场景 A:本地摄像头 + 云主机(监控/直播)
典型应用:家里或办公室的USB摄像头,需要将画面推送到云端的服务器进行存储、分析或通过公网查看。
场景 B:云主机直接“接”摄像头(硬件直通)
典型应用:云主机本身有物理USB口,直接插上了摄像头(常见于物理云服务器或高性能工作站,普通云主机不支持)。
场景 C:云主机作为中转/处理中心(摄像头为网络摄像头)

典型应用:IP摄像头(RTSP/ONVIF协议)通过局域网/公网直接推流到云主机。
下面我将针对最常见的场景 A(本地摄像头 + 云主机) 和场景 C(网络摄像头接云主机) 给出详细设置指南。
场景 A:本地摄像头 + 云主机(推流模式)【最常用】
这是个人和小团队最常用的方式,你需要一个本地设备(如树莓派、旧电脑、NUC)连接摄像头,然后将视频流推送到云主机。
所需硬件:

本地主机:树莓派、Windows/Linux电脑、或带USB口的NAS。
云主机:阿里云、腾讯云、华为云等ECS服务器(建议带宽1Mbps以上,用于观看)。
摄像头:USB摄像头或树莓派CSI摄像头。
设置步骤:
1、连接并测试摄像头:
Linux:lsusb 查看设备,v4l2-ctl --list-devices 确认/dev/video0 存在。
Windows:插上后,在“设备管理器”中查看“摄像头”或“图像设备”是否正常。
2、安装FFmpeg(核心工具):
Ubuntu/Debian:sudo apt install ffmpeg
Windows:下载 [FFmpeg](https://ffmpeg.org/download.html) 并配置环境变量。
3、测试本地推流(先确保能本地预览):
ffplay /dev/video0 (Linux) 或ffmpeg -list_devices true -f dshow -i dummy (Windows 查看设备名)
4、推流到云主机(使用RTMP协议):
- 登录你的云主机,启动一个RTMP服务器(见下文)。
- 在本地主机执行:
# Linux (USB摄像头)
ffmpeg -f v4l2 -i /dev/video0 -c:v libx264 -preset ultrafast -tune zerolatency -f flv rtmp://你的云主机公网IP:1935/live/stream
# Windows (USB摄像头, 假设设备名为USB Video Device)
ffmpeg -f dshow -i video="USB Video Device" -c:v libx264 -preset ultrafast -tune zerolatency -f flv rtmp://你的云主机公网IP:1935/live/stream参数解释:-c:v libx264 使用H.264编码;-preset ultrafast 降低CPU负载;-tune zerolatency 降低延迟;rtmp://... 推流地址。
1、配置安全组:在云主机控制台,开放1935端口(RTMP默认端口)或你自定义的端口。
2、安装Nginx + RTMP模块:
一条命令安装(CentOS/Ubuntu):
# 使用一键脚本或编译安装,推荐使用大佬编译的包
# 例如使用 Docker 快速部署:
docker run -d -p 1935:1935 -p 8080:80 --name nginx-rtmp tiangolo/nginx-rtmp - 或手动安装nginx 和nginx-module-rtmp。
3、配置Nginx:
- 在/etc/nginx/nginx.conf 中添加如下rtmp 块:
rtmp {
server {
listen 1935; # RTMP监听端口
chunk_size 4096;
application live { # 应用名
live on;
record off;
# 允许客户端拉流观看(可选)
allow play all;
}
}
}4、启动并测试:
sudo nginx -t 测试配置。
sudo systemctl restart nginx 重启。
5、如何观看:
方法一(RTMP直接播放):在VLC播放器中打开rtmp://你的云主机公网IP:1935/live/stream。
方法二(HTTP-FLV/WebRTC):配置Nginx将RTMP转为HTTP流(需额外配置),或使用第三方平台(如阿里云视频直播)进行转码分发。
这种情况非常少见,因为绝大多数云主机是虚拟机(VM),没有物理USB接口,只有裸金属服务器或被授权的GPU云主机才支持。
前提:你购买的云主机支持USB直通 或PCIe直通。
操作(以VMware vSphere或KVM为例):
1. 在云主机管理后台,找到“附加设备”或“直通设备”。
2. 将物理USB摄像头直通给该云主机。
3. 启动云主机,安装摄像头驱动(通常是标准UVC驱动,免驱)。
验证:登录系统后,lsusb 或v4l2-ctl --list-devices 就能看到摄像头。
后续:直接在云主机上运行监控软件(如motion,ZoneMinder 或视频会议软件)即可。
场景 C:网络摄像头(IP Cam)直接推流到云主机
如果你的摄像头本身就是一个网络设备(如海康、大华、萤石),它可以直接通过RTSP协议将视频流发送给云主机。
设置步骤:
1、获取摄像头RTSP地址:
- 一般在设备说明书或厂商APP中可以找到,格式如:
rtsp://admin:password@192.168.1.100:554/h264/ch1/main/av_stream
2、在云主机上接收/转存:
- 使用ffmpeg 在云端抓取并保存或转推:
# 在云主机上执行,将摄像头的RTSP流转为RTMP推到Nginx
ffmpeg -rtsp_transport tcp -i "rtsp://admin:password@摄像头内网IP:554/xxx" -c:v copy -f flv rtmp://云主机内网IP:1935/live/stream注意:如果摄像头在局域网,云主机无法直接访问,你需要:
- 将摄像头和云主机放在同一个VPC内(如阿里云专有网络)。
- 或使用内网穿透工具(如FRP、Ngrok)将摄像头端口暴露到公网。(强烈不推荐,有安全风险)
3、或者使用云服务商的产品:
- 阿里云、腾讯云等都有视频直播或物联网视频服务,将摄像头的RTSP地址填入云端配置,由云服务商负责拉流、分发,更加稳定专业。
| 问题 | 可能原因与解决 |
| 云主机无法访问本地摄像头 | 场景A的正常情况,云主机没有USB接口,需要通过本地推流解决。 |
| 推流卡顿或断流 | 1. 本地网络上行带宽不足(建议至少2Mbps)。 2. 云主机带宽不足(建议1Mbps以上)。 3. 编码参数过重(用 -preset ultrafast 和-crf 23 平衡)。 |
| 端口不通 | 检查云主机安全组/防火墙是否开放了1935、8080端口。 |
| RTMP推流权限 | 确保RTMPapplication 配置中没有恶意限制allow/deny。 |
| 摄像头画面黑屏/无设备 | 1. 驱动问题(Linux下需v4l2 驱动)。2. 权限问题( chmod 777 /dev/video0 或加入video 组)。3. 被其他程序占用(用 fuser /dev/video0 查看)。 |
1、最省心:购买网络摄像头(IP Cam) + 使用云厂商的视频直播服务(直接填RTSP地址,无需自己搭建服务器)。
2、最灵活:本地树莓派 + USB摄像头,用FFmpeg推流到自己搭建的Nginx-RTMP云主机。
3、最不可能:普通云主机插物理摄像头。
如果你能补充更具体的需求(用于什么系统?摄像头是USB还是网络?需要实时看还是录制?),我可以进一步帮你优化方案!
文章摘自:https://idc.huochengrm.cn/zj/27735.html
评论
黄彦慧
回复云主机设置摄像头需先安装摄像头驱动,配置网络,确保摄像头可被云主机识别,再通过视频软件或网络摄像头软件进行连接和设置。