Windows上搭建nginx-rtsp流媒体服务器,实现FFmpeg推流、录像转rtsp推流
目录
- 背景
- 实现
2.1 Nginx
2.2 rtsp-simple-server
2.3 FFmpeg - 自动化推流
1. 背景
因为测试需要有实时视频输入,我将录像转为rtsp实时流达到模拟实时视频的效果
阅读指引:
基本的nginx-rtsp推流,请只参考2.1~2.3即可
使用python脚本实现自动化推流请参照第3节
2. 实现
要想实现rtsp推流服务器,我们需要用到三个工具:Nginx,rtsp-simple-server(mediamtx),FFmpeg,下面一次阐述如何配置这几个工具,实现rtsp推流。
2.1 Nginx
下载Nginx-rtmp-win64
Nginx github地址
修改配置文件(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秒的视频内容
启动nginx.exe,在任务管理器观察到nginx.exe在后台运行即可
2.2 rtsp-simple-server
rtsp-simple-server(MediaMTX)是一个随时可用的零依赖服务器和代理,
允许用户发布、读取和代理实时视频和音频流。
下载mediamtx_v1.3.0_windows_amd64
rtsp-simple-erver github地址
下载完成后,根据需要修改配置文件mediamtx.yml
我这里修改其rtmp服务端口为8556,修改后保存,启动mediamtx.exe
2.3 FFmpeg
使用FFmpeg模拟推送视频流,将mp4文件模拟成rtsp流
FFmpeg官方下载地址
下载后bin目录下有三个exe文件
ffmpeg.exe
:这是FFmpeg的主要工具,用于处理多媒体内容,包括音频、视频和其他类型的多媒体数据。它可以用于转码、裁剪、合并、滤镜处理等操作。
ffplay.exe
:这是FFmpeg的播放器工具,用于播放多媒体文件。它可以播放各种格式的音频和视频文件,并支持实时流传输。
ffprobe.exe
:这是FFmpeg的分析器工具,用于获取多媒体文件的元数据和信息。它可以分析音频、视频和其他类型的多媒体文件,并提供有关文件的各种信息,如编码格式、帧率、比特率等。
这里我们使用到ffmpeg.exe
首先我们将一个mp4文件放到bin目录下
然后创建一个脚本文件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流。
此时目录中有如下文件
双击启动start.bat
开始推流
至此,rtsp推流服务器搭建成功,让我们用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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了