在CentOS操作系统上搭建流媒体服务器是许多企业和个人开发者的常见需求,尤其需要处理视频、音频等大流量媒体内容的分发时,CentOS凭借其稳定性、安全性和开源特性,成为构建流媒体服务器的理想选择,以下将详细介绍在CentOS上搭建流媒体服务器的步骤、关键技术及注意事项。

环境准备与基础配置
在开始搭建流媒体服务器前,需确保CentOS系统满足基本要求,推荐使用CentOS 7或更高版本,内核版本建议在3.10以上以支持高性能网络处理,首先更新系统并安装必要依赖:
sudo yum update -y sudo yum install -y epel-release wget vim git
配置防火墙和SELinux,确保流媒体服务端口(如RTMP的1935端口、HLS的80/443端口)可访问:
sudo firewall-cmd --permanent --add-port=1935/tcp sudo firewall-cmd --permanent --add-port=80/tcp sudo firewall-cmd --permanent --add-port=443/tcp sudo firewall-cmd --reload
若使用SELinux,需临时关闭或配置策略(生产环境建议精细配置策略而非直接关闭):
sudo setenforce 0 # 临时关闭,重启后恢复
选择流媒体服务器软件
流媒体服务器软件选择需考虑协议支持、性能、扩展性等因素,常见方案包括:

| 软件名称 | 支持协议 | 特点 | 适用场景 |
|---|---|---|---|
| Nginx-RTMP | RTMP, HLS, DASH | 基于Nginx,模块化设计,配置简单 | 中小型直播点播服务,低延迟需求 |
| SRS (Simple RTMP Server) | RTMP, HLS, WebRTC, FLV | 高性能,支持集群与负载均衡,功能丰富 | 大型直播平台,高并发场景 |
| Wowza | RTMP, HLS, MPEG-DASH, Smooth Streaming | 商业软件,功能全面,提供技术支持 | 企业级应用,预算充足场景 |
对于中小型需求,推荐使用Nginx-RTMP模块,其开源且与Nginx生态无缝集成,部署便捷。
以Nginx-RTMP为例搭建流媒体服务器
安装Nginx与RTMP模块
首先安装Nginx及依赖,并添加RTMP模块,若已安装Nginx,需先卸载原版本重新编译:
sudo yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel wget http://nginx.org/download/nginx-1.22.0.tar.gz tar -zxvf nginx-1.22.0.tar.gz cd nginx-1.22.0 git clone https://github.com/arut/nginx-rtmp-module.git ./configure --add-module=nginx-rtmp-module --with-http_ssl_module --with-stream make && sudo make install
配置RTMP与HTTP服务
编辑Nginx配置文件(通常为/usr/local/nginx/conf/nginx.conf),添加RTMP服务器配置:
rtmp {
server {
listen 1935;
application live {
live on;
record off;
hls on;
hls_path /usr/local/nginx/html/hls;
hls_fragment 3s;
}
}
}
http {
server {
listen 80;
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /usr/local/nginx/html;
add_header Cache-Control no-cache;
}
}
}
rtmp块定义RTMP服务,监听1935端口,live应用用于直播推流;http块提供HLS(HTTP Live Streaming)协议支持,将转码后的m3u8和ts文件通过HTTP分发。
启动Nginx并测试
启动Nginx并检查进程:

sudo /usr/local/nginx/sbin/nginx sudo ps aux | grep nginx
使用OBS Studio等推流工具,设置服务器为rtmp://your_server_ip:1935/live,流密钥任意(如test),在VLC或网页中播放HLS流:http://your_server_ip/hls/test.m3u8。
性能优化与扩展
转码与码率适配
若需支持多终端,可集成FFmpeg进行实时转码,在Nginx配置中添加转码指令:
exec ffmpeg -i rtmp://localhost/live/$name -c:v libx264 -b:v 1500k -c:a aac -b:a 128k -f flv rtmp://localhost/live_hls/$name;
通过FFmpeg将原始流转码为不同码率,实现自适应码率(ABR)播放。
负载均衡与集群
对于高并发场景,可通过Nginx反向代理实现多台流媒体服务器的负载均衡:
upstream rtmp_cluster {
server 192.168.1.10:1935;
server 192.168.1.11:1935;
}
server {
listen 1935;
application live {
live on;
proxy_pass rtmp_cluster;
}
}
存储与分发优化
- 本地存储:HLS文件存储使用高性能磁盘(如SSD),并定期清理过期文件;
- CDN分发:将HLS内容同步至CDN节点,降低源站压力,提升用户访问速度。
安全与监控
安全加固
- 修改默认端口(如RTMP端口改为非1935);
- 使用防火墙限制推流IP,仅允许授权设备接入;
- 启用HTTPS(通过Nginx配置SSL证书),防止HLS内容被非法盗用。
日志与监控
- Nginx日志默认记录访问与错误信息,可通过
access.log和error.log排查问题; - 使用Prometheus+Grafana监控服务器CPU、内存及网络流量,设置告警阈值。
相关问答FAQs
Q1: 如何解决HLS播放延迟高的问题?
A: HLS默认延迟较高(6-10秒),可通过调整hls_fragment(如1s)和hls_time(如2s)减小切片时长,但需注意切片过小可能增加服务器负载,可使用低延迟HLS(LL-HLS)协议,通过hls_flags选项启用:hls_flags delete_segments;。
Q2: 流媒体服务器如何支持移动端播放?
A: 移动端建议使用HLS(iOS原生支持)或MPEG-DASH(Android支持),通过FFmpeg将RTMP流转码为HLS和DASH格式,Nginx配置中同时提供两种协议的分发路径,可集成视频播放器(如Video.js、DPlayer)实现跨平台兼容,并支持自动切换码率。
