Windows上搭建nginx-rtsp流媒体服务器,实现FFmpeg推流、录像转rtsp推流
目录
- 背景
- 实现
2.1 Nginx
2.2 rtsp-simple-server
2.3 FFmpeg - 自动化推流
1. 背景
因为测试需要有实时视频输入,我将录像转为rtsp实时流达到模拟实时视频的效果
阅读指引:
基本的nginx-rtsp推流:请只参考 2.1 ~ 2.3 即可
自动化推流 :请参照第3章
2. 实现
要想实现rtsp推流服务器,我们需要用到三个工具:
- Nginx
- rtsp-simple-server(mediamtx)
- FFmpeg
只需对这些工具稍加配置,即可实现rtsp推流
下载时间不计,全程操作仅需3分钟
2.1 Nginx
本章节实现 nginx 的下载、配置、启动
1. 下载 nginx
2. 修改配置文件
打开配置文件:conf/nginx.conf
修改如下配置
rtmp {
server {
listen 1935;
application live {
live on;
}
application hls {
live on;
hls on;
hls_path temp/hls;
hls_fragment 8s;
}
}
}
这里的配置参数及其含义
listen 代表监听端口
application live 跟的是推流请求路径
live on 代表开启实时
hls on 代表开启hls
hls_path 代表rtmp推流请求路径,文件存放路径
hls_fragment 8s 代表每个TS文件包含8秒的视频内容
3. 启动 nginx
双击启动nginx.exe,在任务管理器观察到nginx.exe在后台运行即可

2.2 rtsp-simple-server
rtsp-simple-server(MediaMTX)是一个随时可用的零依赖服务器和代理,允许用户发布、读取和代理实时视频和音频流。
本章节实现 mediamtx 的下载、配置、启动
1. 下载 mediamtx
2. 按需修改配置
- 下载完成后,根据需要修改配置文件mediamtx.yml
- 我这里修改其rtmp服务端口为8556,其他默认即可。

3. 启动 mediamtx.exe
双击启动mediamtx.exe,启动成功应当看到如下窗口

2.3 FFmpeg
使用FFmpeg模拟推送视频流,将mp4文件模拟成rtsp流
1. 下载 ffmpeg

- 下载后bin目录下有三个exe文件
ffmpeg.exe:这是FFmpeg的主要工具,用于处理多媒体内容,包括音频、视频和其他类型的多媒体数据。它可以用于转码、裁剪、合并、滤镜处理等操作。
ffplay.exe:这是FFmpeg的播放器工具,用于播放多媒体文件。它可以播放各种格式的音频和视频文件,并支持实时流传输。
ffprobe.exe:这是FFmpeg的分析器工具,用于获取多媒体文件的元数据和信息。它可以分析音频、视频和其他类型的多媒体文件,并提供有关文件的各种信息,如编码格式、帧率、比特率等。
这里我们使用到ffmpeg.exe
2. 准备视频文件和视频脚本
首先我们将一个mp4文件放到bin目录下,例如 test.mp4
然后创建一个脚本文件 start.bat,脚本内容如下:
ffmpeg.exe -re -i test.mp4 -rtsp_transport tcp -vcodec h264 -b:v 1000k -f rtsp rtsp://192.168.2.233:8556/live/stream_0
pause
上述命令将“test.mp4”文件转码为H.264格式,并以TCP协议通过RTSP流发送到指定的RTSP服务器地址。具体参数含义如下:
ffmpeg: 这是调用FFmpeg程序的命令。
-re: 以实时速率读取输入文件,使其与摄像头的实时数据流保持同步。
-rtsp_transport tcp: 这个参数是用来指定RTSP流的传输协议为TCP。
-vcodec h264: 输出视频的编解码器为H.264。
-b:v 1000k: 比特率为1000千位每秒 (k表示千位)。比特率决定了视频的质量和文件大小。
-f rtsp: 输出格式为RTSP流。
此时目录中有如下文件

3. 启动推流
双击启动
start.bat开始推流
启动成功应当看到如下窗口

至此,rtsp推流服务器搭建成功。
恭喜!
- 让我们用vlc拉流验证一下
打开vlc -> “媒体”->“打开网络串流”,输入前面脚本中的rtsp url -> 点击“播放”

播放正常,验证成功!
3. 实现自动化推流
使用上述start.bat脚本推流,一旦视频播放结束,推流就会停止。
我们写一个脚本实现不间断的自动化推流
附上python脚本代码:
import time
import subprocess
# 推流命令
command = "D:/work/tools/01_rtsp_push_stream/0103_ffmpeg-6.0-essentials_build/bin/ffmpeg.exe -re -i D:/work/tools/01_rtsp_push_stream/0103_ffmpeg-6.0-essentials_build/bin/test.mp4 -rtsp_transport tcp -vcodec h264 -b:v 2000k -f rtsp rtsp://192.168.2.233:8556/live/stream_0"
count = 0
while (count <=20):
# 使用subprocess运行命令
process = subprocess.Popen(command, shell=True)
# 等待命令执行完成
process.wait()
# 检查命令的退出状态
if process.returncode == 0:
print("命令执行成功")
else:
print("命令执行失败")
count +=1
print('count:%d'%count)
time.sleep(5)

浙公网安备 33010602011771号