凌峰创科服务平台

Linux直播服务器怎么搭建?

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

Linux直播服务器怎么搭建?-图1
(图片来源网络,侵删)

环境准备与硬件选择

搭建直播服务器前,需明确业务需求(如并发观众数、视频分辨率、帧率),合理配置硬件资源,推荐配置如下:

  • 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模块)。

负载均衡与高可用优化

当单台服务器无法满足并发需求时,需通过Nginx实现负载均衡,将推流请求分发至多台SRS节点。

Linux直播服务器怎么搭建?-图2
(图片来源网络,侵删)

安装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,防止恶意推流。
  • 资源限制:通过Linuxulimit限制进程最大文件数和内存,避免资源耗尽攻击。

监控与日志

  • SRS日志:默认输出至./objs/srs.log,可通过log_level调整日志级别(debug/info/error)。
  • 系统监控:使用tophtop监控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.m3u8livestream_720p.m3u8等,播放器通过检测master.m3u8(包含各子码率列表)实现自适应切换。

Linux直播服务器怎么搭建?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇