Windows上搭建nginx-rtsp流媒体服务器,实现FFmpeg推流、录像转rtsp推流

随笔2个月前发布
40 0 0

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在后台运行即可
Windows上搭建nginx-rtsp流媒体服务器,实现FFmpeg推流、录像转rtsp推流


2.2 rtsp-simple-server

rtsp-simple-server(MediaMTX)是一个随时可用的零依赖服务器和代理,
允许用户发布、读取和代理实时视频和音频流。

下载mediamtx_v1.3.0_windows_amd64
rtsp-simple-erver github地址

下载完成后,根据需要修改配置文件mediamtx.yml
Windows上搭建nginx-rtsp流媒体服务器,实现FFmpeg推流、录像转rtsp推流

我这里修改其rtmp服务端口为8556,修改后保存,启动mediamtx.exe
Windows上搭建nginx-rtsp流媒体服务器,实现FFmpeg推流、录像转rtsp推流


2.3 FFmpeg

使用FFmpeg模拟推送视频流,将mp4文件模拟成rtsp流
FFmpeg官方下载地址
Windows上搭建nginx-rtsp流媒体服务器,实现FFmpeg推流、录像转rtsp推流

下载后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流。

此时目录中有如下文件
Windows上搭建nginx-rtsp流媒体服务器,实现FFmpeg推流、录像转rtsp推流

双击启动start.bat开始推流
Windows上搭建nginx-rtsp流媒体服务器,实现FFmpeg推流、录像转rtsp推流

至此,rtsp推流服务器搭建成功,让我们用vlc拉流验证一下
“媒体”->“打开网络串流”,输入前面脚本中的rtsp url,点击“播放”
Windows上搭建nginx-rtsp流媒体服务器,实现FFmpeg推流、录像转rtsp推流
播放正常,验证成功!

3. 通过python脚本实现自动化推流
使用上述start.bat脚本推流,一旦视频播放结束,推流就会停止。
我们可以使用python脚本实现不间断的自动化推流
附上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)
© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...