搭建Linux流媒体服务器是许多企业和个人用户的需求,可用于视频点播、直播、在线教育等场景,本文将详细介绍基于Linux系统搭建流媒体服务器的步骤、常用工具及配置方法,帮助读者快速上手。

选择合适的Linux发行版是基础,Ubuntu Server或CentOS Stream是常见选择,前者拥有丰富的软件包和社区支持,后者则适合企业级应用,安装时建议选择最小化安装,减少不必要的资源占用,安装完成后,更新系统软件包:在Ubuntu中运行sudo apt update && sudo apt upgrade,CentOS中则使用sudo dnf update。
选择流媒体服务器软件,主流方案包括Nginx with RTMP、SRS(Simple RTMP Server)及Wowza,Nginx with RTMP因轻量、高效且配置简单,适合中小型应用,以下以Nginx with RTMP为例展开说明,安装依赖包后,需从源码编译Nginx并添加RTMP模块,下载Nginx源码和RTMP模块(如nginx-rtmp-module),通过./configure --add-module=/path/to/nginx-rtmp-module配置,再执行make && make install,编译成功后,Nginx默认安装至/usr/local/nginx。
配置RTMP服务是核心环节,编辑Nginx配置文件/usr/local/nginx/conf/nginx.conf,在http块外添加RTMP配置块。
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
record off;
}
}
}
上述配置中,1935为RTMP默认端口,live为应用名称,支持推流和拉流,若需实现HLS(HTTP Live Streaming)点播,需在http块中添加:

server {
listen 80;
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /mnt/hls;
add_header Cache-Control no-cache;
}
}
启用RTMP模块的HLS功能:在rtmp块的应用中添加hls on; hls_path /mnt/hls; hls_fragment 3s;,推流时,使用OBS等工具设置服务器地址为rtmp://your_server_ip:1935/live,流密钥为任意自定义字符串。
若需实现视频点播(VOD),可配置Nginx的伪静态和文件读取功能,将视频文件存放于/mnt/videos目录,在http块中添加:
location /vod {
alias /mnt/videos;
mp4;
flv;
}
支持MP4、FLV等格式,通过http://your_server_ip/vod/video.mp4访问。
服务器性能优化不可忽视,建议调整内核参数,如增加文件描述符限制(echo "fs.file-max = 65536" >> /etc/sysctl.conf),并优化Nginx工作进程数(worker_processes auto;),使用FFmpeg进行转码或录制,可提升兼容性,ffmpeg -i rtmp://input -c:v libx264 -c:a aac -f flv rtmp://output。
防火墙需开放相关端口,如Ubuntu中运行sudo ufw allow 1935/tcp和sudo ufw allow 80/tcp,通过systemctl restart nginx重启服务,检查日志/usr/local/nginx/logs/error.log排查问题。
FAQs
-
Q: 推流时出现“Connection refused”错误,如何解决?
A: 检查Nginx是否正确启动(ps aux | grep nginx),确认1935端口是否开放(netstat -tuln | grep 1935),并检查防火墙和SELinux设置。 -
Q: 如何实现多码率自适应直播?
A: 可通过FFmpeg生成不同分辨率的视频流,结合Nginx的HLS模块生成多份m3u8文件,再使用苹果的HTTP Live Streaming(HLS)技术实现自适应码率切换,或使用SRS等服务器支持的自适应码率功能。
