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 扩展:
    • sockets
    • pcntl(Linux/macOS 可选)

🚀 快速开始

安装

composer create-project xiaosongshu/rtmp_server
cd rtmp_server

启动服务

php server.php

停止服务

系统 命令
Windows Ctrl + C
Linux / macOS ps aux | grep server.php
kill -9 <PID>

🔧 配置说明

端口配置

默认使用以下端口,可在 server.php 中修改:

端口 协议 用途
1935 RTMP 推流/拉流
8501 HTTP/WebSocket FLV 播放
80 HTTP HLS 播放 + Web 页面 + MP4回放

开发环境

方式一:PHPStudy(推荐新手)
  1. 安装 PHPStudy
  2. 切换 PHP 版本至 8.1
  3. 在软件管理中安装 sockets 扩展
  4. 进入项目目录启动服务
方式二:Docker(推荐,已集成所有依赖)
docker-compose up -d

📡 推流指南

推流地址

rtmp://127.0.0.1:1935/{应用名}/{频道名}
  • {应用名}:应用名称,如 live
  • {频道名}:频道名称,如 stream
  • 仅支持英文和数字

推流工具

使用 OBS Studio
  1. 下载 OBS Studio
  2. 设置 → 推流 → 选择自定义 RTMP 服务器
  3. 服务器地址:rtmp://127.0.0.1:1935/live
  4. 串流密钥:stream
  5. 开始推流
使用 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 移动端推荐

播放工具

💾 自动录制

工作原理

  1. 推流开始 → 自动开始录制
  2. 推流结束 → 自动保存为 fMP4/mp4 文件
  3. 文件位置./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

更多推荐