PHP8 + 原生实现:音视频转码 + 直播网关完整解决方案
RTMP Server
纯 PHP 编写的轻量级 RTMP 直播服务,无第三方流媒体服务依赖,开箱快速搭建私有化直播平台。
Linux 环境自动启用 epoll 事件驱动,单进程轻松承载 20,000+ 并发连接,Windows 回退 select 模式保证兼容。
🏗️ 系统架构
【推流端】OBS/FFmpeg
│
RTMP 推流(1935) / HTTP-FLV 推流(8501)
│
▼
╔══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗
║ RTMP 源站主服务器 (核心) ║
║ ║
║ 📥 推流接入 RTMP / HTTP-FLV 双协议推流、链接认证 ║
║ 🔄 协议转换 RTMP / HTTP-FLV → HTTP-FLV / WebSocket-FLV / HLS / fMP4 / MP4 ║
║ 💾 实时录制 ┌──────────────┬──────────────┬──────────────┐ ║
║ │ FLV录制 │ fMP4切片 │ HLS切片 │ 三个独立并行任务 ║
║ │ (实时裸流) │ (实时分片) │ (实时分片) │ ║
║ └──────────────┴──────────────┴──────────────┘ ║
║ 📤 直播输出 HTTP-FLV(8501) / WebSocket-FLV / HLS实时流 / fMP4实时流 ║
║ 📦 点播产出 fMP4切片实时生成 → 直播结束后自动合并为完整MP4 ║
║ 📁 静态服务 源站内置HTTP服务(80端口),可直接提供静态文件访问(适用于低并发场景) ║
╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
│
┌───────────────────────┼───────────────────────┐
│ │ │
▼ ▼ ▼
HTTP-FLV(8501) HLS(TS/m3u8) fMP4(切片)
实时流输出 静态文件 静态文件
│ │ │
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────────────────────────────────────┐
│ FLV 网关集群 │ │ 静态文件网关集群 (fileGateway) │
│ │ │ 🎯 托管:HLS / fMP4 / MP4 / FLV / Web页面 │
│ ┌───────────┐ │ │ │
│ │ 一级网关 │ │ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ │
│ │ (8080) │ │ │ │ 网关节点1 │ │ 网关节点2 │ │ 网关节点3 │ │
│ └─────┬─────┘ │ │ │ (8100) │ │ (8101) │ │ (8102) │ │
│ │ │ │ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ │
│ ┌─────┴─────┐ │ │ │ │ │ │
│ ▼ ▼ ▼ │ │ ▼ ▼ ▼ │
│ ┌───┐ ┌───┐ ┌───┐│ │ ┌──────────────────────────────────────┐ │
│ │子 │ │子 │ │子 ││ │ │ 客户端 (Client) │ │
│ │网 │ │网 │ │网 ││ │ │ HLS播放器 / MSE播放器 / 点播请求 / ffplay │ │
│ │关 │ │关 │ │关 ││ │ └──────────────────────────────────────┘ │
│ └─┬─┘ └─┬─┘ └─┬─┘│ │ │
│ │ │ │ │ └─────────────────────────────────────────────────┘
│ ▼ ▼ ▼ │
│ ┌──────────────┐ │
│ │ 客户端 │ │
│ │ FLV播放器 / ffplay │
│ └──────────────┘ │
└─────────────────┘
架构说明
-
源站服务:唯一流生产节点,支持 RTMP、HTTP-FLV 双协议推流,负责推拉流接入、多协议转封装。FLV录制、fMP4切片、HLS切片三个任务完全独立并行运行,互不阻塞。
-
源站静态能力:源站内置 HTTP 服务(默认80端口),可直接提供静态文件访问。低并发场景下无需额外部署网关,开箱即用。
-
实时录制机制:
- FLV录制:实时保存原始裸流,直播结束后得到完整FLV文件
- fMP4切片:实时生成音视频 fMP4 分片(支持混合切片和分离切片两种格式),直播结束后自动合并为完整 MP4
- HLS切片:实时生成 TS 分片 + m3u8 索引(移动端兼容)
- 独立开关:用户可在
server.php中分别配置是否开启各录制任务
-
FLV 直播网关集群:纯流量转发服务,向上拉取 HTTP-FLV 流、缓存 GOP 关键帧实现播放秒开,向下分发至终端客户端或下级网关。
- 支持无限层级级联:一级网关 → 二级网关 → 三级网关 → … → 客户端
- 支持横向扩容:同层级部署多个网关实例,通过负载均衡分发流量
- Linux epoll 高性能:单进程可承载 20,000+ 并发连接,Windows 兼容 select 模型
-
静态文件网关集群 (推荐):轻量级 HTTP 静态文件服务器,统一托管所有静态资源。
- 适用协议:HLS (.m3u8/.ts)、fMP4 (.m4s/.mp4)、MP4 点播文件、FLV 录制文件、Web 播放页面
- 支持横向扩容:同层级部署多个网关实例,线性提升并发能力
- 支持纵向扩容:可通过 Nginx 等反向代理对静态文件网关进行多层级流量分发
- Linux epoll 高性能:单进程可承载 20,000+ 并发连接,Windows 兼容 select 模型
- 最佳实践:将 HLS/fMP4/MP4 播放路径指向此网关集群,实现静态资源读写分离
-
部署建议:
- 低并发场景(< 500 并发):直接使用源站内置 HTTP 服务,无需额外网关
- 中等并发场景(500 – 5,000 并发):
- 源站 + 单层网关集群(FLV网关 或 静态文件网关)
- 单个网关进程通常即可满足,无需多实例
- 高并发场景(> 5,000 并发):
- 源站专注「推流、协议转换、实时录制」
- FLV 网关多级集群:一级网关 → 二级网关 → 客户端
- 静态文件网关多级集群:一级网关 → 二级网关 → 客户端
- 每层网关均可横向扩容,线性提升并发能力
✨ 功能特性
- 🎥 双协议推流:完整实现标准 RTMP 推拉流 + HTTP-FLV 推拉流,兼容主流推流工具
- 📡 HTTP-FLV / WebSocket-FLV:浏览器低延迟直播方案,支持 ffplay 等播放器直接拉流播放
- 🧩 HLS 自动分片:实时生成 m3u8 + TS,全平台移动端兼容
- 📦 fMP4 实时切片 + 自动合并:直播时实时生成 fMP4 分片,直播结束自动合并为完整 MP4
- 🎬 双 fMP4 格式支持:同时支持音视频混合切片和音视频分离切片两种格式
- 💾 FLV 独立录制:实时保存原始 FLV 裸流,与 fMP4/MP4 解耦
- 🎛️ 独立任务开关:FLV录制、fMP4切片、HLS切片可分别独立配置启用/禁用
- 🖥️ 内置多套Web播放器:开箱即用,支持 FLV/HLS/MP4/混合fMP4/分离fMP4 播放
- 🚀 可级联 FLV 流媒体网关:无限层级分流、GOP缓存秒开、断流自动重连,支撑高并发直播场景
- 📁 静态文件网关:统一托管 HLS/fMP4/MP4 录制资源及播放页面,支撑高并发点播场景
- 🎞️ 全平台播放兼容:支持 ffplay、VLC、浏览器、移动端播放器等主流播放终端
- 🐳 Docker 一键部署:快速拉起测试环境
- ⚡ 原生纯PHP实现:不依赖任何第三方流媒体程序
📋 环境依赖
- PHP >= 8.1(仅 CLI 命令行模式运行)
- 必须启用扩展:
sockets - 推荐扩展:
event(Linux 下大幅提升并发性能,自动启用 epoll)
🚀 快速开始
1. 安装项目
composer create-project xiaosongshu/rtmp_server
2. 配置录制开关(server.php)
// 三个独立录制任务开关,可根据需要分别开启/关闭
define('FLV_TO_RECORD', true); // 是否实时录制FLV原始文件
define('FLV_TO_MP4', true); // 是否实时生成fMP4切片并合并为MP4
define('FLV_TO_HLS', true); // 是否实时生成HLS(TS)切片
3. 启动源站服务
php server.php
4. 访问播放(低并发场景直接使用源站)
# 播放页面访问(源站内置HTTP服务)
http://127.0.0.1/index.html # FLV直播页面
http://127.0.0.1/play.html # HLS直播页面
http://127.0.0.1/mp4.html # MP4点播页面
http://127.0.0.1/play_merge.html # fMP4分片点播页面(支持混合/分离两种格式)
5. 中等/高并发场景:部署静态文件网关集群(推荐)
适用场景:HLS(.ts/.m3u8)、fMP4(.m4s/.mp4)、MP4 点播文件以及 Web 页面的高并发访问。
Linux 下单个网关进程即可承载 20,000+ 连接,如需更高负载可通过多实例横向扩展。
# 启动单个实例(epoll 下直接扛高并发)
php fileGateway.php 0.0.0.0 8100
# 【横向扩容】多实例部署(用于超级并发或多机负载)
php fileGateway.php 0.0.0.0 8100
php fileGateway.php 0.0.0.0 8101
php fileGateway.php 0.0.0.0 8102
# Linux/macOS 后台运行
php fileGateway.php 0.0.0.0 8100 > /dev/null 2>&1 &
# 纵向扩容:通过 Nginx 反向代理多级分发
# 一级 Nginx -> 二级 fileGateway (8100/8101/8102) -> 三级 fileGateway ...
访问示例(通过静态文件网关):
http://127.0.0.1:8100/play.html # 通过网关访问HLS播放页
http://127.0.0.1:8100/hls/live/stream/index.m3u8 # 通过网关访问HLS流
6. 中等/高并发场景:部署 FLV 直播网关集群
Linux 下单个 FLV 网关进程即可稳定支撑近 20,000 路并发播放。
# 一级网关:拉取源站流
php flvGateway.php 8080 http://源站IP:8501
# 横向扩容:同层部署多个网关实例
php flvGateway.php 8081 http://源站IP:8501
php flvGateway.php 8082 http://源站IP:8501
# 纵向扩容:多级级联
php flvGateway.php 8080 http://源站IP:8501 # 一级网关
php flvGateway.php 8081 http://127.0.0.1:8080 # 二级网关(拉取一级网关)
php flvGateway.php 8082 http://127.0.0.1:8081 # 三级网关(拉取二级网关)
7. 停止服务
| 操作系统 | 终止命令 |
|---|---|
| Windows | Ctrl + C |
| Linux/macOS | kill -9 PID |
🔧 端口配置(修改位置:server.php)
| 端口 | 通信协议 | 业务用途 |
|---|---|---|
| 1935 | RTMP | RTMP 推流、RTMP拉流播放 |
| 8501 | HTTP/WebSocket | HTTP-FLV 推拉流 / WS-FLV 直播播放 |
| 80 | HTTP | 静态文件服务 + Web播放器页面 |
🚀 FLV 流媒体网关(高并发直播分发)
网关简介
轻量化流量分发组件,支持无限层级级联部署。从上游源站/上级网关拉取 HTTP-FLV,缓存流头与 GOP 关键帧,新用户接入秒开,并复制流数据下发客户端或子网关。专为中高并发直播场景设计,支持横向+纵向扩容。
网关核心能力
- 📡 单实例多路流并发转发,同时承载不同频道直播分发
- 🔄 无限层级级联,一级→二级→三级网关链式扩展
- ⚡ GOP预缓存,新连接无需等待关键帧,实现秒开播放
- 🔁 上游流断开自动重连,终端用户无感知断线
- 📊 内置运行统计,每10秒输出在线人数、上下行流量
- 🚀 横向扩容:同层增加网关进程/实例,线性提升并发
- 🚀 纵向扩容:多层级级联,分散单点压力
- 🧠 自适应 IO:Linux 自动启用 epoll,单进程 20,000+ 并发;Windows 回退 select 保证兼容
FLV网关启动命令
# 【横向扩容】单层多实例
php flvGateway.php 8080 http://源站IP:8501
php flvGateway.php 8081 http://源站IP:8501
php flvGateway.php 8082 http://源站IP:8501
# 【纵向扩容】多级级联
php flvGateway.php 8080 http://源站IP:8501 # 一级网关
php flvGateway.php 8081 http://127.0.0.1:8080 # 二级网关
php flvGateway.php 8082 http://127.0.0.1:8081 # 三级网关
# 【组合扩容】多级 + 每级多实例
# 一级网关集群
php flvGateway.php 8080 http://源站IP:8501
php flvGateway.php 8081 http://源站IP:8501
# 二级网关集群(拉取一级网关)
php flvGateway.php 8180 http://127.0.0.1:8080
php flvGateway.php 8181 http://127.0.0.1:8081
网关播放地址规范
http://网关IP:端口/{应用名}/{频道名}.flv
示例:
# 一级网关
http://127.0.0.1:8080/live/stream.flv
# 二级网关
http://127.0.0.1:8081/live/stream.flv
调试日志
网关启动脚本添加 $gateway->debug = true;,开启全量详细运行日志。
📁 静态文件网关 fileGateway.php(高并发点播资源托管)
网关简介
轻量级 HTTP 静态文件服务器,统一托管所有静态资源。对于 HLS、fMP4、MP4 等基于文件的协议,这是推荐的播放方式。支持横向+纵向扩容,可支撑大规模点播并发。
核心能力
- 📁 统一托管所有静态资源(录制文件 + 播放页面)
- 🔗 横向扩容:多实例部署,负载均衡分发流量
- 🔗 纵向扩容:多层级级联(如 Nginx + fileGateway + 后端存储)
- 📊 内置访问日志,便于统计分析
- 🚀 纯 PHP 实现,轻量无依赖
- 🧠 自适应 IO:Linux epoll 单进程 20,000+ 并发,Windows select 兼容
- 💡 最佳实践:将 HLS/fMP4/MP4 播放路径指向此网关集群,源站只负责写入文件,实现读写分离
启动命令(多进程/多实例分流)
# 基本启动(托管当前目录,端口 8100)
php fileGateway.php 0.0.0.0 8100
# 【横向扩容】多实例部署
php fileGateway.php 0.0.0.0 8100
php fileGateway.php 0.0.0.0 8101
php fileGateway.php 0.0.0.0 8102
# Linux/macOS 后台运行多个实例
php fileGateway.php 0.0.0.0 8100 > /dev/null 2>&1 &
php fileGateway.php 0.0.0.0 8101 > /dev/null 2>&1 &
php fileGateway.php 0.0.0.0 8102 > /dev/null 2>&1 &
Nginx 反向代理配置示例
upstream filegateway_cluster {
# 横向扩容:多个 fileGateway 实例
server 127.0.0.1:8100;
server 127.0.0.1:8101;
server 127.0.0.1:8102;
}
server {
listen 80;
server_name media.example.com;
location ~* \.(m3u8|ts|mp4|m4s|flv|html|css|js)$ {
proxy_pass http://filegateway_cluster;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
访问地址规范
http://网关IP:端口/{文件相对路径}
示例:
# Web 播放页面(通过静态网关访问)
http://127.0.0.1:8100/index.html # FLV直播页面
http://127.0.0.1:8100/play.html # HLS直播页面
http://127.0.0.1:8100/mp4.html # MP4点播页面
http://127.0.0.1:8100/video.html # FLV点播页面
http://127.0.0.1:8100/play_merge.html # fMP4分片点播页面
# 录制资源访问
http://127.0.0.1:8100/hls/live/stream/index.m3u8
http://127.0.0.1:8100/mp4/live/stream/output_merge/init.mp4
http://127.0.0.1:8100/mp4/live/stream/output_merge/stream_full.mp4
http://127.0.0.1:8100/flv/live/stream/20240101_120000.flv
📡 推流接入教程
项目同时支持 RTMP 和 HTTP-FLV 两种主流推流协议,兼容 OBS、FFmpeg 等各类推流工具。
一、RTMP 推流
地址格式
rtmp://127.0.0.1:1935/{应用名}/{频道名}
应用名:示例live频道名:示例stream- 仅支持英文、数字命名
推流示例
-
OBS Studio 推流
- 下载安装 OBS Studio
- 设置 → 推流 → 服务器:
rtmp://127.0.0.1:1935/live - 串流密钥:
stream - 开始推流
-
FFmpeg 循环推流
ffmpeg -re -stream_loop -1 -i "video.mp4" -vcodec h264 -acodec aac -f flv rtmp://127.0.0.1:1935/live/stream
二、HTTP-FLV 推流
地址格式
http://127.0.0.1:8501/{应用名}/{频道名}
应用名、频道名规则同 RTMP,仅支持英文、数字
推流示例(FFmpeg)
# 本地 FLV 文件推流
ffmpeg -re -i test.flv -c:v libx264 -c:a aac -f flv http://127.0.0.1:8501/live/stream
# 本地 MP4 文件循环推流
ffmpeg -re -stream_loop -1 -i video.mp4 -c:v libx264 -c:a aac -f flv http://127.0.0.1:8501/live/stream
当然你也可以使用本项目提供的客户端推流,支持flv/mp4静态文件,推流命令如下:
php pusher.php test.flv http://127.0.0.1:8501/live/stream 1.0 --no-reconnect
或者
php pusher.php test.mp4 http://127.0.0.1:8501/live/stream 1.0 --no-reconnect
📺 播放地址汇总 & 播放工具
实时直播地址
| 协议 | 访问链接 | 说明 | 分发建议 |
|---|---|---|---|
| RTMP | rtmp://127.0.0.1:1935/live/stream |
原生RTMP播放器、ffplay 可用 | 源站直接提供 |
| HTTP-FLV | http://127.0.0.1:8501/live/stream.flv |
浏览器低延迟播放、ffplay 可用 | 通过 FLV 网关集群分发 |
| WebSocket-FLV | ws://127.0.0.1:8501/live/stream.flv |
WebSocket流式播放 | 通过 FLV 网关集群分发 |
| HLS | http://{fileGateway_IP}:8100/hls/live/stream/index.m3u8 |
安卓/iOS移动端首选 | 必须通过 fileGateway 分发 |
点播回放地址(录制完成后)
| 文件类型 | 访问地址(必须通过 fileGateway) | 说明 |
|---|---|---|
| 合并MP4点播 | http://{fileGateway_IP}:8100/mp4/live/stream/output_merge/stream_full.mp4 |
|
| 混合fMP4分片点播(MSE) | http://{fileGateway_IP}:8100/mp4/live/stream/output_merge/init.mp4 |
|
| 分离音视频fMP4点播 | http://{fileGateway_IP}:8100/mp4/live/stream/output_separate/audio_init.mp4 |
|
| 原始FLV点播 | http://{fileGateway_IP}:8100/flv/live/stream/20240101_120000.flv |
高并发场景下:必须使用静态文件网关集群(如
127.0.0.1:8100/8101/8102),通过负载均衡分发,实现静态资源读写分离。
Web 播放页面
| 页面用途 | 访问地址(推荐通过 fileGateway) | 说明 |
|---|---|---|
| FLV直播播放 | http://{fileGateway_IP}:8100/index.html |
HTTP-FLV低延迟直播 |
| HLS直播播放 | http://{fileGateway_IP}:8100/play.html |
HLS移动端兼容直播 |
| 合并MP4点播 | http://{fileGateway_IP}:8100/mp4.html |
完整MP4文件点播 |
| 原始FLV点播 | http://{fileGateway_IP}:8100/video.html |
FLV原生文件点播 |
| fMP4分片点播 | http://{fileGateway_IP}:8100/play_merge.html |
同时支持音视频混合切片和分离切片播放 |
命令行播放工具(ffplay)
项目全链路兼容 ffplay 播放器,可直接拉取各类流地址播放:
# 播放 RTMP 流
ffplay rtmp://127.0.0.1:1935/live/stream
# 播放 源站 HTTP-FLV 流
ffplay http://127.0.0.1:8501/live/stream.flv
# 播放 FLV 网关转发流
ffplay http://127.0.0.1:8080/live/stream.flv
# 播放 HLS 流
ffplay http://127.0.0.1:8100/hls/live/stream/index.m3u8
# 播放点播 FLV/MP4 文件
ffplay http://127.0.0.1:8100/flv/live/stream/20240101_120000.flv
ffplay http://127.0.0.1:8100/mp4/live/stream/output_merge/stream_full.mp4
💾 实时录制说明
录制机制(三任务独立并行)
推流开始后,源站同时启动三个独立并行的录制任务,互不阻塞:
┌─────────────────────────────────────────────────┐
│ RTMP / HTTP-FLV 双协议推流 │
└─────────────────────┬───────────────────────────┘
│
┌─────────────────────┼───────────────────────────┐
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ FLV录制 │ │ fMP4切片 │ │ HLS切片 │
│ (实时裸流) │ │ (实时分片) │ │ (实时分片) │
└───────┬───────┘ └───────┬───────┘ └───────┬───────┘
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ 完整FLV文件 │ │ fMP4分片集 │ │ TS分片集 │
│ (直播结束) │ │ (直播中) │ │ + m3u8索引 │
└───────────────┘ └───────┬───────┘ └───────────────┘
│
│ 直播结束后自动合并
▼
┌───────────────┐
│ 完整MP4文件 │
│ (点播回放) │
└───────────────┘
任务独立性说明
| 录制任务 | 实时性 | 产出物 | 用途 | 独立开关 |
|---|---|---|---|---|
| FLV录制 | 实时 | 完整FLV文件 | 原始格式备份、VLC/ffplay播放 | FLV_TO_RECORD |
| fMP4切片 | 实时 | fMP4分片 → 结束后合并为MP4 | 浏览器MSE播放、点播回放 | FLV_TO_MP4 |
| HLS切片 | 实时 | TS分片 + m3u8 | 移动端兼容、HLS直播 | FLV_TO_HLS |
📁 项目目录结构
rtmp_server/
├── flv/ # FLV原始录制文件(FLV_TO_RECORD)
├── mp4/ # MP4/fMP4转码产物(FLV_TO_MP4)
├── hls/ # HLS TS分片+m3u8索引(FLV_TO_HLS)
├── MediaServer/ # RTMP核心协议、推拉流会话逻辑
├── Root/ # 底层异步IO、Socket事件驱动(含epoll自适应)
├── SabreAMF/ # AMF0/AMF3编解码
├── server.php # 源站启动入口
├── fileGateway.php # 静态文件网关(支持epoll,20k+并发)
├── flvGateway.php # FLV直播网关(支持epoll,20k+并发)
├── pusher.php # FLV静态文件推流客户端
├── *.html # Web播放页面
└── README.md
📈 并发性能实测
以下测试均在 Docker 容器内、ulimit -n 65535 的相同环境下完成,使用同一压测脚本并发 20,000 个客户端,每个客户端持续拉流 5 秒。
主服务器(RTMP源站)
当前容器 pids.max: unknown
启动一批:1000 个客户端 (共 20 批次)
所有客户端已启动,等待完成...
===== 结果 =====
成功: 17,330
失败: 2,670
FLV 直播网关
当前容器 pids.max: unknown
启动一批:1000 个客户端 (共 20 批次)
所有客户端已启动,等待完成...
===== 结果 =====
成功: 19,923
失败: 77
静态文件网关
并发数: 20,000
每客户端持续时间: 5s
批次大小: 1000
===== 结果 =====
成功: 20,000
失败: 0
说明:
- 主服务器因承载 RTMP/HTTP-FLV 双协议推流、多协议转封装等业务逻辑,单进程仍稳定支撑 17,330 并发成功,少量失败源于测试瞬间端口冲撞。
- FLV 网关专注于纯流转发,成功率达到 99.6%(19,923/20,000),接近单机 TCP 端口池上限。
- 静态文件网关极致轻量,20,000 并发全部成功,零失败。
- 所有组件均自适应操作系统:Linux 下自动启用 epoll,突破传统 select 的 1024 限制。
❓ 常见问题 FAQ
1. 单进程为什么能支持 20,000+ 并发?
- Linux:当服务器检测到已安装
event扩展,自动启用 epoll 事件驱动模型,不再受传统select的 1024 文件描述符限制,单进程轻松承载 20,000+ 连接。 - Windows:由于缺少
event扩展,自动回退为select模型,单进程连接数有限(~256),建议部署多个实例。 - 性能实测:在 Docker 容器(ulimit -n 65535)中,静态文件网关 20,000 并发零失败,FLV 网关成功率 99.6%。
2. 网关如何支撑更高并发?
| 扩容方式 | 说明 | 示例 |
|---|---|---|
| 单进程高性能 | Linux epoll 模式单进程即可支撑 20k+ | 一个 fileGateway 进程扛 20,000 静态请求 |
| 横向扩容 | 同层部署多实例,负载均衡 | 3 个 fileGateway 实例 → 60,000+ 并发 |
| 纵向扩容 | 多层级级联 | 一级网关 → 二级网关 → 三级网关… |
| 组合扩容 | 横向+纵向结合 | 每层 3 实例 × 3 层级 = 理论 180,000+ 并发 |
3. 什么时候需要部署网关?
| 并发场景 | 部署方案 |
|---|---|
| 低并发(< 500) | 仅源站即可,源站内置 HTTP 服务直接对外 |
| 中等并发(500 - 5,000) | 源站 + 单层网关(1~2 个实例即可) |
| 高并发(> 5,000) | 源站 + 多级网关集群(每层可横向扩展) |
4. FLV网关和静态文件网关的区别?
| 网关类型 | 用途 | 处理的资源类型 | 扩展方式 |
|---|---|---|---|
| FLV直播网关 | 直播流分发 | HTTP-FLV 实时流 | 横向+纵向,支持级联 |
| 静态文件网关 | 静态资源统一托管 | HLS/fMP4/MP4/FLV静态文件 + Web播放页面 | 横向+纵向,可结合 Nginx |
5. 如何验证网关并发能力?
# 使用内置压测脚本(20000 并发)
sh play.sh
# 或使用 ab (Apache Bench) 测试静态文件网关
ab -n 10000 -c 500 http://127.0.0.1:8100/index.html
# 使用 wrk 测试 FLV 网关
wrk -t4 -c1000 -d30s http://127.0.0.1:8080/live/stream.flv
工具包
已将本本项目的协议转换独立成为一个工具包xiaosongshu/flv2mp4,地址https://github.com/2723659854/flv2mp4 ,支持flv,mp4,hls转码,flv和file网关,以及flv静态文件推流客户端。
📄 开源协议
本项目仅限学习、技术研究使用;商用落地风险由使用者自行承担。
⚠️ 免责声明
- 部分开源代码取自开源社区,涉及版权可联系作者删除;
- 项目完全开源免费,仅用于技术交流;
- 用户任何商用/违法使用造成的法律后果,作者不承担连带责任。
📧 联系方式
- 📬 Email: 2723659854@qq.com
- 🐙 GitHub: 2723659854
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)