3、环境准备:Linux服务器选型、网络带宽评估、防火墙与端口规划
说实话,很多新手做RTSP推流,一上来就急着写代码、调参数。结果呢?服务器选错了,带宽不够用,防火墙把端口全堵死了——折腾半天,画面就是出不来。
我刚开始做流媒体那会儿也犯过这毛病。后来被坑了几次,才明白一个道理:环境准备做扎实了,后面能省80%的排查时间。
这一章,咱们就把这三件事一次性捋清楚。
本章核心三问:
- 用Ubuntu还是CentOS?哪个更适合推流服务器?
- 一路1080p推流到底吃掉多少带宽?
- 防火墙怎么配才能既安全又不挡路?
3.1 Linux服务器选型:Ubuntu还是CentOS?
这个问题,几乎每个做流媒体的同行都纠结过。我个人的建议很简单:如果你不是必须用CentOS,选Ubuntu。
为什么?我跟你讲讲我的经历。
3.1.1 Ubuntu 22.04 LTS —— 我推荐的首选
Ubuntu的软件源更新快,FFmpeg、GStreamer这些流媒体工具,apt install一行命令就装好了。我在项目中搭建RTSP推流服务器,90%的情况都用Ubuntu。
举个例子,装FFmpeg:
# Ubuntu 22.04
sudo apt update
sudo apt install ffmpeg -y
ffmpeg -version
搞定。前后不到一分钟。
我的习惯:Ubuntu 22.04 LTS 是目前最稳的版本。20.04也行,但22.04对H.265/HEVC的硬件编码支持更好。如果你做4K推流,建议直接上22.04。
3.1.2 CentOS Stream 9 —— 什么时候用它?
CentOS 7已经停服了,现在只有CentOS Stream。说实话,我个人不太推荐Stream做生产环境——它是个滚动发行版,稳定性不如Ubuntu LTS。
但有一种情况我会选CentOS:客户要求必须用RHEL生态。比如一些国企、金融客户,他们内部规范就是Red Hat系,那CentOS Stream就是最接近的选择。
装FFmpeg在CentOS上就麻烦一些:
# CentOS Stream 9
sudo dnf install epel-release -y
sudo dnf config-manager --set-enabled crb
sudo dnf install ffmpeg -y
看到了吧?多两步。而且EPEL仓库里的FFmpeg版本通常比Ubuntu源里老一些。
| 对比维度 | Ubuntu 22.04 LTS | CentOS Stream 9 |
|---|---|---|
| 软件包新鲜度 | ★★★★★ 非常新 | ★★★☆☆ 偏保守 |
| FFmpeg安装 | apt install 一行搞定 | 需先配EPEL,步骤多 |
| 稳定性 | ★★★★★ LTS 5年支持 | ★★★☆☆ 滚动更新有风险 |
| 硬件编码驱动 | NVIDIA驱动、Intel QSV支持好 | 需手动编译,较折腾 |
| 社区资源 | 极其丰富 | 偏少,尤其流媒体方向 |
避坑指南:我曾经在一个项目里用了CentOS 7,结果客户要求升级到CentOS Stream,结果FFmpeg从4.2跳到5.0,API变了,推流脚本全崩。从那以后,我新项目一律用Ubuntu LTS。
3.2 网络带宽评估:你的服务器扛得住吗?
带宽评估这件事,说白了就是算一笔账:一路流吃多少,并发多少路,总共需要多少出口带宽。
我见过最离谱的情况:有人用10Mbps的服务器推4K流,结果画面卡成PPT,还以为是代码问题。其实带宽早就爆了。
3.2.1 码率与带宽的关系
RTSP推流用的是实时传输协议,带宽消耗基本等于视频码率+音频码率+少量协议开销。我一般按1.1倍系数算总带宽。
举个例子:
- 视频:1080p @ 30fps,H.264编码,码率设为4 Mbps
- 音频:AAC 128 Kbps
- 总码率 ≈ 4 + 0.128 = 4.128 Mbps
- 实际带宽需求 ≈ 4.128 × 1.1 ≈ 4.54 Mbps
不同分辨率的参考带宽:
| 分辨率 | 推荐视频码率 | 音频码率 | 单路总带宽 |
|---|---|---|---|
| 640×480 (SD) | 1.5 Mbps | 96 Kbps | ≈ 1.75 Mbps |
| 1280×720 (HD) | 3 Mbps | 128 Kbps | ≈ 3.44 Mbps |
| 1920×1080 (FHD) | 4-6 Mbps | 128 Kbps | ≈ 4.5-6.7 Mbps |
| 3840×2160 (4K) | 15-25 Mbps | 192 Kbps | ≈ 16.7-27.7 Mbps |
3.2.2 并发场景下的带宽计算
假设你有10路1080p推流,每路5 Mbps:
总带宽 = 10 × 5 Mbps × 1.1 = 55 Mbps
嗯,这里要注意:这是上行带宽。云服务器通常上行带宽比下行小很多。我建议你买服务器时,直接选按量计费带宽,别选固定带宽——万一并发突增,固定带宽直接卡死。
我的经验公式:
服务器带宽 = 单路码率 × 并发路数 × 1.2(冗余系数)
冗余系数留20%,应对码率波动和突发流量。
3.2.3 网络质量评估工具
服务器到手后,别急着配推流。先测一下网络质量:
# 测带宽(安装speedtest-cli)
sudo apt install speedtest-cli -y
speedtest-cli
# 测延迟和丢包
ping -c 10 8.8.8.8
# 测指定端口连通性(比如RTSP默认554)
nc -zv your-server-ip 554
延迟超过50ms或者丢包率超过0.5%,推流画面就会出现卡顿。我曾经在海外节点上遇到过150ms延迟,推RTSP基本不可用,后来换了机房才解决。
3.3 防火墙与端口规划:别让安全策略堵了路
防火墙配置,是环境准备里最容易翻车的地方。我见过太多人:配好了推流服务,结果防火墙没放行端口,客户端死活连不上。
RTSP推流涉及的端口其实不多,但每个都有讲究。
3.3.1 RTSP相关端口清单
| 端口 | 协议 | 用途 | 说明 |
|---|---|---|---|
| 554 | TCP | RTSP控制信令 | 默认端口,必开 |
| 8554 | TCP | RTSP备用端口 | 554被占用时使用 |
| 1935 | TCP | RTMP推流(可选) | 如果同时做RTMP转RTSP |
| 10000-20000 | UDP | RTP音视频数据传输 | RTSP over UDP时使用 |
| 22 | TCP | SSH远程管理 | 必开,但建议改端口 |
注意:UDP端口范围(10000-20000)是很多人的盲区。RTSP默认用TCP传信令,但音视频数据走UDP。如果你只开了TCP 554,UDP端口没放行,客户端能连接但收不到画面。我曾经排查这个问题花了整整一下午。
3.3.2 Ubuntu防火墙配置(UFW)
Ubuntu默认用UFW,配置起来很简单:
# 启用UFW
sudo ufw enable
# 放行SSH(先放行,防止自己被踢出去)
sudo ufw allow 22/tcp
# 放行RTSP端口
sudo ufw allow 554/tcp
sudo ufw allow 8554/tcp
# 放行RTP UDP端口范围
sudo ufw allow 10000:20000/udp
# 查看规则
sudo ufw status numbered
3.3.3 CentOS防火墙配置(firewalld)
CentOS用firewalld,命令稍有不同:
# 放行RTSP
sudo firewall-cmd --permanent --add-port=554/tcp
sudo firewall-cmd --permanent --add-port=8554/tcp
# 放行UDP范围
sudo firewall-cmd --permanent --add-port=10000-20000/udp
# 重载配置
sudo firewall-cmd --reload
# 查看规则
sudo firewall-cmd --list-all
3.3.4 安全建议
- 改SSH端口:把22改成高位端口(比如2222),减少被暴力破解的风险。
- 限制来源IP:如果推流客户端IP固定,直接在防火墙里加来源限制。
- 不要开太多端口:只开需要的,其他全关。我见过有人把1-65535全放开了,那跟裸奔没区别。
我的习惯:配完防火墙后,我会用nmap从外部扫一遍服务器,确认只有预期端口是开放的。
# 从另一台机器扫描
nmap -sS -p 1-65535 your-server-ip
看到只有554、8554、22(或改过的端口)开放,才算配置完成。
3.4 本章小结
环境准备这件事,看起来琐碎,但每一步都关系到后续推流的稳定性。
- 服务器选型:我推荐Ubuntu 22.04 LTS,省心、工具全、社区资源多。
- 带宽评估:先算单路码率,再乘并发路数和冗余系数,别凭感觉买带宽。
- 防火墙配置:TCP 554 + UDP 10000-20000是核心,别忘了UDP端口。
把这些基础打牢了,后面配置推流服务、调优参数,才能顺风顺水。