在开始部署之前,需要准备一台运行Ubuntu 20.04 LTS或22.04 LTS的服务器,建议配置为4核CPU、8GB内存、100GB硬盘。你需要准备一台支持RTSP协议的高清网络摄像头(IPC),以及一个已插入SIM卡的5G工业路由器或5G CPE,用于提供高带宽网络接入。
更新系统并安装必要的编译工具和依赖库。打开终端,执行以下命令:
```bash sudo apt update && sudo apt upgrade -y sudo apt install -y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev wget unzip git ```将5G CPE通过网线连接到服务器的以太网口(假设为eth0)。系统通常会自动通过DHCP获取IP。我们需要确保网络连接稳定,并配置防火墙允许后续的流媒体端口通过。
执行以下命令查看当前网络状态,确认已获取到公网或局域网IP:
```bash ip addr show eth0 ```接着,配置防火墙开放1935端口(RTMP服务)和8080端口(HTTP-FLV/HLS服务):
```bash sudo ufw allow 1935/tcp sudo ufw allow 8080/tcp sudo ufw enable ```为了实现低延迟的视频分发,我们将编译安装集成了RTMP模块的Nginx。首先下载Nginx源码和nginx-rtmp-module源码:
```bash cd /usr/local/src wget http://nginx.org/download/nginx-1.22.1.tar.gz tar -zxvf nginx-1.22.1.tar.gz git clone https://github.com/arut/nginx-rtmp-module.git ```进入Nginx目录进行编译,注意将module路径指向刚才下载的模块目录:
```bash cd nginx-1.22.1 ./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/nginx-rtmp-module --with-http_ssl_module make -j4 sudo make install ```这是核心配置步骤,直接决定了视频流能否正常推拉。打开Nginx配置文件:
```bash sudo vim /usr/local/nginx/conf/nginx.conf ```删除原有内容,完整复制并粘贴以下配置。该配置开启了RTMP推流、HLS切片以及HTTP访问权限:
```nginx worker_processes auto; events { worker_connections 1024; } rtmp { server { listen 1935; chunk_size 4096; application live { live on; record off; HLS配置,用于Web端播放 hls on; hls_path /usr/local/nginx/html/hls; hls_fragment 3; hls_playlist_length 10; 允许从任何IP推流 allow publish all; 允许从任何IP拉流 allow play all; } } } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 8080; server_name localhost; location / { root html; index index.html; } location /hls { types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } root html; add_header Cache-Control no-cache; add_header Access-Control-Allow-Origin ; } } } ```保存并退出后,创建HLS切片存储目录并启动Nginx:
```bash sudo mkdir -p /usr/local/nginx/html/hls sudo /usr/local/nginx/sbin/nginx ```安装FFmpeg工具,用于将摄像头的RTSP流转换并推送到Nginx-RTMP服务器:
```bash sudo apt install -y ffmpeg ```假设摄像头的RTSP地址为rtsp://admin:123456@192.168.1.10:554/stream1(请替换为实际地址),我们使用FFmpeg进行转码推流。为了适应5G网络的高吞吐,我们将码率设置为4Mbps,分辨率设为1080P。

执行以下命令开始推流:
```bash ffmpeg -rtsp_transport tcp -i rtsp://admin:123456@192.168.1.10:554/stream1 \ -vcodec libx264 -preset veryfast -b:v 4096k -maxrate 4096k -bufsize 8192k \ -acodec aac -b:a 128k -f flv rtmp://localhost/live/archive_room_01 ```参数详解:
archive_room_01为自定义流名称。为了在浏览器中直接查看监控画面,我们需要创建一个简单的HTML页面,利用hls.js库来播放Nginx生成的HLS流。
创建首页文件:
```bash sudo vim /usr/local/nginx/html/index.html ```输入以下完整代码:
```html为了防止服务器重启后服务停止,我们需要将FFmpeg推流和Nginx设置为系统服务。首先创建Systemd服务文件管理FFmpeg:
```bash sudo vim /etc/systemd/system/archive-stream.service ```写入以下内容:
```ini [Unit] Description=5G Archive Camera Stream Service After=network.target [Service] User=root ExecStart=/usr/bin/ffmpeg -rtsp_transport tcp -i rtsp://admin:123456@192.168.1.10:554/stream1 -vcodec libx264 -preset veryfast -b:v 4096k -maxrate 4096k -bufsize 8192k -acodec aac -b:a 128k -f flv rtmp://localhost/live/archive_room_01 Restart=always RestartSec=5 [Install] WantedBy=multi-user.target ```接着配置Nginx开机自启:
```bash sudo vim /etc/systemd/system/nginx-rtmp.service ```写入以下内容:
```ini [Unit] Description=Nginx RTMP Server After=network.target [Service] Type=forking ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit PrivateTmp=true [Install] WantedBy=multi-user.target ```重载Systemd并启用服务:
```bash sudo systemctl daemon-reload sudo systemctl enable archive-stream.service sudo systemctl enable nginx-rtmp.service sudo systemctl start archive-stream.service ```完成所有配置后,检查服务状态确保正常运行:
```bash sudo systemctl status archive-stream.service sudo systemctl status nginx-rtmp.service ```在浏览器地址栏输入服务器的IP地址和端口(例如:http://服务器IP:8080),即可看到档案室的实时监控画面。由于采用了5G网络传输和优化的FFmpeg参数,画面延迟通常可控制在1-2秒以内,满足档案实时监控的需求。