VLC Netzwerkstream "anzeigen" und weiterstreamen

  • Hallo,


    ich habe mal wieder ein sehr spezielles Problem, wo ich nicht ganz weiter komme...


    Im Prinzip habe ich einen http-Netzwerkstream eines Servers, den ich auf meinem Client 1 anhören will, aber gleichzeitig auch an einen Client 2 weiterstreamen will (weil dieser keine direkte Verbindung zum Server hat).
    Den Stream weiterstreamen war halb so wild, ich habe dazu folgende Kommandozeile verwendet:

    Code
    VLC.exe --qt-start-minimized --loop http://192.0.0.3:1004/ :live-caching=0 :sout=#duplicate{dst=std{access=http,dst=:1007,mux=mp3}} :sout-all :sout-keep


    Soweit so gut. Aber nun wollte ich den (reinen Audio-)Stream auch gleichzeit am Client 1 ausgeben lassen - mit dem obigen Kommando ging das nicht. Ich habe es also so angepasst:

    Code
    VLC.exe --qt-start-minimized --loop http://192.0.0.3:1004/ :live-caching=0 :sout=#duplicate{dst=display,dst=std{access=http,dst=:1007,mux=mp3}} :sout-all :sout-keep


    Nun kann ich es am Client 1 zwar ausgeben/anhören, aber er scheint nicht mehr weiter zu streamen? Was mache ich falsch?
    In der Dokumentation habe ich schon nachgesehen, allerdings werde ich da nicht ganz schlau draus, weil es mit diesen Chains wohl diverse verschiedene Kombinationen gibt...

  • Hallo,


    danke für deine Antwort. Leider verstehe ich nicht ganz, worauf du hinaus willst.
    Ich habe die Anleitung jetzt mal komplett von oben nach unten durchgearbeitet, aber letztendlich keine Lösung für das Problem gefunden.


    Mein geänderter CMD-Befehl zum Testen (mit einem beliebigen Internetradio, damit ich auch was höre):

    Code
    VLC.exe --extraintf=logger --verbose=2 --logmode=text --file-logging --logfile=C:\VLC_2.1.5\vlc.log --loop http://listen.radionomy.com/1HITS60s.m3u :live-caching=0 :sout=#transcode{vcodec=none,acodec=mp3,ab=192,channels=2,samplerate=48000}:duplicate{dst=http{mux=mp3,dst=:1007/},dst=display} :sout-all :sout-keep


    Geändert hat sich leider nichts. Nach wie vor geht die lokale Ausgabe, aber ich kann mich an Port 1007 nicht verbinden (egal, ob mit dem alten oder dem neuen Befehl). Wenn ich nur den Stream auf Port 1007 weiterstreame, dann geht's wunderbar.
    Im Log finde ich nichts ungewöhnliches, kein Error oder sonstige Anzeichen, dass etwas abgebrochen wurde. Er sagt einfach sowas wie "Listening on port *:1007" - aber ich kann mich dennoch nicht verbinden.

  • Hallo in die Runde,


    mit volgendem Script könnte es klappen.


    Beispiel-Script für eine installierte 32-Bit VLC-Version

    Code
    :Begin batch file
    cd c:\program files (x86)\videolan\vlc
    vlc http://listen.radionomy.com/1HITS60s.m3u :network-caching=1000 --sout=#duplicate{dst=http{dst=:8080,mux=mp3},dst=http{dst=:8081,mux=mp3} :sout-keep


    Auf dem Client 1 und dem Client 2 muss die IP-Adresse und der Port des PCs eingegeben werden, auf dem das VLC-Script läuft. Der zweite IP-Stream wird durch eine weitere Zielangabe dst=http{...} angegeben. Siehe auch Multiple Streaming im Link (https://wiki.videolan.org/Docu…To/Command_Line_Examples/).


    MfG
    Thomas

  • Hallo,


    danke für deine Antwort, allerdings hast du den Hinweis im ersten Beitrag wohl übersehen :-)
    Netzwerk-Aufbau:
    Server <----------> Client 1 <----------------> Client 2


    Client 2 hat keine direkte Verbindung zum Server (der Webradio-Stream ist nur für Testzwecke).
    Deswegen muss Client 1 als Relais dienen und gleichzeitig wiedergeben - am Besten ohne zwei Instanzen von VLC laufen zu haben. Wir schreiben hier das Skript für Client 1.
    Und genau das funktioniert (warum auch immer?) scheinbar nicht. Entweder lokale Wiedergabe oder Stream weiterstreamen. Beides zusammen mag nicht bisher.

  • Sorry und Danke noch einmal für die Skizze des Netzwerkaufbaus.


    Danach müsste man auf dem Client 1 einen zweiten VLC-Script laufen lassen, der einmal den IP-Stream vom Server entgegen nimmt und einmal als neuen IP-Stream wiedergibt und als zweites auf dem Bildschirm ausgibt.


    Beispiel Script für "Client 1":

    Code
    :Begin batch file
    cd c:\program files (x86)\videolan\vlc
    vlc http://IP-Adresse-Server:8080 :network-caching=1000 --sout=#duplicate{dst=http{dst=:8081,mux=mp3},dst=display} :sout-keep


    Das Beispiel-Script ist für eine 32-Bit Installation des VLC auf dem "Client 1". Die IP-Adresse muss an Deine Vorgaben angepasst werden.
    Im Grunde müsste es so etwa klappen. Im ersten Beispielscript lässt man folgende Zeichenfolge weg ",dst=http{dst=:8081,mux=mp3".
    Die zweite geschweifte Klammer am Ende muss erhalten bleiben für die Angabe "--sout=#duplicate{dst...{...}} :sout-keep.


    Auf dem Client 2 muss für die Wiedergabe mit dem VLC-Player die IP-Adresse vom Client 1 eingetragen werden (

    Code
    [url]http://IP-Adresse-Client1:8080[/url]

    ).


    MfG
    Thomas

  • Ok, vielen Dank, soweit hab ich das verstanden. Unterscheidet sich von meinem Skript ja eigentlich nur im Hinblick auf das Transcoding.


    D.h. es ist nicht möglich, das Problem mit einer einzelnen Instanz zu lösen?
    Es muss zwingend mittels zwei Instanzen gemacht werden?

  • Hallo FFK,


    ich will Dir ja nicht unterstellen, dass Du oberflächlich bist, aber hast Du Dir wirklich das von mir verlinkte Thema "komplett von oben nach unten durchgearbeitet"? Ich meine das Thema und nicht den ersten Beitrag. Ich zitiere eine Satz daraus:


    Quote

    Das Video soll so wie es ist, also ohne Transkodierung, für alle Netzteilnehmer mit SAP-Ankündigung ins Heimnetz gestreamt werden und gleichzeitig auch auf dem Server-PC angezeigt werden.


    Dort geht es zwar um ein Video, auch die Quelle ist eine andere wie bei Dir, darauf kommt es aber nicht an. Es geht um das Prinzip, wie Du vorgehen musst.


    Und noch etwas, zum Testen sollte man auf alle überflüssigen Parameter verzichten.


    MfG, kodela


    PS:
    Hoppla, da hat sich einiges getan zwischen Beginn und Beendigung meiner Antwort. Das kommt davon, wenn man aufgehalten wird.


    Aber auf den ersten Blick denke ich, dass die erste Antwort von Thomas doch vom Ansatz her zumindest den richtigen Weg zeigt und die zweite Antwort funktionieren müsste.

  • hast Du Dir wirklich das von mir verlinkte Thema "komplett von oben nach unten durchgearbeitet"? Ich meine das Thema und nicht den ersten Beitrag.


    Ja, ich habe mir alles einmal komplett durchgelesen und nach einem ähnlichen Szenario bzw. der korrekten Schreibweise für meine Chains gesucht.


    Quote

    Das Video soll so wie es ist, also ohne Transkodierung, für alle Netzteilnehmer mit SAP-Ankündigung ins Heimnetz gestreamt werden und gleichzeitig auch auf dem Server-PC angezeigt werden.


    Soweit so gut, die Stelle habe ich wahrgenommen. Allerdings will ich es nicht mit RTP streamen. Ich kann also nur "raten" und im übertragenen Sinne würde es dann genau so aussehen, wie ich es im zweiten Post dargestellt habe:


    Vorschlag der Anleitung:
    vlc file:///D:/Ordner/TestVideo.mp4 --sout #duplicate{dst=display,dst=rtp{dst=224.1.1.1,port=5004,mux=ts,sap,name=TestStream}}


    Meine Version
    VLC.exe --qt-start-minimized --loop http://listen.radionomy.com/1HITS60s.m3u :live-caching=0 :sout=#transcode{vcodec=none,acodec=mp3,ab=192,channels=2,samplerate=48000}:duplicate{dst=display,dst=http{mux=raw,dst=:1007/}} :sout-all :sout-keep


    Die in rot dargestellten Parameter sind optional - diese habe ich nun testweise weggelassen, allerdings hat sich dadurch keine Änderung eingestellt.
    Die Schreibweisen sind untereinander austauschbar, d.h. :sout beudeutet soviel wie --sout oder? Nur dass es sich bei : auf das Vorangegangene bezieht, oder so ähnlich...


    Irgendwie stehe ich auf dem Schlauch...

  • Hallo FFK,


    warum siehst Du Dir das nicht an, auf das man Dich hinweist? Wo steht im Beispiel von Thomas oder in dem von meinem Link etwas von Transcodieren? Und welche Rolle spielt es, unter welchem Protokoll ein Stream weitergeleitet wird, ob RTP oder HTTP ist doch Jacke wie Hose.


    Noch eine Frage: Was soll der Loop-Modus für einen Stream?


    MfG, kodela

  • Hallo,


    also ich hab es mir angesehen - bin ich einfach zu blöd oder versteht ihr nicht, was ich sage? Und das meine ich nicht böse!!


    Ich habe doch eben geschrieben, dass es trotz weggelassenem transcode nicht funktioniert.
    Und ob nun RTP oder HTTP ähnlich, gleich oder was völlig anderes sind ist doch an sich auch egal.


    Ich fragte, ob es möglich ist, das mit einem HTTP-Stream zu machen...
    Sorry, wenn ich euch eure Zeit gestohlen habe, aber ich habe (so denke ich) eine ganz klare Frage gestellt und bin auch sehr bemüht (was man vielleicht an meinen verschiedenen Lösungsansätzen sieht), aber ich will doch nicht anfangen zu diskutieren, was ich am Ende brauche? Wenn du mir nicht helfen willst, dann sag es gleich, dann sparen wir uns alle die Zeit.


    Trotzdem danke für deine neuerliche Antwort. Ich nehme dann an, dass es nach meinen Vorgaben nicht möglich ist, es zu realisieren. (Und nein, ich will immernoch keinen RTP-Stream)

  • Hallo FFK,


    nur nicht gleich beleidigt sein und vor allem bitte nicht unterstellen, dass man Dir nicht helfen will. Es ist Dir aber nicht geholfen, wenn man Dir eine fertige Lösung anbietet.


    Eben habe ich übrigens gesehen, dass die von Dir verwendete MRL "http: //listen.radionomy.com/1HITS60s.m3u" keinesfalls optimal ist. Richtig wäre "http: //streaming.radionomy.com/1HITS60s" (die Leerstelle nach dem Doppelpunkt steht nur, damit der Editor keinen Kink daraus macht). Das erkennt man daran, dass der VLC Deine MRL so umwandelt, wie die von mir aussieht.


    Aber zurück zu Deiner Kommandozeile. Du erleichterst anderen nicht unbedingt, Dich zu verstehen, wenn man sich farbige Textteile wegdenken muss, um zu sehen, was bei Dir wie aussieht. Warum schreibst Du den verwendeten Kommandozeilenstring nicht so:


    Code
    VLC.exe listen.radionomy.com/1HITS60s.m3u :sout=#duplicate{dst=display,dst=http{mux=raw,dst=:1007/}


    Dann würdest vielleicht sogar Du erkennen, dass hier eine geschweifte Klammer fehlt, würdest Dich vielleicht auch fragen, ob die Streaming-MRL so richtig ist.


    Du warst in Deinem ersten Beitrag schon nahe an der Lösung. Das Weiterstreamen hat funktioniert und die Wiedergabe. Das alles musst Du nur noch korrekt nach den Dir gezeigten Beispielen zu einer funktionierenden Kommandozeile packen.


    MfG, kodela

  • nur nicht gleich beleidigt sein und vor allem bitte nicht unterstellen, dass man Dir nicht helfen will.


    Na, aber mir wird ja auch unterstellt, ich würde die Hilfen weder annehmen noch ernsthaft durchlesen? ;) Ein bisschen beleidigt sein hilft scheinbar, denn diese Antwort war schon deutlich hilfreicher in meinen Augen - danke dafür!


    Es ist Dir aber nicht geholfen, wenn man Dir eine fertige Lösung anbietet.


    Das sehe ich zwar anders (Stichwort Reverse Engineering), aber ich habe mit dieser Sichtweise auch kein Problem, sofern die Tips letztendlich zu einer Lösung führen und nicht weiter verwirren.


    Eben habe ich übrigens gesehen, dass die von Dir verwendete MRL "http: //listen.radionomy.com/1HITS60s.m3u" keinesfalls optimal ist. Richtig wäre "http: //streaming.radionomy.com/1HITS60s" (die Leerstelle nach dem Doppelpunkt steht nur, damit der Editor keinen Kink daraus macht). Das erkennt man daran, dass der VLC Deine MRL so umwandelt, wie die von mir aussieht.


    Okay, danke für den Hinweis. Habe ich nicht bemerkt, die URL wurde auf der Homepage so angegeben und das habe ich nicht mehr nachgeprüft, nachdem ja Ton zu hören war :P


    Aber zurück zu Deiner Kommandozeile. Du erleichterst anderen nicht unbedingt, Dich zu verstehen, wenn man sich farbige Textteile wegdenken muss, um zu sehen, was bei Dir wie aussieht. Warum schreibst Du den verwendeten Kommandozeilenstring nicht so:
    Du warst in Deinem ersten Beitrag schon nahe an der Lösung. Das Weiterstreamen hat funktioniert und die Wiedergabe. Das alles musst Du nur noch korrekt nach den Dir gezeigten Beispielen zu einer funktionierenden Kommandozeile packen.


    Dann machen wir es nochmal ganz kurz und eindeutig. Muss man mir ja nur sagen.


    Variante 1 (getestet; funktioniert)

    Code
    VLC.exe http://listen.radionomy.com/1HITS60s :sout=#duplicate{dst=std{access=http,dst=:1007,mux=raw}}


    Variante 2 (getestet; funktioniert)

    Code
    VLC.exe http://listen.radionomy.com/1HITS60s :sout=#duplicate{dst=display}


    Variante 3 (alias 1+2) (getestet; funktioniert auch)

    Code
    VLC.exe http://listen.radionomy.com/1HITS60s :sout=#duplicate{dst=display,dst=http{dst=:1007,mux=raw}}


    (da hatte ich wohl irgendwo einen Tippfehler, weil das heute Mittag nicht funktioniert hatte)


    Fertiges Kommando (getestet; funktioniert wunderbar)

    Code
    VLC.exe --qt-start-minimized --loop http://listen.radionomy.com/1HITS60s :live-caching=0 :sout=#duplicate{dst=display,dst=http{mux=raw,dst=:1007}} :sout-all :sout-keep


    Ich weiß also nicht genau, an welcher Stelle sich das Problem in Luft aufgelöst hat, aber es funktioniert nun - das zählt am Ende 8o
    Also danke für eure Hilfe! :thumbup:



    Edit: Vermutlich lag es dann am Transcoding bzw. einem Tippfehler da, nehme ich mal an. thweiss hat mir also schon gut geholfen, nur habe ich dann wohl irgendeinen Fehler beim Kopieren reingebracht - sorry dafür!


    Ach und wegen deiner Frage bzgl. des --loop bei einem Stream - das habe ich hier aus dem Forum! Und zwar ist es dazu da, dass die Wiedergabe erneut beginnt, wenn kurzzeitig die Verbindung oder der Stream gestört sind bzw. abbrechen. Funktioniert super!