凌峰创科服务平台

如何用nginx搭建流媒体服务器?

要使用Nginx搭建流媒体服务器,主要依赖其模块支持(如RTMP、HLS、DASH等),可实现视频流的推流、拉播和分发,以下是详细步骤及配置说明:

如何用nginx搭建流媒体服务器?-图1
(图片来源网络,侵删)

环境准备

  1. 系统要求:推荐Linux(如Ubuntu/CentOS),确保内核支持多路转发。
  2. 安装依赖
    • Ubuntu/Debian:sudo apt update && sudo apt install -y build-essential libpcre3 libpcre3-dev zlib1g-dev openssl libssl-dev
    • CentOS/RHEL:sudo yum groupinstall "Development Tools" && sudo yum install -y pcre-devel zlib-devel openssl-devel
  3. 下载Nginx及扩展模块
    • 官方Nginx:wget http://nginx.org/download/nginx-1.25.3.tar.gz
    • RTMP模块(用于推流/拉流):git clone https://github.com/arut/nginx-rtmp-module.git
    • HLS模块(需启用,部分版本已集成)。

编译安装Nginx

  1. 解压并进入目录
    tar -zxvf nginx-1.25.3.tar.gz && cd nginx-1.25.3
  2. 编译配置(关键参数):
    ./configure --prefix=/usr/local/nginx \
                --add-module=/path/to/nginx-rtmp-module \
                --with-http_ssl_module \
                --with-http_v2_module
  3. 编译安装
    make -j$(nproc) && sudo make install

配置RTMP服务

编辑Nginx配置文件(如/usr/local/nginx/conf/nginx.conf),添加RTMP服务器块:

rtmp {
    server {
        listen 1935;  # RTMP默认端口
        chunk_size 4096;
        application live {
            live on;  # 启用直播
            record off;  # 不录制流
            hls on;  # 启用HLS(可选,用于HTTP拉流)
            hls_path /tmp/hls;  # HLS切片存放路径
            hls_fragment 3s;  # 每片时长
            hls_cleanup on;  # 清理旧切片
        }
    }
}
http {
    server {
        listen 80;
        location /hls {
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            root /tmp;  # HLS路径与RTMP配置一致
            add_header Cache-Control no-cache;  # 禁用缓存
        }
    }
}

启动服务与测试

  1. 启动Nginx
    sudo /usr/local/nginx/sbin/nginx
  2. 推流测试(使用FFmpeg):
    ffmpeg -re -i input.mp4 -c copy -f flv rtmp://your_server_ip:1935/live/stream_key
    • input.mp4:本地视频文件
    • stream_key:自定义流标识符(需与播放URL一致)
  3. 播放测试
    • RTMP播放:rtmp://your_server_ip:1935/live/stream_key(需VLC等支持RTMP的播放器)
    • HLS播放:http://your_server_ip/hls/stream_key.m3u8(支持HTML5播放)

常见问题与优化

  1. 防火墙配置
    • 开放端口:sudo ufw allow 1935/tcp(RTMP)、sudo ufw allow 80/tcp(HLS)。
  2. 性能优化
    • 调整worker_processes为CPU核心数。
    • 增加缓冲区:proxy_buffering on; proxy_buffer_size 4k;
  3. 防盗链
    location /hls {
        valid_referers none blocked your_domain.com;
        if ($invalid_referer) {
            return 403;
        }
    }

相关问答FAQs

Q1: 如何实现RTMP直播的录制与点播?
A: 在RTMP配置中添加record on; record_path /tmp/record;,录制后的文件可通过HTTP模块提供点播服务,在http块中添加location /vod { alias /tmp/record; autoindex on; },即可通过http://your_server_ip/vod/文件名.mp4访问。

Q2: HLS播放延迟高如何优化?
A: 可通过调整HLS切片时长(如hls_fragment 1s)降低延迟,但会增加服务器负载,结合低延迟协议(如LL-HLS)或使用WebRTC技术可进一步优化,需额外配置nginx-rtmp-module的llhls on参数。

如何用nginx搭建流媒体服务器?-图2
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇