Linux 直播服务器搭建是一个涉及硬件选择、软件配置、网络优化和监控维护的系统工程,旨在通过开源技术实现稳定、高效的音视频流分发,以下从环境准备、核心软件安装、推流配置、负载均衡及安全加固等方面详细阐述搭建过程。

环境准备与硬件选择
搭建直播服务器前,需明确业务需求(如并发观众数、视频分辨率、帧率),合理配置硬件资源,推荐配置如下:
- CPU:8核以上,支持硬件编码(如Intel Quick Sync、NVENC),可降低CPU负载。
- 内存:16GB起步,每路1080p直播建议预留2GB内存。
- 硬盘:SSD系统盘(100GB)+ 数据盘(根据存储需求),用于录制回放时存储视频文件。
- 网络:独享带宽,上行带宽需满足公式:
带宽(Mbps)= 码率(Mbps)× 并发数 × 1.2(预留20%冗余),例如10路1080p@5Mbps直播需至少600Mbps上行。 - 操作系统:推荐Ubuntu 22.04 LTS或CentOS 8 Stream,确保内核版本≥5.4以支持最新的网络协议和硬件加速。
核心软件安装与配置
Linux直播服务器通常由“推流服务(如SRS、Nimble)”和“转码/分发服务(如FFmpeg、Nginx-RTMP)”组成,以SRS(Simple RTMP Server)为例,其功能涵盖RTMP推流、转码、录制、HLS分发等,适合中小型业务场景。
安装依赖与环境初始化
# 更新系统软件包(Ubuntu示例) sudo apt update && sudo apt upgrade -y # 安装编译工具与依赖 sudo apt install -y build-essential git cmake libssl-dev libsdl2-dev # 关闭防火墙或开放端口(临时测试) sudo ufw disable # 或开放RTMP(1935)、HTTP(8080)、HTTPS(8443)端口 sudo ufw allow 1935/tcp sudo ufw allow 8080/tcp
编译安装SRS
# 下载SRS源码(最新版本可从GitHub获取) git clone https://github.com/ossrs/srs.git cd srs/trunk # 编译SRS(默认开启RTMP、HLS、HTTP-FLV等模块) ./configure --prefix=/usr/local/srs --with-hls --with-http-flv --with-ssl make && sudo make install # 启动SRS服务(前台测试,后台启动可使用nohup) cd /usr/local/srs ./objs/srs -c conf/srs.conf
配置SRS核心功能
编辑配置文件conf/srs.conf,关键参数如下:
# 监听端口(RTMP推流端口)
listen 1935;
# HTTP-FLV与HLS分发配置
http_server {
enabled on;
listen 8080;
dir ./objs/nginx/html;
}
# 转码配置(示例:将输入流转码为720p和480p)
transcode {
enabled on;
ffmpeg ./objs/bin/ffmpeg;
engine {
enabled on;
vfilter {
# 720p转码(码率2000Kbps)
if ("__defaultVhost__" == "livestream") {
filter "livestream_720p";
vcodec libx264;
vbitrate 2000;
vfps 25;
vwidth 1280;
vheight 720;
acodec aac;
abitrate 128;
output "rtmp://127.0.0.1:1935/live/livestream_720p";
}
# 480p转码(码率800Kbps)
filter "livestream_480p";
vcodec libx264;
vbitrate 800;
vfps 25;
vwidth 854;
vheight 480;
acodec aac;
abitrate 64;
output "rtmp://127.0.0.1:1935/live/livestream_480p";
}
}
}
}
# 录制配置(将直播流保存为MP4)
record {
enabled on;
# 录制路径
path ./objs/nginx/html;
# 录制格式(flv/mp4)
dvr dvr.mp4;
# 录制切片时长(秒)
dvr_duration 3600;
# 录制触发条件(有推流时录制)
dvr_wait_keyframe on;
}
推流与播放测试
- 推流:使用OBS Studio,设置“服务”为“自定义”,服务器填写
rtmp://服务器IP:1935/live,串流密钥为livestream(与SRS配置中的vhost和app对应)。 - 播放:
- RTMP播放:VLC媒体播放器,打开网络串流,输入
rtmp://服务器IP:1935/live/livestream。 - HLS播放:浏览器访问
http://服务器IP:8080/live/livestream.m3u8(需配置HLS模块)。
- RTMP播放:VLC媒体播放器,打开网络串流,输入
负载均衡与高可用优化
当单台服务器无法满足并发需求时,需通过Nginx实现负载均衡,将推流请求分发至多台SRS节点。

安装Nginx与RTMP模块
# 安装Nginx(需提前安装rtmp模块)
sudo apt install -y nginx-full libnginx-mod-rtmp
# 配置Nginx-RTMP(编辑/etc/nginx/nginx.conf)
rtmp {
server {
listen 1935;
chunk_size 4096;
# 推流负载均衡(轮询模式)
application live {
live on;
record off;
# 后端SRS节点列表
upstream srs_backend {
server 192.168.1.100:1935;
server 192.168.1.101:1935;
server 192.168.1.102:1935;
}
push "rtmp://srs_backend/live";
}
}
}
# HTTP服务器(用于播放器页面)
http {
server {
listen 80;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
}
启动Nginx并测试
sudo systemctl restart nginx # 推流地址仍为rtmp://服务器IP:1935/live,但实际流量由Nginx分发至后端节点
安全加固与监控
安全配置
- 防火墙限制:仅开放必要端口(如80、1935、8080),禁止外部访问管理端口。
sudo ufw default deny incoming sudo ufw allow 22/tcp (SSH) sudo ufw allow 80/tcp sudo ufw allow 1935/tcp sudo ufw enable
- 推流鉴权:在SRS中配置
secret_key,推流时在串流密钥后添加?secret=your_key,防止恶意推流。 - 资源限制:通过Linux
ulimit限制进程最大文件数和内存,避免资源耗尽攻击。
监控与日志
- SRS日志:默认输出至
./objs/srs.log,可通过log_level调整日志级别(debug/info/error)。 - 系统监控:使用
top、htop监控CPU/内存,iftop查看网络流量;部署Prometheus+Grafana,通过SRS的HTTP API(http://IP:8080/api/v1/summaries)采集推流状态、带宽等指标。
常见问题与优化
- 延迟问题:HLS延迟较高(10-30秒),可调整
dvr_duration或改用WebRTC(需配合SRS的WebRTC插件);RTMP延迟约1-3秒,适合实时互动场景。 - 卡顿原因:检查服务器上行带宽是否饱和、CPU/内存是否过载,或开启SRS的
forward模式,将流转发至CDN节点。
相关问答FAQs
Q1:如何解决Linux直播服务器推流后播放端黑屏或无声音?
A:首先检查推流软件(如OBS)的“视频”和“音频”输出源是否正确开启;其次确认SRS配置文件中application的名称与推流串密钥的路径一致(如推流地址为rtmp://IP/live/key,则配置中需有application live);最后通过SRS日志(./objs/srs.log)查看是否有“推流连接失败”或“编码器错误”提示,若为编码问题,可尝试降低OBS的码率或分辨率。
Q2:如何实现直播流的多码率自适应(ABR)?
A:需结合SRS转码与HLS切片功能,在SRS配置中定义多个转码规格(如1080p、720p、480p),并将各规格输出流存储为不同码率的HLS切片;然后在播放器端(如Video.js、HLS.js)集成ABR逻辑,根据用户网络状况自动切换码率,SRS配置中可设置多个transcode输出livestream_1080p.m3u8、livestream_720p.m3u8等,播放器通过检测master.m3u8(包含各子码率列表)实现自适应切换。

