# 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 `