Verify RTSP probes from frame progress
This commit is contained in:
1 parent
4cfce2ea2d
commit
9513ca6e15
1 file changed
+25
-6
+25
-6
@@ -3006,9 +3006,10 @@ function New-RtspHealthProbeArguments {
|
||||
param([int]$Channel)
|
||||
|
||||
return @(
|
||||
"-hide_banner", "-loglevel", "error", "-nostdin",
|
||||
"-hide_banner", "-loglevel", "error", "-nostdin", "-nostats",
|
||||
"-progress", "pipe:1",
|
||||
"-rtsp_transport", "tcp",
|
||||
"-rw_timeout", [string]($RtspHealthTimeoutSec * 1000000),
|
||||
"-timeout", [string]($RtspHealthTimeoutSec * 1000000),
|
||||
"-i", "$RTSPPublishBase/monitor$Channel",
|
||||
"-map", "0:v:0", "-frames:v", "1",
|
||||
"-an", "-sn", "-dn", "-f", "null", "NUL"
|
||||
@@ -3022,17 +3023,21 @@ function Test-RtspStreamFrames {
|
||||
try {
|
||||
for ($channel = 1; $channel -le $ChannelCount; $channel++) {
|
||||
$errorLog = Join-Path $LogDir "rtsp-health-monitor$channel.log"
|
||||
Remove-Item -LiteralPath $errorLog -Force -ErrorAction SilentlyContinue
|
||||
$progressLog = Join-Path $LogDir "rtsp-health-monitor$channel.progress"
|
||||
Remove-Item -LiteralPath $errorLog,$progressLog `
|
||||
-Force -ErrorAction SilentlyContinue
|
||||
|
||||
$process = Start-Process -FilePath $FFmpegPath `
|
||||
-ArgumentList (Join-ProcessArguments (New-RtspHealthProbeArguments $channel)) `
|
||||
-WorkingDirectory $BaseDir -WindowStyle Hidden `
|
||||
-RedirectStandardOutput $progressLog `
|
||||
-RedirectStandardError $errorLog -PassThru
|
||||
|
||||
$probes += [PSCustomObject]@{
|
||||
Channel = $channel
|
||||
Process = $process
|
||||
ErrorLog = $errorLog
|
||||
ProgressLog = $progressLog
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3055,8 +3060,20 @@ function Test-RtspStreamFrames {
|
||||
}
|
||||
|
||||
$probe.Process.WaitForExit()
|
||||
if ($probe.Process.ExitCode -ne 0) {
|
||||
$detail = "exit=$($probe.Process.ExitCode)"
|
||||
$progress = @()
|
||||
if (Test-Path -LiteralPath $probe.ProgressLog) {
|
||||
$progress = @(
|
||||
Get-Content -LiteralPath $probe.ProgressLog `
|
||||
-ErrorAction SilentlyContinue
|
||||
)
|
||||
}
|
||||
$hasFrame = @($progress | Where-Object {
|
||||
$_ -match '^frame=([1-9][0-9]*)$'
|
||||
}).Count -gt 0
|
||||
$reachedEnd = $progress -contains "progress=end"
|
||||
|
||||
if (-not ($hasFrame -and $reachedEnd)) {
|
||||
$detail = "FFmpeg progress에 디코딩 완료 프레임 없음"
|
||||
if (Test-Path -LiteralPath $probe.ErrorLog) {
|
||||
$tail = @(
|
||||
Get-Content -LiteralPath $probe.ErrorLog -Tail 3 `
|
||||
@@ -3611,7 +3628,9 @@ function Invoke-SimulationTests {
|
||||
|
||||
Invoke-SimulationCase "RTSP 상태 검사는 새 수신기로 실제 영상 1프레임 요구" {
|
||||
$arguments = @(New-RtspHealthProbeArguments 2)
|
||||
return ($arguments -contains '-rw_timeout' -and
|
||||
return ($arguments -contains '-timeout' -and
|
||||
$arguments -contains '-progress' -and
|
||||
$arguments -contains 'pipe:1' -and
|
||||
$arguments -contains '-frames:v' -and
|
||||
$arguments -contains '1' -and
|
||||
$arguments -contains '0:v:0' -and
|
||||
|
||||
Reference in new issue
Block a user