Manche Parameter in der Commandline werden ignoriert?

  • Hallo.


    Zur Info:
    In einem Microsoft Forum versucht sich ein User daran .qcp Audiofiles via PureVoice von Excel aus (mit VBA unter Windows) abzuspielen... mit mäßigem Erfolg.
    Nun war meine Idee ihm statt dessen den VLC zu empfehlen, der bietet ja viele Möglichkeiten der Steuerung über die Kommandozeile.
    Also hab ich mal probiert ob und wie und was da geht, leider auch mit mäßigem Erfolg.


    Ich hab die aktuellste VLC Version 2.2.3 und mir das example.qcp von der Webseite
    http://www.online-convert.com/file-format/qcp
    geholt und auf Z:\ gespeichert.


    Mein VBA-Code zum Test ist hier:



    Sub TestPlay()
    Dim VLC As String, Args, CmdLine As String

    VLC = "C:\Program Files (x86)\VideoLAN\VLC\vlc.exe"
    Args = "--play-and-exit z:\example.qcp"
    Args = "--play-and-exit --qt-start-minimized z:\example.qcp"


    CmdLine = """" & VLC & """ " & Args
    Debug.Print CmdLine
    Shell CmdLine
    End Sub


    Sub TestQuit()
    Dim VLC As String, Args, CmdLine As String

    VLC = "C:\Program Files (x86)\VideoLAN\VLC\vlc.exe"
    Args = "vlc:\\quit"


    CmdLine = """" & VLC & """ " & Args
    Debug.Print CmdLine
    Shell CmdLine
    End Sub



    Nun die Probleme:
    TestPlay funktioniert in sofern das VLC minimiert startet und die Datei abspielt, aber leider sich dann nicht beendet sondern die Datei in einer Endlos-Schleife abspielt.
    TestQuit funktioniert gar nicht, statt das der VLC beendet wird bekommt die Playlist einen weiteren Eintrag "quit", der aber nicht abgearbeitet wird. Nach einem Doppelklick darauf stürzt VLC ab.


    Dazu die Fragen:
    a) Wie kann ich VLC veranlassen (ggf. minimiert) die Datei zu spielen und dann sich automatisch zu beenden?
    b) Wie kann ich VLC, während eine Ausgabe läuft, beenden?


    Irgendwie hab ich da scheinbar was auf'm Auge, ich seh das Problem nicht. :/


    Andreas.

  • Update:


    Problem a) hat sich erledigt, das Ursache ist das man zuerst die Option --no-repeat setzen muss, welche dann die Playlist beendet. Erst danach wird wohl geschaut was passieren soll (exit oder stop). Dieser Code funktioniert (in Excel, die example.qcp liegt im gleichen Ordner wie die Exceldatei):



    Sub TestPlay()
    Dim VLC As String, Args, CmdLine As String
    Dim QCP As String

    VLC = "C:\Program Files (x86)\VideoLAN\VLC\vlc.exe"
    QCP = ThisWorkbook.Path & "\example.qcp"

    VLC = """" & VLC & """"
    QCP = """" & QCP & """"

    Args = "--no-repeat --play-and-exit --qt-start-minimized"


    CmdLine = VLC & " " & Args & " " & QCP
    Debug.Print CmdLine
    Shell CmdLine
    End Sub



    Bleibt Problem b): Wenn eine Ausgabe gerade läuft, wie kann man die Ausgabe (oder VLC) beenden?


    Andreas.

    • Official Post

    Hallo Andreas Killer,


    ich will mal versuchen einen Lösungsvorschlag zu b) hier anzubieten.
    Wenn in den Einstellungen des VLC-Players Menü / Werkzeuge / Einstellungen unter Wiedergabeliste und Instanzen "nur eine Instanz erlauben" aktiviert ist, kann ich VLC mit folgendem Code beenden vlc://quit.


    Beispiel für das Beenden der Wiedergabe eines Internetstreams mit einer Batch-Datei.


    1) IP-Adresse im VLC wiedergeben:

    Code
    http://zdf1314-lh.akamaihd.net/i/de14_v1@392878/master.m3u8


    2) Batch-Datei für 32-Bit Version des VLC-Players (z.B. "VLC-Quit.bat"):

    Code
    :Begin batch file
    cd c:\program files (x86)\videolan\vlc 
    vlc vlc://quit


    Nach dem ausführen der Batch-Datei wird die Wiedergabe des Streams beendet.


    Vielleicht hilft dieser Vorschlag.


    MfG
    Thomas

    • Official Post

    Hallo Andreas,


    Danke für das gut gemachte Bildschirmvideo, so kann man das Vorgehen sehr gut verfolgen.
    Bei meinen Tests mit Deinen Batch-Dateien unter dem Betriebssystem Windows 7 (64 Bit) haben ich gleiche Ergebnisse erhalten. Der VLC-Player wird per Batch gestartet. Im Hintergrund bleibt das CMD-Fenster aber aktiv. Danach lässt sich der VLC-Player mit der "VLC-Quit.bat" Datei nicht beenden.


    1) Probiere einmal in der Benutzeroberfläche des VLC-Player Menü / Medien / Netzwerkstream öffnen und die Stream-IP-Adresse hier direkt einzugeben. Nach der Wiedergabe des Livestreams kann ich mit der "VLC-Quit.bat" Datei den VLC-Player dann schließen.


    2) Zweite Variante. Ergänze die Start-Batch-Datei mit dem Eintrag (start "" ).

    Code
    start  "" "C:\Program Files (x86)\VideoLAN\VLC\vlc.exe" http://zdf1314-lh.akamaihd.net/i/de14_v1@392878/master.m3u8


    Jetzt wird der VLC-Player mit dem Stream gestartet und das Eingabefenster wird sofort wieder geschlossen.


    Die "VLC-Quit.bat" Datei sollte jetzt den VLC-Player beenden. Es dauert aber ein bis drei Sekunden.


    MfG
    Thomas

    • Official Post

    Hallo Andreas,


    noch eine Ergänzung. Um auszuschließen, dass der VLC-Player durch falsche Einstellungen anders als gewollt reagiert, sollte man alle Einstellungen zurücksetzen. Kodela hat dies hier beschrieben (http://www.vlc-forum.de/index.php/Thread/1018).
    Einfach beschrieben, den VLC-Player deinstallieren und Einstellungen und Cache löschen mit anschließender Installation und erneut Einstellungen und Cache löschen.


    MfG
    Thomas


  • Einfach beschrieben, den VLC-Player deinstallieren und Einstellungen und Cache löschen mit anschließender Installation und erneut Einstellungen und Cache löschen.


    Hallo Thomas,


    das hat es gebracht, gerade eben kam die Version 2.2.4, da hab ich die 2.2.3 deinstalliert, dann via CCleaner die Registry bereinigt (mehrfach bis keine Fehler mehr gefunden wurden), die 2.2.4 installiert und einmal manuell gestartet. Dann von Hand die Option "Nur eine Instanz erlauben" gesetzt, VLC geschlossen und nun geht es.


    Der Trick via "start" den VLC zu starten ist nur in einem Batchfile nötig, via Code kann man den VLC auch direkt aufrufen.
    Wo der VLC installiert wurde kann man aus der Registry lesen. Ich tu meinen (Excel-) VBA-Code für die Mitleser mal unten dran.


    Vielen Dank für Deine Hilfe.


    Andreas.


    Option Explicit


    Private Function VLC() As String
    'Returns the path to VLC.EXE
    Dim i As Long
    Static EXE As String
    On Error Resume Next
    If EXE = "" Then
    EXE = CreateObject("WScript.Shell").RegRead( _
    "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Applications\vlc.exe\shell\Open\command\")
    i = InStr(1, EXE, "vlc.exe", vbTextCompare)
    If i = 0 Then
    Err.Raise 1001, "VLC", "Can not read location of VLC.EXE from registry"
    Else
    EXE = Trim$(Left$(EXE, i + 8))
    End If
    End If
    VLC = EXE
    End Function


    Sub TestPlay()
    Dim Args As String, CmdLine As String
    Dim QCP As String

    'You can download the example.qcp from here:
    'http://www.online-convert.com/file-format/qcp
    QCP = ThisWorkbook.Path & "\example.qcp"

    QCP = """" & QCP & """"
    Args = "--no-repeat --play-and-exit --qt-start-minimized"


    CmdLine = VLC & " " & Args & " " & QCP
    'Debug.Print CmdLine
    Shell CmdLine
    End Sub


    Sub TestQuit()
    Dim Args As String, CmdLine As String

    Args = "vlc://quit"


    CmdLine = VLC & " " & Args
    'Debug.Print CmdLine
    Shell CmdLine
    End Sub

  • Post by ErnstP ().

    This post was deleted by Susann ().