bat监控进程并启动,并隐藏黑窗口

bat监控进程并启动,并隐藏黑窗口

背景:

调研海康威视监控的时,发现实现在前端的实时监控需要用到ffmpeg转码推流技术

但是ffmpeg有一个缺点就是,有时候ffmpeg.exe 进程会异常结束,这是就需要对其进行监控,并重新启动

手动发现并启动在测试环境下还可以应付,但是如果在生产环境下还手动启动,那就是有点难以接受。

在网上查了一大推,决定用windos的批处理来解决问题

目的:

Windos下的进程监控,和启动,

技术:

批处理脚本bat文件,结合vbs文件优化

代码如下:

@echo off
title CheckAndStart
:again
 
tasklist|findstr -i "ffmpeg.exe"
if ERRORLEVEL 1 (
	echo ffmpeg is off in %Date:~0,4%-%Date:~5,2%-%Date:~8,2% %Time:~0,2%:%Time:~3,2%
	start "" "E:\WorkCode\Video\Web\FFmpeg\bin\ffmpeg.exe" -i "rtsp://admin:[email protected]:554/h264/ch1/main/av_stream" -q 0 -f mpegts -codec:v mpeg1video -s 1366x768 http://120.204.202.124:8058/supersecret
)
 
choice /t 10 /d y /n > nul
 
goto again


以上代码直接用TXT文件保存成.bat文件即可

以上bat脚本实现的是,对"ffmpeg.exe"进程的监控,一旦进程不存在,就会启动该进程;

这里面由于ffmpeg.exe程序的启动,需要带参数,所以start后面会有很多的"";

第一个""是为了说明后面的参数可以接受空格;

-i "rtsp://admin:[email protected]:554/h264/ch1/main/av_stream" -q 0 -f mpegts -codec:v mpeg1video -s 1366x768 http://120.204.202.124:8058/supersecret
以上的一段的参数全部为ffmpeg.exe进程启动时所需要的参数;其中有拉流的地址,和推流的地址,拉流地址是一个单独的字符串

choice /t 10 /d y /n > nul
这段代码可以定义多长时间循环一次,本次定义为10秒循环一次

问题:

以上代码能够解决监控进程,并自启进程的问题

但是并不完善,因为及时把bat设置成电脑的开机自启,bat执行时也会出现一个cmd的黑窗口,而bat调用ffmpeg程序时也会再次弹出ffmpeg程序的黑色窗口

这两个黑色窗口怎么隐藏便是现在急需解决的问题:

隐藏第一个bat文件自己的黑窗口,可以通过在bat文件中添加一个头能解决:
代码如下:

rem 用于静默后台运行,去掉该指令,命令窗口会常驻
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin
隐藏后的bat进程变为了后台运行,如果想手动关闭,需要用去任务管理器中关闭

隐藏第二个启动ffmpeg程序的黑窗口,并不简单
我才用的是用vbs脚本文件来启动ffmpeg.exe文件实现隐藏

解决:

vbs脚本文件(.vbs)代码如下:

DIM objShell 
set objShell = wscript.createObject("wscript.shell") 
command= "E:\WorkCode\Video\Web\FFmpeg\bin\ffmpeg.exe"
objShell.run command,vbhide

vbhide起到的作用就是隐藏ffmpeg程序窗口的目的,若是后面跟参数直接在字符串中添加就行,至于参数中的双引号的解决方法就是用""来代替每一个"

完整如下:
command= "E:\WorkCode\Video\Web\FFmpeg\bin\ffmpeg.exe -i ""rtsp://admin:[email protected]:554/h264/ch1/main/av_stream"" -q 0 -f mpegts -codec:v mpeg1video -s 1366x768 http://120.204.202.124:8058/supersecret"

最终方案:

编写CheckAndStart.bat文件和Start.vbs文件;CheckAndStart.bat文件用来监控ffmpeg,一旦ffmpeg没有,启动Start.vbs文件;Start.vbs文件用来后台移动ffmpeg文件

最终代码如下:

CheckAndStart.bat文件代码

@echo off
rem 用于静默后台运行,去掉该指令,命令窗口会常驻
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin

title CheckAndStart
:again
 
tasklist|findstr -i "ffmpeg.exe"
if ERRORLEVEL 1 (
	echo ffmpeg is off in %Date:~0,4%-%Date:~5,2%-%Date:~8,2% %Time:~0,2%:%Time:~3,2%
	start "" "E:\WorkCode\Video\Web\FFmpeg\bin\start.vbs" 
)
 
choice /t 10 /d y /n > nul
 
goto again

Start.vbs文件代码

DIM objShell 
set objShell = wscript.createObject("wscript.shell") 
command= "E:\WorkCode\Video\Web\FFmpeg\bin\ffmpeg.exe -i ""rtsp://admin:[email protected]:554/h264/ch1/main/av_stream"" -q 0 -f mpegts -codec:v mpeg1video -s 1366x768 http://120.204.202.124:8058/supersecret"
objShell.run command,vbhide

可以把CheckAndStart.bat文件设置为开机自启

你可能感兴趣的:(bat监控进程并自启,ffmpeg,后端)