Linux环境下安装SRS流媒体服务器实现视频直播推流

Linux环境下安装SRS流媒体服务器实现视频直播推流

SRS(Simple Realtime Server)是一款高性能的开源流媒体服务器,支持RTMP、WebRTC、HLS、HTTP-FLV等多种协议。以下是在Linux环境中部署SRS实现视频直播推流的详细指南。

一、安装前的准备

系统要求

  • 操作系统:Ubuntu 20.04/22.04或CentOS 7/8
  • 硬件要求
    • CPU:至少2核
    • 内存:≥1GB
    • 硬盘:≥10GB可用空间
  • 网络要求
    • 开放端口:1935 (RTMP), 1985 (API), 8080 (HTTP)
    • 带宽:≥10Mbps

安装必要依赖

# Ubuntu/Debian
sudo apt update
sudo apt install -y git build-essential automake libtool pkg-config

# CentOS/RHEL
sudo yum groupinstall "Development Tools"
sudo yum install -y git autoconf automake libtool

二、安装SRS流媒体服务器

方法1:源码编译安装(推荐)

# 1. 克隆源码
git clone https://github.com/ossrs/srs.git
cd srs/trunk

# 2. 配置编译选项(典型配置)
./configure --prefix=/usr/local/srs \
            --with-http \
            --with-http-server \
            --with-ffmpeg \
            --with-transcode \
            --with-ingest \
            --with-ssl
            
# 3. 编译并安装
make -j$(nproc)
sudo make install

# 4. 创建系统服务
sudo cp /usr/local/srs/etc/init.d/srs /etc/init.d/
sudo chmod +x /etc/init.d/srs
sudo systemctl daemon-reload

方法2:使用预编译包(快速安装)

# Ubuntu/Debian
curl -s https://ossrs.net/ubuntu | bash
sudo apt install -y srs

# CentOS/RHEL
curl -s https://ossrs.net/centos | bash
sudo yum install -y srs

三、配置SRS服务器

基础配置文件示例

sudo vim /usr/local/srs/conf/srs.conf
listen              1935;
max_connections     1000;
daemon              on;
srs_log_tank        file;
srs_log_file        /var/log/srs.log;

http_server {
    enabled         on;
    listen          8080;
    dir             ./objs/nginx/html;
}

http_api {
    enabled         on;
    listen          1985;
}

vhost __defaultVhost__ {
    hls {
        enabled         on;
        hls_path        ./objs/nginx/html;
        hls_fragment    10;
        hls_window      60;
    }
    
    http_remux {
        enabled     on;
        mount       [vhost]/[app]/[stream].flv;
    }
}

启动SRS服务

# 源码安装
sudo /usr/local/srs/objs/srs -c /usr/local/srs/conf/srs.conf

# 包管理器安装
sudo systemctl start srs

验证安装

# 检查进程
ps aux | grep srs

# 检查端口
sudo netstat -tuln | grep -E '1935|8080|1985'

# 通过API验证
curl http://localhost:1985/api/v1/versions

四、推流与播放实战

1. 使用FFmpeg推流

# 测试视频推流
ffmpeg -re -i test.mp4 -c:v copy -c:a copy -f flv rtmp://localhost/live/test

# 摄像头实时推流(Linux)
ffmpeg -f v4l2 -i /dev/video0 -c:v libx264 -preset ultrafast -f flv rtmp://localhost/live/camera

# 电脑屏幕捕获
ffmpeg -f x11grab -s 1920x1080 -i :0.0 -c:v libx264 -f flv rtmp://localhost/live/screen

2. 使用OBS Studio推流

  1. 下载安装OBS Studio
  2. 设置 → 推流:
    • 服务:自定义
    • 服务器:rtmp://your_server_ip/live
    • 串流密钥:自定义名称(如obs_stream
  3. 添加视频源(显示器捕获/视频采集设备)
  4. 点击"开始推流"

3. 播放地址

协议播放地址示例适用场景
RTMPrtmp://server_ip/live/test低延迟播放器
HTTP-FLVhttp://server_ip:8080/live/test.flv浏览器(flv.js)
HLShttp://server_ip:8080/live/test.m3u8跨平台兼容播放
WebRTCwebrtc://server_ip/live/test低延迟实时互动

4. 播放测试方法

# VLC播放器
vlc rtmp://localhost/live/test

# FFplay播放
ffplay -fflags nobuffer rtmp://localhost/live/test  # 低延迟模式
ffplay http://localhost:8080/live/test.flv        # HTTP-FLV

# 网页播放
http://server_ip:8080/players/srs_player.html

五、高级功能配置

1. 开启HTTPS安全传输

http_server {
    enabled on;
    listen 8080;
    ssl on;
    ssl_listen 443;
    ssl_certificate srs.crt;
    ssl_certificate_key srs.key;
}

2. 录制直播流

vhost __defaultVhost__ {
    dvr {
        enabled      on;
        dvr_path     /data/rec/[app]/[stream].[timestamp].mp4;
        dvr_plan     session;
    }
}

3. 转码配置

vhost __defaultVhost__ {
    transcode {
        enabled     on;
        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
        engine example {
            enabled         on;
            vfilter {
            }
            vcodec          libx264;
            vbitrate        500;
            vfps            25;
            vwidth          768;
            vheight         432;
            vthreads        4;
            vprofile        baseline;
            vpreset         superfast;
            acodec          libfdk_aac;
            abitrate        70;
            asample_rate    44100;
            achannels       2;
            aparams {
            }
            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
        }
    }
}

4. 安全鉴权

vhost security_vhost {
    security {
        enabled     on;
        allow       publish 127.0.0.1;         # 允许本地推流
        deny        publish all;               # 禁止其他IP推流
        allow       play all;                  # 允许所有播放
    }
}

六、监控与管理

SRS控制台访问

http://server_ip:8080

API接口使用示例

# 获取服务器状态
curl http://localhost:1985/api/v1/summaries

# 查看当前流信息
curl http://localhost:1985/api/v1/streams

# 踢掉指定客户端
curl "http://localhost:1985/api/v1/clients/123456?action=kick"

性能监控关键指标

# 实时资源使用情况
top -p $(pgrep -f srs)

# 网络流量监控
iftop -i eth0 -P

# 磁盘IO监控
iostat -x 1

七、故障排除与优化

常见问题解决

问题解决方案
推流连接失败检查防火墙设置:sudo ufw allow 1935,8080,1985
VLC播放卡顿减小播放缓冲:工具→首选项→输入/编解码器→网络缓存时间设为300ms
高延迟(>3秒)启用低延迟模式:OBS设置→输出→低延迟模式;VLC使用低延迟配置
HLS播放不更新检查hls_fragment设置,推荐5-10秒;清理浏览器缓存
CPU使用率过高降低分辨率;使用硬件加速编码;减少转码任务

性能优化建议

# 1. 增加工作进程
worker_processes 4;

# 2. 提高网络缓冲区
sndbuf 10485760;
rcvbuf 10485760;

# 3. 启用TCP_NODELAY
tcp_nodelay on;

# 4. 优化HLS配置
hls {
    hls_fragment 5;   # 分片时长(秒)
    hls_window 60;    # 总共保留时长
    hls_cleanup on;   # 自动清理旧文件
}

# 5. 限制并发连接数
max_connections 1000;

八、生产环境建议

部署架构示例

推流客户端
SRS边缘节点
SRS源站集群
CDN分发网络
播放终端

最佳实践

  1. 安全防护

    • 配置防火墙白名单
    • 启用推流鉴权
    • 定期更新SRS版本
  2. 高可用部署

    # Keepalived配置示例
    vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 51
        priority 100
        virtual_ipaddress {
            192.168.1.100
        }
    }
    
  3. 监控告警

    • 使用Prometheus + Grafana监控SRS
    • 设置关键指标阈值告警(CPU、内存、流量)
  4. 日志管理

    # 日志分割配置
    /var/log/srs.log {
        daily
        rotate 30
        compress
        missingok
        notifempty
    }
    

九、扩展功能

1. WebRTC支持

rtc_server {
    enabled on;
    listen 8000;
    candidate $CANDIDATE; # 替换为服务器公网IP
}

vhost __defaultVhost__ {
    rtc {
        enabled on;
        rtmp_to_rtc on;
        rtc_to_rtmp on;
    }
}

2. SRT协议支持

./configure --with-srt

3. 集群部署

# 源站配置
origin_cluster on;
vhost origin {
    cluster {
        mode remote;
        origin 192.168.1.100:1935; # 边缘节点
    }
}

十、完整测试脚本

#!/bin/bash

# 启动SRS服务器
/usr/local/srs/objs/srs -c /usr/local/srs/conf/srs.conf &

# 等待服务器启动
sleep 2

# 推流测试
ffmpeg -re -f lavfi -i testsrc=size=1280x720:rate=30 -c:v libx264 -f flv rtmp://localhost/live/test &

# 播放测试
ffplay -fflags nobuffer rtmp://localhost/live/test &

# 监控
while true; do
    clear
    curl -s http://localhost:1985/api/v1/summaries | jq
    sleep 1
done

总结

通过以上步骤,您已经成功在Linux环境下部署了SRS流媒体服务器,并实现了多种方式的推流和播放。SRS作为一款高性能的开源流媒体服务器,具有以下优势:

  1. 协议支持全面:RTMP、HTTP-FLV、HLS、WebRTC等
  2. 性能卓越:可支持上千并发,毫秒级延迟
  3. 扩展性强:支持集群部署、转码、录制等高级功能
  4. 易于管理:提供Web控制台和RESTful API

生产环境建议:

  • 使用Docker容器化部署
  • 配合Nginx实现负载均衡
  • 启用监控告警系统
  • 定期备份重要配置

对于业务关键型应用,可考虑SRS的商业支持服务,获取专业技术支持和高级功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值