4

powershell と rtmpdump を使用して、ライブ テレビ チャンネルの rtmp フィードを監視しようとしています。監視したいストリームは、次の csv 形式に従う「streams.txt」ファイルに保存されます。

Name,feed,file
tv1,rtmp://server/live/tv1,tv1.flv
tv2,rtmp://server/live/tv1,tv2.flv
tv3,rtmp://server/live/tv1,tv3.flv 
tv4,rtmp://server/live/tv1,tv4.flv

csv ファイルをインポートしてオブジェクト内のデータを変換した後、各オブジェクトをトラバースし、フィード プロパティを使用して rmtpdump コマンドを起動します。このプロセスが機能すると、残りの PowerShell が停止します。

それを解決するためにタイマーを使用しようとしていますが、rtmpdumpがループ内の最初のフィードをキャプチャしているときに問題を解決していません。

Register-ObjectEvent -InputObject $timer -EventName elapsed –SourceIdentifier  thetimer -Action $action 



$colStats = Import-CSV streams.txt
foreach ($objBatter in $colStats)
  {
    $timer.start()
    $objBatter.feed  + "," + $objBatter.file
    .\rtmpdump.exe -r $objBatter.feed -o $objBatter.file

  }



#to stop run 
$timer.stop() 
#cleanup 
Unregister-Event thetimer

#loop through flv files and all 0 bytes files are faulty channel

#deleting files with 0 size
#dir | ? {$_.length -eq 0} | del

フィードの出力を 30 秒間再生してキャプチャし、rtmpdump プロセスを強制終了する必要があります。ループの次の繰り返しで、2 番目のフィードを 30 秒間キャプチャしたいと考えています。

1 つのストリームが機能していない場合は、後で通知を送信するための 0 バイトの flv ファイルが生成されます

4

2 に答える 2

3
cls;
Set-Location "C:\users\najam.sikander\Desktop\rtmpdump"
#deleting flv files
dir *.flv | del
get-process -name rtmp* | kill
<#
$timer = new-object timers.timer 

$action = {
write-host "Time to kill rtmp: $(get-date -Format ‘HH:mm:ss’)"
#get-process -name rtmp* | kill
} 


$timer.Interval = 30000 #3 seconds  

Register-ObjectEvent -InputObject $timer -EventName elapsed –SourceIdentifier  thetimer -Action $action 

#>

$colStats = Import-CSV streams.txt
$files = (dir *.flv | measure).Count
Write-Host $files

While ($files -lt $colStats.Length)
{

$arguments = "-r " + $colStats[$files].feed + " -o " + $colStats[$files].file + " -m 20 -v"
Start-Process "C:\users\najam.sikander\Desktop\rtmpdump\rtmpdump.exe" $arguments   

do
{
    Write-Host $colStats[$files].feed
    Write-Host $colStats[$files].file
    $streaming = $true;

    $fileCh = (dir $colStats[$files].file | measure).Count

    Write-Host $files

    if($fileCh -gt 0)
    {
        while ((dir $colStats[$files].file).Length -lt 1000){
            $dump  = (get-process -name rtmp* | measure).Count
            if($dump -eq 0)
            {
                break
            }
        }
        $streaming = $false
        get-process -name rtmp* | kill
    }
}
while ( $streaming -eq $true)

$files = (dir *.flv | measure).Count
Write-Host $files
}


#getting working and not workign streams sets based on flv files
$working = dir *.flv | ? {$_.length -ge 1000} 
$notworking = dir *.flv | ? {$_.length -eq 0}  
Write-Host "working = " ($working |measure).Count
$working
Write-Host "not working = " ($notworking |measure).Count
$notworking

#deleting flv files
dir *.flv | del
于 2013-09-07T06:13:06.733 に答える
2

これで目的が達成されると思います... csv ファイルをループし、rempdump プロセスを 30 秒間実行して強制終了し、次のフィードに移動します。

#Import the streams
$colStats = Import-CSV streams.txt

#Loop through the streams
foreach ($objBatter in $colStats)
{
    $Process = ".\rtmpdump.exe"
    $arguments = "-r $objBatter.feed -o $objBatter.file"

    #Launch Process
    $Ps = Start-Process -FilePath $Process -ArgumentList $Arguments -PassThru

    #Wait 30 seconds
    Sleep -Seconds 30

    #Kill the process
    $Ps.Kill()
}

#loop through flv files and all 0 bytes files are faulty channel

#deleting files with 0 size
#dir | ? {$_.length -eq 0} | del
于 2013-08-30T23:51:58.207 に答える