[Newbie] VLC nach Internet disconnect/IP-Wechsel neu starten?

  • Hallo zusammen,
    ich bin auf der Suche nach einem einfachen Script, welches meine Internet Verbindung überwacht (ggfs. per Ping o.ä). Und dann bei
    IP-Änderung, reconnect oder wenn z.B. 30 Sekunden keine Netzaktivität stattfand, VLC neu startet.
    Ich habe das bisher per Batch-Datei erledigt. Ist allerdings eine mehr unschöne Angelegenheit, da die dauernden pings auf google, unnötige Netzwerklast erzeugen...
    Meine bisherige Batch-Datei:

  • Hi,

    ich würde mit

    [autoit]

    #include <Inet.au3>
    _GetIP()

    [/autoit]

    Die IP auslesen und mit der alten vergleichen. Wenn die sich unterscheiden, war ein Disconnect. Dann wird VLC gestartet.
    Zur Netzwerkaktivität fällt mir momentan nichts ein. Ist ja auch noch/wieder früh!

    Was mich noch interessiert, was macht dein VLC denn die ganze Zeit? Also wofür brauchst du das?

    Gruß Daniel

  • Da ich zum Radio hören Winamp benutzte und Winamp nach jedem IP-Wechsel verstummt habe ich das Problem so gelöst (incl.Logfile):

    [autoit]

    #include <Date.au3>
    #include <Inet.au3>
    if (FileExists("c:\ip_log.txt")) Then
    FileDelete("c:\ip_log.txt")
    EndIf

    $datum=_Now()
    $ip=_GetIP()
    FileWriteLine("c:\ip_log.txt", "Programm gestartet am "&$datum&" mit IP: "&$ip)

    [/autoit][autoit][/autoit][autoit]

    While(1)
    if (ProcessExists("winamp.exe")) Then
    $PublicIP_alt = _GetIP()
    Sleep(10000)
    $PublicIP_neu = _GetIP()
    if $PublicIP_alt<>$PublicIP_neu Then
    $datum=_Now()
    FileWriteLine("c:\ip_log.txt", $datum&" IP: "&$PublicIP_neu)
    Send("{ALTDOWN}{CTRLDOWN}{INS}{ALTUP}{CTRLUP}")
    EndIf

    Else
    MsgBox(4096, "Achtung", "Winamp läuft nicht!")
    Exit
    EndIf

    [/autoit][autoit][/autoit][autoit]

    WEnd

    [/autoit]
  • Mal etwas kürzer das ganze aber ungetestet:

    Spoiler anzeigen
    [autoit]

    #include <Inet.au3>
    $ip = _GetIP()
    While (1)
    If $ip <> _GetIP() Then
    $PID = ProcessExists("vlc.exe")
    If $PID > 0 Then
    ProcessClose($PID)
    ProcessWaitClose($PID)
    EndIf
    Run("C:\Program Files (x86)\VideoLAN\VLC\vlc.exe")
    $ip = _GetIP()
    EndIf
    Sleep(100)
    WEnd

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • So würde es auch vlc neustarten sobald das Internet weg ist und nicht nur bei IP wechsel oder nach 30 Sekunden ohne Verbindung wie Beschrieben.

    Aber wenn du auf AutoIt umsteigen willst um deine Netzwerklast zu senken ist das nicht wirklich die beste Lösung.

    [autoit]

    _getIP

    [/autoit]


    Ruft immer 2 Websites auf auf welchen die öffentliche IP angezeigt wird, was mit Sicherheit mehr Netzlast erzeugt als ein ping auf google.

    Das problem ist, dass das nicht anders geht von daher würde ich dir raten wenn dann eine eigene getIP Funktion zu schreiben, welche zb folgende Seite aufruft:
    http://service.jan-welker.de/myip.ashx
    Da ist nichts drum rum; braucht nicht ganz soviel Netzwerkllast aber obs weniger als ein ping auf google ist bleibt die Frage, ich denke eher nicht.

    Komplett ohne Netzlast gehts nur wenn du deinen Router irgendwie dazu bekommst die Öffentliche IP Lokal irgendwo zu speichern.

    Auch vermindern könntest du die Last, indem du nur alle 10 - 20 Sekunden abprüfst, ob sich deine IP geändert hat/die Verbindung weg ist

    Einmal editiert, zuletzt von Milla (17. Dezember 2010 um 08:59)

  • hey, das ging ja fix mit den Antworten :thumbup:
    werde das ein oder andere gleich mal testen..

    Zitat

    Was mich noch interessiert, was macht dein VLC denn die ganze Zeit? Also wofür brauchst du das?

    Mein VLC empfängt TV-Streams von meinem Server in Deutschland und restreamt die dann per Multicast hier.
    Nur funktioniert leider kein auto-reconnect bei IP-Wechsel.
    Und da mein DSL Hier (in Asien) leider alles andere als stabil ist...müsste ich halt jedesmal den VLC neu starten. Lästig :thumbdown:

    EDIT: das Script von chip reicht im Grunde, jetzt noch eine Frage:
    Ich habe das ein wenig modifiziert und würde gerne eine kleine Gui (Koda) haben um den den VLC manuell starten zu können.
    Mein Code sieht zur Zeit so aus:

    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Inet.au3>
    #Region ### START Koda GUI section ### Form=C:\Users\vel\Desktop\vlc-start-stop.kxf
    $Form1 = GUICreate("Form1", 625, 444, 192, 124)
    $Button1 = GUICtrlCreateButton("Start VLC", 16, 8, 585, 137, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("VLC stoppen", 112, 224, 409, 97, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit][autoit][/autoit][autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1

    [/autoit][autoit][/autoit][autoit]

    Run ("C:\Users\vel\Desktop\radio.bat")
    $ip = _GetIP()
    While (1)
    If $ip <> _GetIP() Then
    $PID = ProcessExists("vlc.exe")
    If $PID > 0 Then
    ProcessClose($PID)
    ProcessWaitClose($PID)
    EndIf
    Run("C:\Users\vel\Desktop\radio.bat")
    $ip = _GetIP()
    EndIf
    Sleep(100)

    [/autoit][autoit][/autoit][autoit]

    WEnd
    Case $Button2
    ProcessClose("vlc.exe")

    [/autoit][autoit][/autoit][autoit]

    EndSwitch
    WEnd

    [/autoit]


    Starten/Restart von VLC und IP Check funktioniert auch, nur hätte ich gern noch einen Button in der Gui um den VLC zu stoppen.
    Der Stop Button funktioniert leider nur, wenn der VLC NICHT übers Script gestartet wurde...(hat wohl was mit der Schleife zu tun), wie löse ich das denn jetzt

    OT:

    Zitat

    Ist ja auch noch/wieder früh!

    bei mir nicht mehr.. ;)

    Einmal editiert, zuletzt von vel2000 (17. Dezember 2010 um 13:46)

  • Hallo vel2000,

    mach es so und es klappt:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Inet.au3>
    #region ### START Koda GUI section ### Form=C:\Users\vel\Desktop\vlc-start-stop.kxf
    $Form1 = GUICreate("Form1", 625, 444, 192, 124)
    $Button1 = GUICtrlCreateButton("Start VLC", 16, 8, 585, 137, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("VLC stoppen", 112, 224, 409, 97, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    Local $dtTime = TimerInit(), $newIP=_GetIP(), $ip = $newIP
    $startCommand = "C:\STICK Kolping\OpenOffice.org Portable Plus\PortableApps\VLCPortable\VLCPortable.exe";
    ;Pfad anpassen
    Run($startCommand)

    [/autoit] [autoit][/autoit] [autoit]

    While (1)
    $dtTime = TimerDiff($dtTime)
    If $dtTime > 1000 Then
    $newIP = _GetIP()
    If $ip <> $newIP Then
    $PID = ProcessExists("vlc.exe")
    If $PID > 0 Then
    ProcessClose($PID)
    ProcessWaitClose($PID)
    EndIf
    Run($startCommand)
    $ip = $newIP
    EndIf
    EndIf
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    Run("$StartCommand")
    $ip = _GetIP()
    Case $Button2
    $PID = ProcessExists("vlc.exe")
    If $PID > 0 Then
    ProcessClose($PID)
    ProcessWaitClose($PID)
    EndIf
    EndSwitch
    WEnd

    [/autoit]

    mfg autoBert

    Einmal editiert, zuletzt von autoBert (18. Dezember 2010 um 01:25)

  • Das nenn ich mal ein super Forum :thumbup:
    kompetente Antworten, die wirklich weiterhelfen!
    Ich habe heute ein wenig Zeit gehabt und bin, dank zusammengesuchter Code-Fragmente nun ein wenig weiter.
    Habe mir mit Koda eine Gui gebastelt, die zwar (im Moment) nicht schön ist, aber funktioniert :D
    Ich habe direkt noch ein paar andere Funktionen integriert.
    Zudem lasse ich VLC, während der IP-Überwachung, nicht mehr neu starten, sondern betätige nur nur die Stop/Play Tasten, reicht auch..
    Das Script ist bestimmt nicht optmal und beinhaltet mit Sicherheit einiges überflüssiges..aber "it works"

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_outfile=VLC-starten.exe
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Date.au3>
    #include <Inet.au3>
    FileInstall("C:\users\vel\Desktop\stream playlist auf Muvid.bat", "C:\Temp\stream playlist auf Muvid.bat")
    FileInstall("C:\users\vel\Desktop\Batch Dateien\stream zum verserver\logos-icons\internet_radio.jpg", "C:\Temp\internet_radio.jpg")
    FileInstall("J:\VLC\Revolunet\skyy.jpg", "C:\Temp\skyy.jpg")
    FileInstall("C:\users\vel\Desktop\Batch Dateien\stream zum verserver\logos-icons\VLC-Vserver-aus-logo.jpg", "C:\Temp\VLC-Vserver-aus-logo.jpg")
    FileInstall("C:\users\vel\Desktop\Batch Dateien\stream zum verserver\logos-icons\PNG\ard_logo.jpg", "C:\Temp\ard_logo.jpg")
    FileInstall("C:\users\vel\Desktop\Batch Dateien\sky.bat", "C:\Temp\sky.bat")
    FileInstall("C:\users\vel\Desktop\radio.bat", "C:\Temp\radio.bat")

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)
    #Region ### START Koda GUI section ### Form=c:\users\vel\desktop\test.kxf
    $Form1_1 = GUICreate("Form1", 617, 438, -1, -1)
    GUISetBkColor(0xA0A0A4)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1_1Close")
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "Form1_1Minimize")
    GUISetOnEvent($GUI_EVENT_MAXIMIZE, "Form1_1Maximize")
    GUISetOnEvent($GUI_EVENT_RESTORE, "Form1_1Restore")
    $Button2 = GUICtrlCreateButton("VLC-STOPPEN", 223, 352, 169, 73)
    GUICtrlSetFont($Button2, 12, 400, 0, "Verdana")
    GUICtrlSetBkColor($Button2, 0xFF0000)
    GUICtrlSetCursor ($Button2, 0)
    GUICtrlSetOnEvent($Button2, "Button2Click")
    $Pic1 = GUICtrlCreatePic("C:\Temp\skyy.jpg", 127, 135, 169, 73)
    GUICtrlSetTip($Pic1, "SKY starten")
    GUICtrlSetCursor ($Pic1, 0)
    GUICtrlSetOnEvent($Pic1, "Pic1Click")
    $Pic2 = GUICtrlCreatePic("C:\Temp\internet_radio.jpg", 128, 16, 169, 105)
    GUICtrlSetTip($Pic2, "Internet-Radio Stream zum Muvid")
    GUICtrlSetCursor ($Pic2, 0)
    GUICtrlSetOnEvent($Pic2, "Pic2Click")
    $Pic3 = GUICtrlCreatePic("C:\Temp\VLC-Vserver-aus-logo.jpg", 318, 16, 169, 105)
    GUICtrlSetTip($Pic3, "VLC stoppen")
    GUICtrlSetCursor ($Pic3, 0)
    GUICtrlSetOnEvent($Pic3, "Pic3Click")
    $Button1 = GUICtrlCreateButton("VLC -Playliste > MUVID", 320, 136, 169, 73)
    GUICtrlSetFont($Button1, 11, 400, 0, "Verdana")
    GUICtrlSetColor($Button1, 0xFF0000)
    GUICtrlSetTip($Button1, "Playliste auf den Muvid streamen")
    GUICtrlSetCursor ($Button1, 0)
    GUICtrlSetOnEvent($Button1, "Button1Click")
    $Pic4 = GUICtrlCreatePic("C:\Temp\ard_logo.jpg", 128, 216, 169, 73)
    GUICtrlSetOnEvent($Pic4, "Pic4Click")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    $datum = _Now()
    $ip = _GetIP()
    FileWriteLine("c:\ip_log.txt", "Programm gestartet am " & $datum & " mit IP: " & $ip)

    [/autoit] [autoit][/autoit] [autoit]

    While (1)
    if (ProcessExists("vlc.exe")) Then
    $PublicIP_alt = _GetIP()
    Sleep(10000)
    $PublicIP_neu = _GetIP()
    If $PublicIP_alt <> $PublicIP_neu Then
    $datum = _Now()
    FileWriteLine("c:\ip_log.txt", "IP-Wechsel am " & $datum & " Neue IP: " & $PublicIP_neu)
    Send("^!s")
    Sleep(5000)
    Send("^!p")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    WEnd ; ''

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Button1Click()
    ProcessClose("vlc.exe")
    Sleep(500)

    [/autoit] [autoit][/autoit] [autoit]

    Run("C:\Temp\stream playlist auf Muvid.bat")
    EndFunc ;==>Button1Click
    Func Button2Click()
    If ProcessExists("vlc.exe") Then ; Erstelle die MsgBox
    ProcessClose("vlc.exe")
    Else
    MsgBox(4096, "Achtung", "VLC läuft nicht!") ; ''
    EndIf
    EndFunc ;==>Button2Click

    [/autoit] [autoit][/autoit] [autoit]

    Func Pic2Click()
    ProcessClose("vlc.exe")
    Sleep(500)

    [/autoit] [autoit][/autoit] [autoit]

    Run("C:\Temp\radio.bat")
    ; Else
    ; MsgBox(4096, "Achtung", "VLC läuft nicht!")
    ; Exit
    EndFunc ;==>Pic2Click
    Func Pic3Click()
    If ProcessExists("vlc.exe") Then ; Erstelle die MsgBox
    ProcessClose("vlc.exe")
    Else
    MsgBox(4096, "Achtung", "VLC läuft nicht!") ; ''
    EndIf
    EndFunc ;==>Pic3Click
    Func Form1_1Close()
    Exit ; Beende das Script
    EndFunc ;==>Form1_1Close
    Func Form1_1Maximize()

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>Form1_1Maximize
    Func Form1_1Minimize()

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>Form1_1Minimize
    Func Form1_1Restore()

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>Form1_1Restore

    [/autoit] [autoit][/autoit] [autoit]

    Func Pic1Click()
    ProcessClose("vlc.exe")
    Sleep(500)

    [/autoit] [autoit][/autoit] [autoit]

    Run("C:\Temp\sky.bat") ;<---- startet VLC und verbindet zu dem "Sky-Streaming-Server"
    EndFunc ;==>Pic1Click
    Func Pic4Click()
    ProcessClose("vlc.exe")
    Sleep(500)

    [/autoit] [autoit][/autoit] [autoit]

    Run("C:\Program files\VideoLAN\VLC_1.0.5\vlc.exe http://xxx:xxx@xxxx.dyndns.info:8889/ext;QUALITY=250/1") ;<--- startet VLC und schaltet den VDR-Server in D auf ARD um
    EndFunc ;==>Pic4Click

    [/autoit]


    nochmals recht vielen Dank