Skip to content

Commit 63e6af1

Browse files
committed
update README.md
1 parent 0e43705 commit 63e6af1

File tree

1 file changed

+326
-19
lines changed

1 file changed

+326
-19
lines changed

README.md

Lines changed: 326 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,342 @@
1-
nginx-rtmp-sample
2-
=================
1+
# nginx-rtmp-sample
32

4-
linux/unix下配置比较容易,相信大家做起来应该比较顺利,再加上网上资料也非常多,而windows下配置会面临更多的问题,所以这里主要在windows下编译的带rtmp的nginx的配置实例..
3+
Windows 平台下 Nginx-RTMP 流媒体服务器配置示例
54

6-
**具体配置搭建过程,也可以参考视频教程操作:**
5+
## 项目简介
76

8-
[apache+php与nginx+php环境的搭建](http://www.tudou.com/listplay/jGOJ31wJFck/zLXd5x6Yyy8.html)
7+
nginx-rtmp-sample 是一个在 Windows 平台下配置和使用 Nginx-RTMP 流媒体服务器的完整示例项目。虽然 Linux/Unix 下的配置资料丰富,但 Windows 下配置会面临更多问题,本项目专注于提供 Windows 平台下的完整解决方案,包括编译好的 Nginx-RTMP 可执行文件、配置文件示例和使用说明。
98

10-
[nginx_rtmp在windows下编译及点播,直播,服务端录制的配置](http://www.tudou.com/listplay/jGOJ31wJFck/w-oyi3XnKe0.html)
9+
## 技术栈
1110

12-
[ffmpeg+jwplay+nginx负载均衡配置](http://www.tudou.com/listplay/jGOJ31wJFck/W4gXkEeFoiw.html)
11+
- **Web 服务器**: Nginx (Windows 版本)
12+
- **流媒体模块**: nginx-rtmp-module
13+
- **视频处理**: FFmpeg
14+
- **Web 技术**: PHP (FastCGI), HTML, JavaScript
15+
- **播放器**: JW Player
16+
- **流媒体协议**: RTMP, HLS (HTTP Live Streaming)
1317

18+
## 功能特性
1419

15-
###Transcoding streams
20+
### 核心功能
21+
- **RTMP 直播推流**:支持 OBS、FFmpeg 等工具推流
22+
- **RTMP 直播拉流**:支持多种播放器观看直播
23+
- **HLS 直播**:自动切片生成 m3u8 和 ts 文件
24+
- **视频点播(VOD)**:支持本地和远程视频点播
25+
- **服务端录制**:自动录制直播流到本地
26+
- **流转码**:使用 FFmpeg 进行实时转码
27+
- **多码率推流**:支持同一源流推送到多个目标
28+
- **负载均衡**:Nginx upstream 配置实现负载均衡
29+
- **访问控制**:IP 白名单/黑名单控制推流和播放权限
30+
- **统计信息**:实时流媒体统计信息展示
1631

17-
Encoding\ffmpeg -i rtmp://127.0.0.1/live1/1080 -vcodec flv -acodec copy -s 360x360 -f flv rtmp://127.0.0.1/live3/480
18-
pause
32+
### 扩展功能
33+
- PHP 集成(FastCGI)
34+
- 事件通知回调(on_play, on_publish)
35+
- 流元数据处理
36+
- 多种转码预设配置
1937

20-
Encoding\ffmpeg -i rtmp://127.0.0.1/live1/1080 -vcodec libx264 -preset veryfast -x264opts nal-hrd=cbr:fore-cfr=1:keyint=60 -b:v 3000k -bufsize 3000k -s 1280x720 -sws_flags spline -r 30 -acodec copy -f flv rtmp://127.0.0.1/live2/720
21-
pause
38+
## 项目结构
2239

23-
--------
40+
```
41+
nginx-rtmp-sample/
42+
├── nginx-rtmp.exe # 主 Nginx-RTMP 可执行文件
43+
├── nginx-rtmp(illuspas).exe # illuspas 编译版本
44+
├── nginx-rtmp(xaccc).exe # xaccc 编译版本
45+
├── ffmpeg.7z # FFmpeg 工具包(压缩)
46+
├── RunHiddenConsole.exe # 后台运行工具
47+
├── conf/ # 配置文件目录
48+
│ ├── nginx.conf # 主配置文件
49+
│ ├── nginx.conf.b # 备用配置
50+
│ ├── nginx.conf.upstream # 负载均衡配置
51+
│ ├── nginx.new.conf # 新版配置示例
52+
│ └── conf.d/ # 模块化配置
53+
│ ├── http.conf # HTTP 服务配置
54+
│ ├── http2.conf # HTTP 配置变体 2
55+
│ ├── http3.conf # HTTP 配置变体 3
56+
│ ├── http4.conf # 负载均衡 HTTP 配置
57+
│ ├── rtmp.conf # RTMP 主配置
58+
│ ├── rtmp2.conf # RTMP 配置变体 2
59+
│ ├── rtmp3.conf # RTMP 配置变体 3
60+
│ ├── rtmp4.conf # RTMP 配置变体 4
61+
│ ├── rtmp5.conf # RTMP 配置变体 5
62+
│ ├── rtmp6.conf # RTMP 配置变体 6
63+
│ ├── rtmp7.conf # RTMP 配置变体 7
64+
│ ├── mail.conf # Mail 代理配置
65+
│ └── upstream.conf # Upstream 配置
66+
├── html/ # Web 根目录
67+
│ ├── index.html # 主页
68+
│ ├── stat.xsl # 统计信息样式
69+
│ ├── vodtest.html # 点播测试页面
70+
│ ├── transcoding.html # 转码测试页面
71+
│ ├── client/ # 客户端测试页面
72+
│ ├── jwplayer/ # JW Player 播放器
73+
│ ├── media/ # 媒体文件目录
74+
│ │ ├── hls/ # HLS 切片存储
75+
│ │ └── record/ # 录制文件存储
76+
│ └── test/ # 测试页面
77+
├── batch_file/ # 批处理脚本
78+
├── start_nginx.bat # 启动 Nginx
79+
├── stop_nginx.bat # 停止 Nginx
80+
├── reload_nginx.bat # 重载配置
81+
├── start_phpcgi.bat # 启动 PHP-CGI
82+
├── stop_phpcgi.bat # 停止 PHP-CGI
83+
├── build.bat # 构建脚本
84+
├── php.ini # PHP 配置文件
85+
├── contrib/ # 第三方库
86+
├── nginx-test/ # 测试工具
87+
└── temp/ # 临时文件目录
88+
```
2489

90+
## RTMP 应用配置说明
2591

26-
ffmpeg -i rtmp://127.0.0.1/big/1080 -vcodec libx264 -preset faster -x264opts nal-hrd=cbr:force-cfr=1:keyint=60 -b:v 3000k -maxrate 3000k -bufsize 3000k -s 1280x720 -sws_flags spline -r 30 -acodec copy -f flv rtmp://127.0.0.1/small/720
92+
### 1. myapp - 综合应用
93+
- **直播流**: 支持 RTMP 推流和播放
94+
- **HLS 支持**: 自动生成 HLS 切片
95+
- **录制功能**: 30 秒间隔录制
96+
- **事件回调**: on_play 和 on_publish 通知
2797

28-
ffmpeg -i rtmp://127.0.0.1/big/1080 -vcodec libx264 -preset veryfast -b:v 2000k -maxrate 2000k -bufsize 2000k -s 1280x720 -sws_flags lanczos -r 60 -acodec copy -f flv rtmp://127.0.0.1/small/720
98+
### 2. vod - 本地点播
99+
- 从本地 `html/media` 目录播放视频文件
29100

30-
ffmpeg -i rtmp://127.0.0.1/big/1080 -vcodec flv -acodec copy -s 64x64 -f flv rtmp://127.0.0.1/small/720
101+
### 3. vod_http - HTTP 点播
102+
- 从远程 HTTP 服务器播放视频
31103

32-
--------
33-
###Stream your X screen through RTMP
104+
### 4. vod_mirror - 镜像点播
105+
- 优先本地,失败则从远程获取
34106

35-
ffmpeg -f x11grab -follow_mouse centered -r 25 -s cif -i :0.0 -f flv rtmp://127.0.0.1/live1/screen
107+
### 5. live - 受限直播
108+
- 仅允许 127.0.0.1 推流
109+
- 所有人可观看
110+
- 自动录制(最大 100MB)
111+
- 推流到 live2 应用
112+
113+
### 6. live2 - 开放直播
114+
- 允许所有人推流和播放
115+
116+
## 依赖要求
117+
118+
- **操作系统**: Windows XP/7/8/10/11
119+
- **FFmpeg**: 已包含在 ffmpeg.7z 中
120+
- **PHP**: 可选(如需 PHP 功能)
121+
- **播放器**: 支持 RTMP/HLS 的播放器(VLC、JW Player 等)
122+
123+
## 安装和运行
124+
125+
### 1. 解压 FFmpeg
126+
127+
```bash
128+
# 解压 ffmpeg.7z 到当前目录或指定位置
129+
# 确保 ffmpeg.exe 在系统 PATH 中或项目 Encoding 目录下
130+
```
131+
132+
### 2. 启动 Nginx-RTMP 服务器
133+
134+
**方式一:前台运行**
135+
```bash
136+
# 双击运行
137+
nginx-rtmp.exe
138+
139+
# 或命令行运行
140+
nginx-rtmp.exe -c conf/nginx.conf
141+
```
142+
143+
**方式二:后台运行(推荐)**
144+
```bash
145+
# 使用批处理脚本启动
146+
start_nginx.bat
147+
148+
# 或使用隐藏控制台工具
149+
RunHiddenConsole.exe nginx-rtmp.exe
150+
```
151+
152+
### 3. 启动 PHP-CGI(可选)
153+
154+
```bash
155+
# 如需 PHP 功能,运行
156+
start_phpcgi.bat
157+
```
158+
159+
### 4. 测试服务
160+
161+
- **Web 界面**: http://localhost:80/
162+
- **统计信息**: http://localhost:80/stat
163+
- **RTMP 端口**: rtmp://localhost:1935/
164+
165+
## 使用说明
166+
167+
### 直播推流
168+
169+
**使用 FFmpeg 推流**
170+
```bash
171+
# 推流到 live 应用
172+
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://127.0.0.1/live/stream
173+
174+
# 推流到 myapp 应用
175+
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://127.0.0.1/myapp/stream
176+
```
177+
178+
**使用 OBS 推流**
179+
- 服务器: rtmp://127.0.0.1/live
180+
- 串流密钥: stream(或自定义流名称)
181+
182+
### 直播拉流
183+
184+
**使用 VLC 播放器**
185+
```
186+
rtmp://127.0.0.1/live/stream
187+
```
188+
189+
**使用 FFplay 播放**
190+
```bash
191+
ffplay rtmp://127.0.0.1/live/stream
192+
```
193+
194+
**使用 Web 播放器**
195+
- 访问: http://localhost/client/
196+
- 输入流地址播放
197+
198+
### HLS 播放
199+
200+
```
201+
http://localhost/media/hls/stream.m3u8
202+
```
203+
204+
### 视频点播
205+
206+
```bash
207+
# 播放本地视频(文件需放在 html/media 目录)
208+
rtmp://127.0.0.1/vod/video.mp4
209+
210+
# 播放 HTTP 视频
211+
rtmp://127.0.0.1/vod_http/video.mp4
212+
```
213+
214+
## 视频转码示例
215+
216+
### 1. 基本转码
217+
218+
```bash
219+
# 转码为 480p
220+
ffmpeg -i rtmp://127.0.0.1/live1/1080 \
221+
-vcodec flv -acodec copy -s 360x360 \
222+
-f flv rtmp://127.0.0.1/live3/480
223+
```
224+
225+
### 2. H.264 转码(高质量)
226+
227+
```bash
228+
# 转码为 720p
229+
ffmpeg -i rtmp://127.0.0.1/live1/1080 \
230+
-vcodec libx264 -preset veryfast \
231+
-x264opts nal-hrd=cbr:force-cfr=1:keyint=60 \
232+
-b:v 3000k -bufsize 3000k \
233+
-s 1280x720 -sws_flags spline -r 30 \
234+
-acodec copy -f flv rtmp://127.0.0.1/live2/720
235+
```
236+
237+
### 3. 多码率转码
238+
239+
```bash
240+
# 转码为多个分辨率
241+
ffmpeg -i rtmp://127.0.0.1/big/1080 \
242+
-vcodec libx264 -preset faster \
243+
-x264opts nal-hrd=cbr:force-cfr=1:keyint=60 \
244+
-b:v 3000k -maxrate 3000k -bufsize 3000k \
245+
-s 1280x720 -sws_flags spline -r 30 \
246+
-acodec copy -f flv rtmp://127.0.0.1/small/720
247+
```
248+
249+
### 4. 屏幕直播(Linux/Mac)
250+
251+
```bash
252+
# 推送桌面画面到 RTMP 服务器
253+
ffmpeg -f x11grab -follow_mouse centered \
254+
-r 25 -s cif -i :0.0 \
255+
-f flv rtmp://127.0.0.1/live1/screen
256+
```
257+
258+
## 配置管理
259+
260+
### 切换配置文件
261+
262+
主配置文件 `conf/nginx.conf` 通过 include 指令加载不同的配置组合:
263+
264+
```nginx
265+
# HTTP 配置(三选一)
266+
include conf.d/http.conf;
267+
# include conf.d/http2.conf;
268+
# include conf.d/http3.conf;
269+
270+
# RTMP 配置
271+
include conf.d/rtmp.conf;
272+
273+
# 负载均衡配置(可选)
274+
# include conf.d/http4.conf;
275+
```
276+
277+
### 重载配置
278+
279+
```bash
280+
# 使用批处理脚本
281+
reload_nginx.bat
282+
283+
# 或使用 nginx 命令
284+
nginx-rtmp.exe -s reload
285+
```
286+
287+
### 停止服务
288+
289+
```bash
290+
# 使用批处理脚本
291+
stop_nginx.bat
292+
293+
# 或使用 nginx 命令
294+
nginx-rtmp.exe -s stop
295+
```
296+
297+
## 视频教程
298+
299+
**推荐配置搭建视频教程**
300+
301+
1. [apache+php 与 nginx+php 环境的搭建](http://www.tudou.com/listplay/jGOJ31wJFck/zLXd5x6Yyy8.html)
302+
2. [nginx_rtmp 在 windows 下编译及点播、直播、服务端录制的配置](http://www.tudou.com/listplay/jGOJ31wJFck/w-oyi3XnKe0.html)
303+
3. [ffmpeg+jwplayer+nginx 负载均衡配置](http://www.tudou.com/listplay/jGOJ31wJFck/W4gXkEeFoiw.html)
304+
305+
## 常见问题
306+
307+
### 1. 端口占用
308+
- 确保 80 端口(HTTP)和 1935 端口(RTMP)未被占用
309+
- 可在配置文件中修改端口号
310+
311+
### 2. 推流失败
312+
- 检查防火墙设置
313+
- 确认 IP 访问控制配置(allow/deny)
314+
- 查看 logs/rtmp_error.log 错误日志
315+
316+
### 3. HLS 不生成切片
317+
- 确保 `html/media/hls` 目录存在且可写
318+
- 检查 rtmp 配置中的 hls 相关设置
319+
320+
### 4. 录制文件找不到
321+
- 确认录制路径 `html/media/record` 存在
322+
- 检查录制配置参数(record_path, record_unique)
323+
324+
## 技术特点
325+
326+
1. **多版本支持**: 提供三个不同编译版本的 Nginx-RTMP
327+
2. **模块化配置**: 配置文件分离,易于管理和切换
328+
3. **完整示例**: 包含直播、点播、转码等完整使用场景
329+
4. **批处理脚本**: Windows 下便捷的启停管理
330+
5. **负载均衡**: 支持 upstream 配置实现高可用
331+
6. **访问控制**: 细粒度的推流和播放权限控制
332+
7. **实时统计**: 内置统计页面监控服务状态
333+
334+
## 许可证
335+
336+
本项目仅供学习和参考使用。
337+
338+
## 相关资源
339+
340+
- [nginx-rtmp-module GitHub](https://github.com/arut/nginx-rtmp-module)
341+
- [Nginx 官方网站](https://nginx.org/)
342+
- [FFmpeg 官方网站](https://ffmpeg.org/)

0 commit comments

Comments
 (0)