纯PHP编写rtmp直播服务器
·
RTMP Server
一个基于纯 PHP 开发的轻量级 RTMP 直播服务器,无需 Nginx 或其他流媒体软件即可轻松搭建直播服务。
✨ 功能特性
- 🎥 RTMP 推流/拉流 - 支持标准的 RTMP 协议
- 📡 HTTP-FLV / WebSocket-FLV - 支持浏览器端低延迟播放
- 🧩 HLS 输出 - 自动生成 M3U8 + TS 切片,兼容移动端
- 💾 自动录制 - 推流时自动录制,结束后保存为 MP4 文件
- 🖥️ 内置播放器 - 提供简单的 Web 播放页面,开箱即用
- 🐳 Docker 支持 - 一键启动开发环境,无需手动配置扩展
- ⚡ 纯 PHP 实现 - 无需额外安装 Nginx、SRS 等流媒体服务器
📋 环境要求
- PHP >= 8.1(CLI 模式)
- 已安装并启用以下 PHP 扩展:
socketspcntl(Linux/macOS 可选)
🚀 快速开始
安装
composer create-project xiaosongshu/rtmp_server
cd rtmp_server
启动服务
php server.php
停止服务
| 系统 | 命令 |
|---|---|
| Windows | Ctrl + C |
| Linux / macOS | ps aux | grep server.phpkill -9 <PID> |
🔧 配置说明
端口配置
默认使用以下端口,可在 server.php 中修改:
| 端口 | 协议 | 用途 |
|---|---|---|
| 1935 | RTMP | 推流/拉流 |
| 8501 | HTTP/WebSocket | FLV 播放 |
| 80 | HTTP | HLS 播放 + Web 页面 + MP4回放 |
开发环境
方式一:PHPStudy(推荐新手)
- 安装 PHPStudy
- 切换 PHP 版本至 8.1
- 在软件管理中安装
sockets扩展 - 进入项目目录启动服务
方式二:Docker(推荐,已集成所有依赖)
docker-compose up -d
📡 推流指南
推流地址
rtmp://127.0.0.1:1935/{应用名}/{频道名}
{应用名}:应用名称,如live{频道名}:频道名称,如stream- 仅支持英文和数字
推流工具
使用 OBS Studio
- 下载 OBS Studio
- 设置 → 推流 → 选择自定义 RTMP 服务器
- 服务器地址:
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
参数说明:
-re:以实时速率读取-stream_loop -1:无限循环-i:输入视频文件-vcodec h264:H.264 视频编码-acodec aac:AAC 音频编码-f flv:FLV 封装格式
📺 拉流指南
拉流地址
| 协议 | 地址 | 说明 |
|---|---|---|
| RTMP | rtmp://127.0.0.1:1935/live/stream |
原生 RTMP |
| HTTP-FLV | http://127.0.0.1:8501/live/stream.flv |
HTTP 协议 |
| WebSocket-FLV | ws://127.0.0.1:8501/live/stream.flv |
WebSocket 协议 |
| HLS | http://127.0.0.1:80/hls/live/stream/index.m3u8 |
移动端推荐 |
播放工具
- VLC:打开网络串流,直接输入拉流地址
- 内置网页播放器:
💾 自动录制
工作原理
- 推流开始 → 自动开始录制
- 推流结束 → 自动保存为 fMP4/mp4 文件
- 文件位置:
./mp4/{应用名}/{频道名}/{频道名_full}.mp4
注意事项
- ✅ 录制的文件为标准 fMP4 格式
- ✅ 支持拖拽播放和 seek 操作
- ⚠️ 相同路径的推流会覆盖之前的录制文件
- ⚠️ 服务器不会自动删除录制文件,请根据业务需要自行清理
📁 目录结构
rtmp_server/
├── mp4/ # 录制文件存储目录
│ └── {app}/{name} # 直播频道节目目录
├── hls/ # HLS 切片存储目录
│ └── {app}/{name}/ # 切片文件
├── MediaServer/ # 核心服务代码
├── server.php # 服务入口
└── README.md # 项目文档
└── .... # 项目其他核心文件
❓ 常见问题
1. 运行时报缺少扩展
原因:PHP CLI 模式与 FPM 模式扩展配置可能不同
解决:
- 检查
php -m确认已安装的扩展 - 安装缺失扩展(如
sockets) - 使用 Docker 环境可避免此问题
2. 端口被占用
解决:
- 检查端口占用:
netstat -ano | findstr <端口号> - 修改
server.php中的端口配置 - 同步修改内置播放页面的端口配置
3. HLS 切片覆盖问题
现象:相同路径的直播会覆盖之前的 HLS 文件
解决:
- 推流时使用不同的频道名
- 或自行实现清理逻辑
4. 录屏文件覆盖问题
现象:相同路径的直播会覆盖之前的 mp4 文件
解决:
- 推流时使用不同的频道名
- 或自行实现清理逻辑
📄 开源协议
本项目仅供学习交流使用,请勿用于商业用途。
⚠️ 免责声明
- 项目部分代码来源于网络,如有侵权请联系删除
- 本项目完全开源,旨在技术交流
- 使用者需自行承担使用本项目的法律风险
- 因使用本项目造成的任何损失,作者不承担责任
📧 联系作者
如有问题或建议,欢迎通过邮件联系:
📧 2723659854@qq.com
更多推荐


所有评论(0)