Upload Traffic überwachen > wenn zu gering > batch ausführen



  • @SeppJ
    Sorry, so ganz ist mir noch nicht klar, was 0,1 oder 2 dort bewirken - wenn ich nicht mehr weiter komme hilft manchmal auch einfach "learning by doing" 😇



  • @dreamer84 Hast du mal in dem Skript die eckigen Klammern mit der Zahl da drinnen weg genommen und probiert?



  • Ah,
    mir fällt gerade auf, dass ich im Hintergrund noch einen RTMP-Server laufen habe. Ich nehme an, dass der auch Upload entstehen lässt... ich habe das ganze jetzt nochmal auf einem anderen Streaming PC laufen lassen und siehe da... Screenshot
    Wenn der Stream läuft ist die ausgegebene Zahl 6-stellig, wenn er aus ist nur 4-stellig.
    Damit kann man doch was anfangen 😃

    @Schlangenmensch Probier ich mal...


  • Mod

    Dann wissen wir jetzt, dass du nur ein Netzwerkinterface hast. Zumindest auf diesem einen Rechner, in dem Zustand, wie er jetzt im Moment läuft. Ist natürlich so eine Frage, ob das immer so bleibt.

    Der Hintergrundtraffic ist natürlich ein großes Problem. Anscheinend ist der ja um eine ganze Größenordnung höher als der Verkehr durch den Stream. Da können kleine Schwankungen im Hintergrundprozess nicht davon unterschieden werden davon, wenn der Stream komplett zusammen bricht. Wenn du das nicht ändern kannst, dann ist der ganze Ansatz mit dem Netzwerkverkehr hinfällig.



  • @Schlangenmensch
    Hab ich gemacht...
    Komisch, wenn der Stream läuft oder nicht läuft kommen Werte zwischen 200 und 4.000
    Der streamt doch aber laut OBS aber schon mit 5.000 kb/s
    Wie kann das sein?

    Screenshot



  • @SeppJ
    Das bleibt so. Wie gesagt, ich habe die Streaming PCs wirklich nur zum streamen. Ich habe vor, die Stream dort laufen zu lassen und wenn alles läuft muss ich da am besten nie wieder dran 🙂

    Naja, rein logisch gesehen dürfte dort eigentlich gar nicht gesendet werden. OBS (der letzte PC - letzter Screenshot) hat eine RTSP-Quelle. Die sendet ja zum PC hin, also eine Art Download. Raus geht doch eigentlich nur der Upload aus OBS. Versteh ich nicht.

    Screenshot Taskmanager
    Da seh ich jetzt gerade noch, dass ich ja mit RemoteDesktop auf die PC zugreife. Da entsteht natürlich auch Traffic.
    Ich werde das ganze jetzt nochmal direkt am PC und ohne RemoteDesktop testen...
    Ich danke auch an dieser Stelle schon mal mega für eure Zeit - ich probier jetzt mal etwas rum (PCs stehen im Keller) und schreib dann nochmal.


  • Mod

    @dreamer84 sagte in Upload Traffic überwachen > wenn zu gering > batch ausführen:

    @Schlangenmensch
    Hab ich gemacht...
    Komisch, wenn der Stream läuft oder nicht läuft kommen Werte zwischen 200 und 4.000
    Der streamt doch aber laut OBS aber schon mit 5.000 kb/s

    Bist du sicher, dass es nicht 5000 k Bit/s sind?



  • So ich hab mal noch etwas rumprobiert und alles ohne RemoteDesktop getestet:
    Bei deaktiven Stream liegt der Traffic bei 1-25. Bei aktiven Stream bei 100-4000.
    Da sind also schon mal Werte mit denen man was anfangen kann.

    Eine Idee hatte ich noch. Wenn ich das Script ausführe gibt er ja nur den aktuell gemessenen Wert zurück. Der schwankt eben sehr stark. Wäre es sinnvoll eine Art Durchschnittswert aus den letzten 10 Sekunden zu errechnen? also 10 Sekunden lang messen und dann eben einen Mittelwert ausgeben? Ich denke diese Zahl wäre sehr viel verlässlicher.

    Wie könnte das aussehen?
    Ich weiß beim Arduino lief das über eine Art "Frequenz Counter". Kann man sowas da mit einbauen?



  • @dreamer84 ja, geht natürlich. Abhängig von der Zeit oder einfach der Durchschnitt von 10 Messungen, oder oder oder.

    Ich bin gerade noch über Get-Counter gestolpert. Damit könnte man vlt abgestimmt auf die Streaming Software Monitoren und hätte damit vielleicht das Problem mit dem Hintergrundrauschen behoben.



  • @Schlangenmensch
    Ja, das klingt gut. Was wäre sinnvoller? Einen Counter der einfach 10 Sekunden lang misst, oder?

    Hast du eine Ahnung wie man das in den Code einbaut?



  • @dreamer84 Ich bin sicher, mit ein bisschen Google Unterstützung hättest du das auch schnell selbst gefunden, aber weil Freitag ist und ich gerade ein bisschen Spaß am Googeln hatte:

    $threshold = 1000
    $timer = new-timespan -Seconds 10
    $wmi = 0
    $count = 0
    $clock = [diagnostics.stopwatch]::StartNew()
    while ($clock.elapsed -lt $timer){
        $wmi += (Get-WMIObject -Class Win32_PerfFormattedData_Tcpip_NetworkInterface | Select-Object BytesSentPerSec).BytesSentPerSec
        $count++
    }
    
    $kbytes = ($wmi/$count)  / 1kb * 8 #to kbit/s 
    
    if($kbytes -le $threshold)
    {
        Write-Output $kbytes
        Write-Host "restart"
    }
    else    
    {
        Write-Output $kbytes
        Write-Host "all ok"
    }
    

    Ich habe das ganze jetzt in kbits umgerechnet (siehe die *8), ich denke das sollte deine Erwartungen besser treffen.
    Aber wie gesagt, ich Google mir das auch nur zusammen.

    Wenn man 10 Sekunden lang abfragt, weiß man halt nicht wie viele Durchläufe man schafft. Das hängt dann vom System ab. Immer eine bestimmte Anzahl zu nehmen wäre halt überall die gleiche Anzahl. Aber, deine Entscheidung.



  • @Schlangenmensch
    Glaub mir, ich saß bis heute morgen um 4 Uhr um da selbst noch was dran zu machen.
    Das Problem ist nicht den Befehl bei Google zu finden, aber wenn man damit noch nie was zutun hatte ist es gar nicht so leicht sowas mit anderen Befehlen richtig zu kombinieren.

    Ich danke dir vielmals für deinen Code 😃
    Ich werde ihn direkt ausprobieren.



  • Mega!
    Der Code funktioniert jetzt absolut zuverlässig 😃
    Die Bitrate entspricht ziemlich genau der, die OBS anzeigt - ca. 5500.
    Bei inaktivem Stream sinkt sie auf ca. 20.
    So kann man das ganz klar Trennen wenn der Stream läuft oder abgestürzt ist.

    Ich danke dir vielmals.
    Ich würde dir gern einen Kaffee spendieren für deine Zeit und deine Mühe.
    Kannst du mir eine PN schicken?



  • PMs sind hier aus gutem Grund deaktiviert 😉

    Seh es als Freundschaftsdienst, für sowas sind Foren da.

    Wenn du unbedingt Geld los werden möchtest, kannst du den Kaffebetrag gerne an eine gemeinnützige Organisation spenden.



  • @Schlangenmensch sagte in Upload Traffic überwachen > wenn zu gering > batch ausführen:

    while ($clock.elapsed -lt $timer){
        $wmi += (Get-WMIObject -Class Win32_PerfFormattedData_Tcpip_NetworkInterface | Select-Object BytesSentPerSec).BytesSentPerSec
        $count++
    }
    

    Ich denke es wäre gut da noch eine "sum" Aggregierung einzubauen und wenigstens etwas wie ein "sleep 100ms".



  • Vielleicht ist es auch noch sinnvoll, sich den letzten Wert zu merken und nur bei fallender Flanke den Prozess neu zu starten?
    Nur für den Fall, dass die Software zum Starten etwas länger braucht und dabei vom Watchdog abgeschossen und neu gestartet wird?



  • @Schlangenmensch
    Vielen Dank dafür.
    Ich habe soeben einen kleinen Betrag an die Deutsche Krebshilfe gespendet.

    @hustbaer
    Danke für deinen Hinweis.
    Was macht ein "sum" Aggregierung?

    Den Begriff Watchdog hab ich in einem anderen Zusammenhang schon mal gehört. Ich hatte damals versucht etwas drüber herauszufinden aber nichts dazu gefunden. Kannst du mir sagen was das genau ist?

    Ich finde es aktuell eigentlich schon nahezu perfekt. Der Batch wird alle 5 Minuten vom Taskplaner ausgeführt. Wenn der Stream nicht läuft, startet er ihn einfach neu... dadurch, dass ich zwei Stream für ein Ziel laufen habe, also einen Backup stream die ganze Zeit mitsende, macht es auch nichts, wenn innerhalb der 5 Minuten einer der Streams abstürzt...

    $threshold = 100
    $timer = new-timespan -Seconds 10
    $wmi = 0
    $count = 0
    $clock = [diagnostics.stopwatch]::StartNew()
    while ($clock.elapsed -lt $timer){
        $wmi += (Get-WMIObject -Class Win32_PerfFormattedData_Tcpip_NetworkInterface | Select-Object BytesSentPerSec).BytesSentPerSec
        $count++
    }
    
    $kbytes = ($wmi/$count)  / 1kb * 8 #to kbit/s 
    
    
    if($kbytes -le $threshold)
    {
        Write-Output $kbytes
        Write-Host "restart"
    	taskkill /f /im obs64.exe
    	Start-Process -FilePath "obs64.exe" -WorkingDirectory "C:\Program Files\obs-studio\bin\64bit\" --startstreaming
    }
    else    
    {
        Write-Output $kbytes
        Write-Host "all ok"
    }
    


  • Achso, wenn das Überwachungsintervall 5min sind, dann ist mein Einwand hinfällig.
    Ein Watchdog ist ein Wachhund, der auf irgendwas aufpasst und Alarm schlägt, wenn etwas nicht so ist, wie es sein sollte. In deinem Fall ist das Skript der Watchdog, der guckt regelmäßig auf den Upstream-Durchsatz und schlägt Alarm (=startet den Stream neu), wenn der Mindest-Durchsatz unterschritten wurde.

    Was SeppJ noch vorschlagen wollte, wenn hustbaer nicht schneller gewsen wäre, ist, dass dein Skript ja 10 Sekunden lang mit voller CPU Leistung die Daten erfasst. Das ist unnötig und verbraucht sinnlos CPU-Zeit. Um das einzuschränken solltest nach jeder Datenerfassung die CPU kurz abgeben (per Sleep oder so). Wenn du dir das im Task Manager anguckst solltest du einen 10 Sekunden Spike bemerken, wenn dein Skript läuft.


  • Mod

    @DocShoe sagte in Upload Traffic überwachen > wenn zu gering > batch ausführen:

    Was SeppJ meint ist, dass dein Skript ja 10 Sekunden lang mit voller CPU Leistung die Daten erfasst. Das ist unnötig und verbraucht sinnlos CPU-Zeit. Um das einzuschränken solltest nach jeder Datenerfassung die CPU kurz abgeben (per Sleep oder so). Wenn du dir das im Task Manager anguckst solltest du einen 10 Sekunden Spike bemerken, wenn dein Skript läuft.

    Das hätte ich zwar auch eingewendet, aber hier war hustbaer schneller.



  • @DocShoe
    Danke für die Erklärung. Dann hab ich jetzt meinen eigenen Wachhund 😃 Danke.
    Tatsächlich habe ich keinen nennenswerten CPU-Ausschlag bei der 10-sekündigen Ausführung der Batch-Datei.

    Das einzige woran ich jetzt gerade noch rumprobiere ist, dass die Datei nicht ausgeführt wird wenn der Befehl taskkill OBS nicht findet, weil es bereits komplett beendet/abgestüzt war. Aber das finde ich 😉 EDIT: habs...


Log in to reply