在Linux环境下搭建流媒体服务器是实现视频内容分发的高效方式,尤其适用于企业内训、在线教育或个人媒体库管理,本文将基于Nginx与RTMP模块,详细讲解从环境准备到服务配置的全过程,确保具备基础Linux操作能力的用户可独立完成部署。

环境准备与依赖安装
首先选择稳定的服务器发行版,推荐Ubuntu 20.04 LTS或CentOS 8,以Ubuntu为例,更新系统后安装必要依赖:
sudo apt update && sudo apt upgrade -y sudo apt install -y build-essential libpcre3 libpcre3-dev zlib1g-dev openssl libssl-dev
需确保服务器具备足够带宽与存储空间,建议使用SSD硬盘以提升I/O性能,防火墙需开放1935(RTMP默认端口)及80/443(HTTP/HTTPS)端口,Ubuntu可通过sudo ufw allow 1935,80,443/tcp配置。
编译安装Nginx与RTMP模块
Nginx本身不支持RTMP协议,需通过第三方模块扩展,步骤如下:
- 下载Nginx源码及RTMP模块:
wget http://nginx.org/download/nginx-1.18.0.tar.gz git clone https://github.com/arut/nginx-rtmp-module.git
- 解压并编译安装:
tar -xzf nginx-1.18.0.tar.gz cd nginx-1.18.0 ./configure --add-module=/path/to/nginx-rtmp-module --with-http_ssl_module make && sudo make install
编译完成后,Nginx默认安装至
/usr/local/nginx。
(图片来源网络,侵删)
RTMP服务配置
编辑Nginx配置文件/usr/local/nginx/conf/nginx.conf,在http块外添加RTMP服务配置:
rtmp {
server {
listen 1935;
application live {
live on;
record off;
hls on;
hls_path /tmp/hls;
hls_fragment 3s;
}
}
}
http {
server {
listen 80;
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /tmp;
add_header Cache-Control no-cache;
}
}
}
此配置启用RTMP推流(application live块)及HLS拉流(/hls路径)。hls_fragment设置切片时长,适配不同网络环境。
启动服务与测试
启动Nginx并检查进程:
sudo /usr/local/nginx/sbin/nginx ps aux | grep nginx
使用OBS Studio等工具推流,地址格式为rtmp://服务器IP:1935/live/流密钥,观众可通过VLC播放http://服务器IP/hls/流密钥.m3u8观看直播,若需持久化服务,可创建systemd单元文件/etc/systemd/system/nginx-rtmp.service实现开机自启。

性能优化建议
为提升并发能力,可调整内核参数(如net.core.somaxconn)及Nginx工作进程数,对于大流量场景,建议配合FFmpeg进行转码,或使用SRS等专业流媒体服务器替代Nginx+RTMP方案,监控方面,可通过nginx -s reload热加载配置,并结合logrotate管理日志文件。
相关问答FAQs
Q1: 如何实现RTMP推流的加密传输?
A: 可通过RTMPS(RTMP over SSL)实现加密,在Nginx配置中添加listen 1935 ssl,并指定证书路径:ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem;,推流时将协议改为rtmps://,确保客户端与服务端均启用SSL验证。
Q2: 直播延迟过高如何优化?
A: 延迟主要由HLS切片时长导致,可缩短hls_fragment至1-2秒,或使用低延迟协议如WebRTC,检查网络带宽与服务器负载,避免因资源不足产生卡顿,若允许降低兼容性,可尝试SRS的WebRTC模块实现亚秒级延迟。
