上一篇 下一篇 分享链接 返回 返回顶部

香港CN2服务器搭建直播系统的实操教程与优化解决方案

发布人:Minchunlin 发布时间:2025-07-29 09:37 阅读量:741


我是一个直播系统架构工程师,也是一位长年运营中小型直播项目的从业者。随着国内对内容审核的要求越来越高,我们决定把部分内容迁移到海外架构。经过对比 AWS、阿里国际、GCP、腾讯云香港等选项,最终我选择了香港CN2服务器,原因很简单:

  • 香港地区访问延迟低,覆盖大陆南部尤为出色;
  • CN2线路走的是中国电信精品网,南方用户体验接近内网;
  • 我拿到的机器配置非常给力:双路 Intel Xeon Gold 6230,40核80线程,100M独享带宽;
  • 成本可控,性价比远高于云服务平台。

本文是我一次完整的实战部署记录,从操作系统初始化到 NGINX-RTMP 配置、FFmpeg 推流、CDN优化、性能瓶颈调优等,均一一详解,并提供解决方案。

一、服务器基本信息与前期准备

1.1 服务器配置

  • 区域:香港(CN2 GIA线路)
  • 处理器:Intel Xeon Gold 6230 × 2(共40核80线程)
  • 内存:128GB ECC DDR4
  • 硬盘:NVMe SSD × 2(RAID1)
  • 带宽:100M 独享(上行对等)
  • 系统:CentOS 7.9 Minimal(无GUI)

1.2 使用场景

  • 推流协议:RTMP 输入
  • 播放协议:HLS 输出
  • 支持延迟直播和近实时直播
  • 用户并发目标:300~800用户(单台机)

二、系统初始化与内核调优

2.1 基础环境初始化

yum update -y
yum install epel-release -y
yum install wget git vim lsof net-tools -y

关闭防火墙与 SELinux:

systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

2.2 内核参数优化(用于大并发连接)

编辑 /etc/sysctl.conf 添加:

net.core.somaxconn = 65535
net.core.netdev_max_backlog = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_window_scaling = 1

执行:

sysctl -p

2.3 文件描述符限制

echo "* soft nofile 1000000" >> /etc/security/limits.conf
echo "* hard nofile 1000000" >> /etc/security/limits.conf

三、搭建 NGINX + RTMP 服务

3.1 安装 NGINX-RTMP

yum install -y gcc pcre-devel openssl-devel zlib-devel make
cd /usr/local/src
wget https://nginx.org/download/nginx-1.20.2.tar.gz
wget https://github.com/arut/nginx-rtmp-module/archive/refs/heads/master.zip
tar -zxvf nginx-1.20.2.tar.gz
unzip master.zip
cd nginx-1.20.2

./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-master
make && make install

3.2 配置 RTMP 服务

编辑 /usr/local/nginx/conf/nginx.conf,添加如下:

rtmp {
    server {
        listen 1935;
        chunk_size 4096;

        application live {
            live on;
            record off;
            allow publish all;
            allow play all;
        }
    }
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }

        location /hls {
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            root /tmp;
            add_header Cache-Control no-cache;
        }
    }
}

重启 NGINX:

/usr/local/nginx/sbin/nginx

四、配置 FFmpeg 实现 RTMP 转 HLS

4.1 安装 FFmpeg

推荐使用静态编译版本:

cd /usr/local/bin
wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
tar -xf ffmpeg-release-amd64-static.tar.xz
mv ffmpeg-*-static ffmpeg
ln -s /usr/local/bin/ffmpeg/ffmpeg /usr/bin/ffmpeg
ln -s /usr/local/bin/ffmpeg/ffprobe /usr/bin/ffprobe

4.2 推流转码脚本

创建 /usr/local/bin/rtmp_to_hls.sh:

#!/bin/bash
INPUT_URL="rtmp://localhost/live/stream"
OUTPUT_DIR="/tmp/hls"
mkdir -p $OUTPUT_DIR

ffmpeg -i $INPUT_URL \
-c:v libx264 -preset veryfast -b:v 1500k -maxrate 1500k -bufsize 3000k \
-c:a aac -b:a 128k -ac 2 \
-f hls -hls_time 2 -hls_list_size 6 -hls_flags delete_segments \
$OUTPUT_DIR/stream.m3u8

设置自启动或用 Supervisor 管理。

五、性能调优与压力测试

5.1 CPU亲和性绑定

使用 taskset 将 FFmpeg 与 NGINX 分配到不同 NUMA 节点:

taskset -c 0-19 ./ffmpeg ...
taskset -c 20-39 ./nginx

5.2 并发测试

使用 ab 或 siege 模拟 HLS 拉流:

siege -c 300 -t 5M http://IP/hls/stream.m3u8

5.3 观察系统瓶颈

重点监控项:

top -H
htop
nload
iostat -x 1

如出现带宽瓶颈,可考虑拆分推流节点与转码节点,或接入第三方CDN进行播出加速。

六、进阶方案与高可用扩展

6.1 配合 OBS 推流

推流地址:

rtmp://your-server-ip/live
Stream Key: stream

6.2 多码率自适应流

FFmpeg 可配置多个输出分辨率:

ffmpeg -i rtmp://... \
-map 0:v -s 1920x1080 -b:v:0 3000k \
-map 0:v -s 1280x720 -b:v:1 1500k \
-map 0:v -s 640x360  -b:v:2 800k \
...

并输出多个 m3u8,整合为主索引播放列表(master.m3u8)。

6.3 负载均衡与高可用方案

  • 利用 LVS/Nginx+Keepalived 做前端负载;
  • 后端服务器按推流 / 转码 / 播出分层部署;
  • 使用 rsync 或 NFS 做热备份/共享 m3u8 文件。

七、CN2独服 + 自建直播,性价比利器

经过部署测试,我的这台香港CN2服务器稳定支持 600+ 并发用户拉流,CPU 利用率控制在 40%,带宽打满约在 12~14 路码率为2Mbps的流。成本比起云平台自建 CDN + 转码便宜约60%以上。

当然,CN2线路虽好,还是建议加上回源缓存层或 CDN 播出,以应对网络波动。

自建直播不是捷径,但在需要灵活配置、成本控制和地域优先的场景下,这种架构无疑是非常值得探索的。

目录结构
全文