3、环境准备:Linux服务器选型、网络带宽评估、防火墙与端口规划

说实话,很多新手做RTSP推流,一上来就急着写代码、调参数。结果呢?服务器选错了,带宽不够用,防火墙把端口全堵死了——折腾半天,画面就是出不来。

我刚开始做流媒体那会儿也犯过这毛病。后来被坑了几次,才明白一个道理:环境准备做扎实了,后面能省80%的排查时间。

这一章,咱们就把这三件事一次性捋清楚。

本章核心三问:

  • 用Ubuntu还是CentOS?哪个更适合推流服务器?
  • 一路1080p推流到底吃掉多少带宽?
  • 防火墙怎么配才能既安全又不挡路?
RTSP推流环境准备 · 知识体系 环境准备 Linux服务器选型 网络带宽评估 防火墙与端口规划 Ubuntu 22.04 CentOS Stream 9 码率计算 并发冗余 端口放行 安全策略 💡 核心原则:先评估需求 → 再选型 → 最后配置网络与安全 三者环环相扣,缺一不可

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端口。

把这些基础打牢了,后面配置推流服务、调优参数,才能顺风顺水。