# flv2mp4
**Repository Path**: vanve/flv2mp4
## Basic Information
- **Project Name**: flv2mp4
- **Description**: No description available
- **Primary Language**: PHP
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-08-04
- **Last Updated**: 2026-08-04
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# FLV ↔ MP4 / HLS 转换工具 + H264 重编码工具
🇨🇳 中文 •
🇬🇧 English
## 项目简介
纯 PHP 8.1+ 实现的轻量级媒体处理工具包,**零外部依赖(无需 FFmpeg)**。
支持 FLV、FMP4、MP4、HLS 互转,直播流网关、推流、拉流、转播,以及 **H.264 解码 + 缩放 + 重新编码**(Baseline Profile)。
---
## 📋 目录
- [项目简介](#项目简介)
- [核心功能](#-核心功能)
- [环境依赖](#环境依赖)
- [安装](#-安装)
- [快速开始](#-快速开始)
- [高级功能](#-高级功能)
- [FLV 直播网关](#flv-直播网关)
- [静态文件网关](#静态文件网关)
- [推流客户端](#推流客户端)
- [拉流客户端](#拉流客户端)
- [直播转发(转播)](#直播转发转播)
- [测试与播放](#-测试推流播放)
- [应用场景](#-应用场景)
- [H.264 重编码详解](#-h264-解码--缩放--重编码)
- [FLV → HLS 多码率示例](#flv-hls)
- [FLV → FLV 重编码示例](#flv-flv)
- [MP4 → MP4 重编码示例](#mp4-mp4)
- [水印工具](#水印生成工具)
- [技术说明](#-技术说明)
- [开源协议 & 免责声明](#开源协议--免责声明)
- [联系方式](#-联系方式)
---
---
## 🎯 核心功能
| 功能 | 方向 | 说明 |
|------|------|------|
| 封装转换 | FLV ↔ MP4 / FMP4 | 生成标准 MP4 或分离的 fMP4 切片(兼容 MSE) |
| HLS 切片 | FLV → HLS | 生成 M3U8 + TS 切片,兼容 hls.js、VLC 等 |
| HLS 还原 | HLS → FLV | 将 HLS 切片合并还原为单 FLV 文件 |
| MP4 ↔ FLV | MP4 → FLV / FMP4 → FLV | 多容器格式互转 |
| 直播网关 | FLV 网关 | 高性能多级转发,支持高并发连接 |
| 静态文件服务 | HTTP 文件网关 | 轻量级文件服务器,支持目录浏览 |
| 推流客户端 | FLV / MP4 → RTMP/HTTP-FLV/WS-FLV | 将静态文件以伪直播方式推流 |
| 拉流客户端 | RTMP/HTTP-FLV/WS-FLV → FLV | 从直播流拉取并保存为本地 FLV |
| 转播客户端 | 多协议输入 → 多协议输出 | 一路拉流,多路转发 |
| **H.264 重编码** | 解码 → 缩放 → 编码 | 支持 Baseline Profile,为多码率 HLS 提供核心支持 |
---
## 环境依赖
| 依赖项 | 说明 |
|--------------|------------------------|
| PHP | ≥ 8.1(**仅 CLI 命令行模式**) |
| `sockets` 扩展 | **必需**,提供底层 Socket 通信 |
| `gd` 扩展 | **可选**,用于从 PNG/JPG 图片生成水印。如果未安装,将自动降级为内置点阵字体模式。 |
💡 **无需 FFmpeg,无需任何第三方二进制程序,全部纯 PHP 实现。**
---
## 🚀 安装
```bash
composer require xiaosongshu/flv2mp4
```
---
## 📚 快速开始
```php
debug = true;
$gateway->start();
```
启动flv网关
```bash
php flvGateway.php
```
### 静态文件网关
轻量级 HTTP 文件服务器,支持目录浏览开关。新建文件`fileGateway.php`,内容如下:
```php
debug = true;
$server->start();
```
启动file网关
```bash
php fileGateway.php
```
### 推流客户端
支持 HTTP-FLV、WS-FLV、RTMP 三种协议,倍速推流、断线重连。新建文件`pusher.php`,内容如下:
```php
require_once __DIR__ . '/vendor/autoload.php';
ini_set('memory_limit', '2048M');
$pusher = new \Xiaosongshu\Flv2mp4\Manage\PusherManage(__DIR__."/test.flv", "http://127.0.0.1:8501/live/stream", 1.0, false);
$pusher->start();
```
启动推流
```bash
php pusher.php
```
### 拉流客户端
从直播流拉取并保存为本地 FLV,适合录制或调试。新建文件`puller.php`,内容如下:
```php
require_once __DIR__ . '/vendor/autoload.php';
ini_set('memory_limit', '2048M');
$puller = new \Xiaosongshu\Flv2mp4\Manage\PullerManage("ws://127.0.0.1:8501/live/stream.flv", __DIR__."/pull_record.flv", 0, false);
$puller->start();
```
启动拉流客户端
```bash
php puller.php
```
### 直播转发(转播)
一路拉流,同时转发至多个目标地址(支持协议混用)。新建文件`forward.php`,内容如下:
```php
require_once __DIR__ . '/vendor/autoload.php';
ini_set('memory_limit', '2048M');
$forwarder = new \Xiaosongshu\Flv2mp4\Flv\FlvForwardClient("http://127.0.0.1:8501/a/b.flv", ["rtmp://127.0.0.1:1935/c/d","ws://127.0.0.1:8501/c/e"], 0, true);
$forwarder->start();
```
启动转播客户端
```bash
php forward.php
```
---
## 🧪 测试&推流&播放
| 输出格式 | 推荐播放器 | 参考文件 |
|----------|-----------------|------------------------------|
| MP4 | HTML5 `