Video und Audio getrennt streamen

  • Hallo DocMax,


    das folgende Kommandozeilen-Beispiel stellt eine lokale Audio-Wiedergabe und einen UDP-Stream für das Video bereit. Mit dem Parameter --no-sout-display-video wird die lokale Videowiedergabe unterdrückt.

    Code
    @echo off
    start "" "C:\Program Files\VideoLAN\VLC\vlc.exe" --network-caching=300 "http://static.france24.com/live/F24_EN_LO_HLS/live_web.m3u8" --sout=#duplicate{dst=display,dst=es{access-video=udp,mux-video=ts,dst-video=224.1.1.1:1234}} --no-sout-display-video :sout-keep



    Mit dem zweiten Kommandozeilenscript erfolgt die Videowiedergabe.

    Code
    @echo off
    start "" "C:\Program Files\VideoLAN\VLC\vlc.exe" --network-caching=300 "udp://@224.1.1.1:1234" :no-sout-all :sout-keep


    Beide Kommandozeilen-Beispiele sind für eine 64-Bit Version des VLC-Players.

    Ich habe mit der Version 3.0.7.1 unter Windows 10 erfolgreiche Test durchgeführt.

    Zwischen der Bild- und Ton-Wiedergabe liegt ein zeitlicher Versatz von ca. 1,2 Sekunden.


    MfG

    Thomas

  • Hallo Thomas,


    danke. Zwischenzeitlich habe ich mir auch was gebastelt, was auch funktioniert:


    Code
    vlc video.mkv --sout '#duplicate{dst="es{access-video=http,mux-video=ts,dst-video=:8080/stream}",dst=display{novideo}}' --delay -2000

    Gruß.

    DocMAX

  • Hallo zusammen,


    da ich kurz vor dem verzweifeln bin, hoffe ich, das mir jemand von Euch weiterhelfen kann. Deshalb hänge ich mich mal an diesen Thread dran. Im offiziellen VLC Forum hat man mich nur auf die CLI Paramter verwiesen, bei der Vielzahl an Kombinationen sehe ich aber nicht mehr durch. Folgendes möchte ich mit VLC realisieren.


    Ein MP4 File soll wiedergegeben werden. Dabei soll der Video-Part lokal ohne Audio am HDMI ausgegeben werden. Das funktioniert bereits. Der Audio-Part soll über HTTP gestreamt werden. An dieser Stelle hänge ich. Weder das "es"-Modul bekomme ich ans laufen, noch funktioniert es mit "dst-audio". Somit wird derzeit Video und Audio gestreamt - was ich aber nicht möchte.


    Ausserdem hatte ich festgestellt, das durch das Streaming das Audio ein Delay hat. Ich hoffe, das der verwendete "delay" Parameter korrekt ist um dies anzugleichen. Hier meine bisherige command line


    vlc file:///"C:/temp/Video/Test.mp4" --sout=#duplicate{dst=http{mux=ffmpeg{mux=flv},dst-audio=:8080/},dst=display{noaudio, delay=1470} :no-sout-all :sout-keep


    Es wäre super, wenn mir irgendjemand mit einem Tipp weiterhelfen könnte.


    Tausend Dank!

    Mario

  • Hallo Mario,


    ja, die Anzahl der Kommandozeilenparameter ist nahezu unüberschaubar.

    - https://wiki.videolan.org/VLC_command-line_help/


    Im folgenden Beispiel kann ich mit dem VLC-Player Version 3.0.10 (64-Bit) unter Windows 10 das Videobild lokal ausgeben und somit auch über HDMI.

    Code
    @echo off
    start "" "C:\Program Files\VideoLAN\VLC\vlc.exe" --network-caching=300 "file:///D:/Video/Musikvideo.mp4" --sout=#duplicate{dst=display,dst=es{access-audio=http,mux-audio=ts,dst=:8080}} --no-sout-display-audio :sout-keep

    Das Tonsignal wird per http auf dem Port :8080 im lokalen Netzwerk gestreamt.


    In einer zweiten VLC-Instanz kann man die Netzwerkadresse http://127.0.0.1:8080 für die Tonwiedergabe einsetzen.

    Auf einem zweiten Computer setzt man die IP-Adresse des Streamservers ein.


    MfG

    Thomas

  • Hallo Thomas,


    vielen Dank für das Beispiel. Folgende Fehlermeldung erhalte ich beim Start damit (VLC 3.0.10, Windows 64-Bit)


    Streaming/Transkodierung fehlgeschlagen:

    Es gibt kein passendes Streamausgabe-Access-Modul für "/://:8080".


    Es scheint jedoch, das Video und Audio wie gewünscht geplittet wiedergegeben werden. Hättest Du noch eine Idee, wie ich die Ursache für die Fehlermeldung herausbekomme? Die Media-Information der Datei habe ich angehangen. Hier auch nochmal meine aktuelle command line:


    vlc file:///"C:/temp/Video/Test.mp4" --sout=#duplicate{dst=display{delay=500},dst=es{access-audio=http,mux-audio=ts,dst=

    :8080}} --no-sout-display-audio :sout-keep


    Nochmals vielen Dank für das Beispiel !!!


    Tschöö

    Mario

  • Hallo Thomas,


    ich habe die Streamout-Parameter mal einzeln getestet.


    Dieser Teil funktioniert ohne Fehlermeldung

    --sout=#duplicate{dst=display{delay=500}}


    Lediglich dieser Teil mit dem ES-Modul erzeugt die o.g. Meldung

    --sout=#duplicate{dst=es{access-audio=http,mux-audio=ts,dst-audio=:8080/}}


    Hättest Du noch eine Idee, was an der Syntax falsch sein könnte? Ist halt leider wieder das ES-Modul, bei dessen Parameter Kaskadierung ich absolut nicht durchsehe - mal geschweifte Klammer, mal Hochkomma, mal Anführungszeichen.


    thx

    Mario

  • Hallo Mario,


    danke für die Rückmeldung.


    keine Fehlermeldung:

    ...dst=es{access-audio=http,mux-audio=ts,dst=:8080}}...

    Syntax-Fehlermeldung:

    ...dst=es{access-audio=http,mux-audio=ts,dst=:8080/}}...


    Wenn ich den Schrägstrich nach der Portangabe weglasse, dann tritt die Fehlermeldung nicht auf.

    Fehlermeldung "VLC3010-http-Syntax-Fehlermeldung.PNG":


    MfG

    Thomas

  • Hallo Thomas,


    ich habe einfach mal den Debug Level angeschaltet - es lag nicht an der Syntax. Das Problem ist wohl, das ich "vlc ..." über ein normales "cmd" aufrufe. Ich erhalte dann die nachfolgende "Permission denied" Meldung im Log:


    main debug: looking for sout access module matching "any": 10 candidates

    file error: cannot create stream-1-h264.: Permission denied

    main debug: no sout access modules matched

    es error: no suitable sout access module for `/://stream-1-h264.'

    duplicate debug: - failed for output 0

    main warning: new sout input failed (sout_input: 0000000005e69590)

    main error: cannot create packetizer output (h264)

    duplicate debug: duplicated a new stream codec=mp4a (es=1 group=0)

    main debug: Buffering 25%

    es debug: creating `http/ts://:8080'


    Starte ich "cmd" mit Admin Rechten ist alles bestens. Da ich VLC immer nur standardmäßig installiere, wundert es mich, das scheinbar der normale User nicht völlig ausreicht. Ist Dir da was bekannt?


    thx

    Mario

  • Hallo Mario,


    ich arbeite mit meinen Batch-Dateien immer in einem lokalen Laufwerk des Computers, ausserhalb des Windows Benutzerverzeichnisses.

    Mir ist bislang nicht aufgefallen, dass man für die Kommandozeile unterschiedliche Benutzerrechte benötigt.


    Vermutlich war in meinem Kommandozeilenbeispiel noch ein Fehler versteckt, den ich dank deiner Rückfragen jetzt gefunden habe.

    Im Script wird für den Elementar-Stream #es zweimal der Parameter dst= eingesetzt, was vermutlich zu der Fehlermeldung Es gibt kein passendes Streamausgabe-Access-Modul für "/://:8080 führt.

    Es ist besser für die Tonausgabe den Parameter dst-audio= zu verwenden. Hier ist der Schrägstrich nach der Portangabe egal.


    Code
    @echo off
    start "" "C:\Program Files\VideoLAN\VLC\vlc.exe" --network-caching=300 file:///"D:/Video/Musikvideo.mp4" --sout=#duplicate{dst=display{delay=300},dst=es{access-audio=http,mux-audio=ts,dst-audio=:8080/}} --no-sout-display-audio :sout-keep


    Danke für die Rückmeldungen.


    MfG

    Thomas

  • Hallo Thomas,


    sorry das ich doch nochmal nerve, aber ich muss jetzt leider für mein Vorhaben auf einen Mac wechseln (war nicht geplant). Hättest Du eventuell noch einen Tipp, wie die nun fertige command line dort aussehen muss?


    Das ist meine nun fertige Windows command line


    vlc file:///"C:/temp/Video/Test.mp4" --sout=#duplicate{dst=display{delay=500},dst=es{access-audio=http,mux-audio=ts,dst-audio=:8080/}} --no-sout-display-audio :sout-keep



    Und hier die (vermutliche) Mac command line. Leider erhalte ich aber einige Fehler


    $ /Applications/VLC.app/Contents/MacOS/VLC -I rc /Test.mp4 --sout='#duplicate{dst=display{delay=500,dst=es{access-audio=http,mux-audio=ts,dst-audio=:8080/}} --no-sout-display-audio :sout-keep



    Hier die Mac-Meldungen:


    Last login: Fri May 1 13:17:47 on ttys000

    AlexR-MacBook:~ alex$ /Applications/VLC.app/Contents/MacOS/VLC /Users/alex/Desktop/Test.mp4 --sout=#duplicate{dst=display{delay=500},dst=es{access-audio=http,mux-audio=ts,dst-audio=:8080/}} --no-sout-display-audio :sout-keep

    VLC media player 3.0.10 Vetinari (revision 3.0.10-0-g7f145afa84)

    [00007fc31740e3e0] main libvlc: VLC wird mit dem Standard-Interface ausgeführt. Benutzen Sie 'cvlc', um VLC ohne Interface zu verwenden.

    [00007fc3175daf50] main stream output error: stream chain failed for `duplicatedst=esdst-audio=:8080/'

    [00007fc3190340f0] main input error: cannot start stream output instance, aborting

    [00007fc31b0520a0] main stream output error: stream chain failed for `duplicatedst=esdst-audio=:8080/'

    [00007fc31c0000f0] main input error: cannot start stream output instance, aborting


    Ich habe leider überhaupt keine Ahnung von Mac, weshalb ich nicht weiß, ob die VLC syntax falsch ist oder ich einfach einen Mac-Fehler mache.


    Besten Dank und Tschöö

    Mario

  • Hallo Thomas,


    kein Problem, ich wäre schon glücklich, überhaupt den entscheidenden Tipp zu erhalten - da warte ich auch gern.


    Das Mac Wiki hatte ich bereits gelesen, es ist jedoch wie ich finde sehr oberflächlich, was das Thema CLI und Streamout Module angeht.


    Danke und schönes WE!

    Mario

  • Hallo Mario,


    bin jetzt einen Schritt weiter gekommen und konnte die Fehlermeldung replizieren.

    -Stream Output Error


    Im Kommandozeilenscript für den Mac fehlen die Hochkomma ("#duplicate...") für das Modul duplicate.

    Bash
    #!/bin/sh
    /Applications/VLC.app/Contents/MacOS/VLC -I rc /Test.mp4 --sout="#duplicate{dst=display{delay=500},dst=es{access-audio=http,mux-audio=ts,dst-audio=:8080/}}" --no-sout-display-audio :sout-keep


    Ich habe die Kommandozeilendatei mit den Vorgaben für den Mac mit TextEdit bearbeitet bzw. nano erstellt.


    Gespeichert wird die Datei mit der Endung *.command z.B auf dem Desktop (~/Desktop/Dateiname.command).

    Anschliessend im Terminal die Datei ausführbar machen mit: chmod a+x Dateiname.command.


    Ein Doppelklick auf die *.command Datei führt das Kommandozeilenscript aus.


    Ob die Funktion der Kommandozeile wie unter Windows funktioniert müsste man noch prüfen und ggf. anpassen.


    MfG

    Thomas