OBS 做不到?用 ffmpeg 录屏并推rtsp流

最近遇到一个技术需求,要录制电脑桌面并推流为 rtsp 流,目的是满足巡课系统对智能大屏的巡检功能。

桌面录屏并推流 rtmp,那么用 OBS 当然最方便,可是 OBS 好像无法推 rtsp 流,或许是我没有找到对应的方法,另外这个需求中也不允许安装 OBS。

经过一番探索,发现一种比较合适的方案,使用 ffmpeg 和 mediamtx 将 Windows 屏幕推流为 rtsp。

整合包

使用下面这个整合包,依次点击批处理文件,就可以实现录制桌面并推流 rtsp。

这个平台不太适合方便附件,直接把批处理脚本发出来。

bash 复制代码
# 第1步.bat
.\mediamtx.exe

# 第2步.bat
.\ffmpeg -f gdigrab -framerate 30 -i desktop -c:v libx264 -bf 0 -f rtsp -rtsp_transport tcp rtsp://localhost:8554/desktop

# 第3步.bat
@echo off
setlocal EnableDelayedExpansion
set ipconfig_output=

for /f "usebackq delims=" %%i in (`ipconfig`) do (
  set "line=%%i"
  set ipconfig_output=!ipconfig_output!!line!

  REM 检查是否包含 IPv4 地址行
  echo !line! | findstr /c:"IPv4" >nul
  if !errorlevel! equ 0 (
    REM 提取 IP 地址并输出
    for /f "tokens=2 delims=:" %%a in ("!line!") do (
      set "ip_address=%%a"
      echo IP: !ip_address:~1!
	  REM 删除空格并构建 rtsp URL
      set "rtsp_url=rtsp://!ip_address: =!:8554/desktop"
      echo RTSP URL: !rtsp_url!
	  echo !rtsp_url!>> rtsp_url.txt
    )
  )
)

pause

详细步骤

步骤一:下载 mediamtx

打开 github.com/bluenviron/... 下载合适的 windows 版本的包,下载后解压到本地。

步骤二:下载 ffmpeg

打开 www.gyan.dev/ffmpeg/buil... 下载 ffmpeg 包,下载后解压到本地

步骤三:启动 mediamtx

在步骤一种解压后,双击 mediamtx.exe 启动,将打开命令行,出现如下界面

步骤四:用 ffmpeg 录屏并推流

打开 ffmpeg.exe 所在的目录,按住 shift,右键打开菜单,选择终端或 Powershell 窗口。

在命令行窗口中输入下面这段命令

shell 复制代码
.\ffmpeg -f gdigrab -framerate 30 -i desktop -c:v libx264 -bf 0 -f rtsp -rtsp_transport tcp rtsp://localhost:8554/desktop

这段代码的意思是用 gdi api 录制屏幕,设置帧率 30,使用 H264 编码,去掉 B 帧,并推流到 rtsp 地址。

注意,这里的 desktop 可以改为其他字符,例如 1,test,mystream 等。

这样一来,就可以通过 rtsp://localhost:8554/desktop 拉流了,如果需要实际 IP,看步骤五。

如果有多个屏幕,希望只录制主屏幕,假设主屏幕是宽高是1920*1080,可以使用一下命令

shell 复制代码
ffmpeg -f gdigrab -framerate 30 -i desktop -vf "crop=1920:1080:0:0" -c:v libx264 -bf 0 -f rtsp -rtsp_transport tcp rtsp://localhost:8554/desktop

步骤五:获取本地 IP地址

打开命令行,输入 ipconfig 获取本地 IP,如下所示,那么拉流 rtsp 地址就是 rtsp://172.20.236.38:8554/desktop

可以通过 VLC 来监测 rtsp 流地址是否可用。

相关推荐
玩电脑的辣条哥2 小时前
Python如何播放本地音乐并在web页面播放
开发语言·前端·python
ew452182 小时前
ElementUI表格表头自定义添加checkbox,点击选中样式不生效
前端·javascript·elementui
suibian52352 小时前
AI时代:前端开发的职业发展路径拓宽
前端·人工智能
Moon.92 小时前
el-table的hasChildren不生效?子级没数据还显示箭头号?树形数据无法展开和收缩
前端·vue.js·html
垚垚 Securify 前沿站2 小时前
深入了解 AppScan 工具的使用:筑牢 Web 应用安全防线
运维·前端·网络·安全·web安全·系统安全
工业甲酰苯胺5 小时前
Vue3 基础概念与环境搭建
前端·javascript·vue.js
mosquito_lover16 小时前
怎么把pyqt界面做的像web一样漂亮
前端·python·pyqt
柴柴的小记8 小时前
前端vue引入特殊字体不生效
前端·javascript·vue.js
柠檬豆腐脑9 小时前
从前端到全栈:新闻管理系统及多个应用端展示
前端·全栈
bin91539 小时前
DeepSeek 助力 Vue 开发:打造丝滑的颜色选择器(Color Picker)
前端·javascript·vue.js·ecmascript·deepseek