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

目录

  1. 背景
  2. 实现
    2.1 Nginx
    2.2 rtsp-simple-server
    2.3 FFmpeg
  3. 自动化推流

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

点击下载:Nginx-rtmp-win64

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

点击下载 mediamtx_v1.3.0_windows_amd64

2. 按需修改配置

  • 下载完成后,根据需要修改配置文件mediamtx.yml
  • 我这里修改其rtmp服务端口为8556,其他默认即可。

3. 启动 mediamtx.exe

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


2.3 FFmpeg

使用FFmpeg模拟推送视频流,将mp4文件模拟成rtsp流

1. 下载 ffmpeg

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)
posted @ 2024-01-09 13:58  香蕉大则香蕉皮大  阅读(7726)  评论(0)    收藏  举报
Title