RTSP Stream speichern und streamen

  • Hallo, ich will einen Stream von einer IP Kamera (h264) speichern und gleichzeitig an einen Multicastport schicken.
    Das geht soweit mit dem vlc grafisch eingestellt stream-> xxx -> RTP/MPEG..... und dem Aufnahmebutton.
    (:sout=#rtp{dst=224.1.1.1,port=5004,mux=ts}:sout-keep")


    Jedoch soll dies mit cvlc über ein Script jede Stunde neu gestartet werden (Aufnahmen dann immer 1h).
    Leider habe ich keine Ahnung wie man das für cvlc in die richtige Syntax bringt. Aus den Beispielen https://wiki.videolan.org/Docu…To/Command_Line_Examples/ werde ich auch nicht ganz schlau.
    Zb. wann :sout oder --sout
    Besten Dank für Hilfe

  • Hallo sirAnton,


    mit welchem Betriebssystem arbeitest Du? Bei mir unter Windows gibt es zumindest seit 2.0.0 keine cvlc.exe mehr. Warum brauchst Du die cvlc.exe? Ich habe sie noch nie gebraucht.


    Es gibt hier im Unterforum das Thema F30 Kommandozeile - Aufruf und Parameterübergabe. Dort kannst Du einiges für Dein Vorhaben nachlesen.


    Das mit dem stündlichen Neustart kann man eventuell über einen Scheduler lösen.


    Ach ja, der Unterschied zwischen dem Doppelpunkt und den beiden Bindestrichen, den gibt es eigentlich gar nicht, wenn vor beiden eine Leerstelle steht. Probiere es doch einfach einmal aus. Auf der von Dir angegebenen Wiki-Seite fand ich allerdings nur einmal einen Doppelpunkt vor einem globalen Kommando und das war in der Beschreibung. Wie gesagt, Du kannst an Stelle von zwei Bindestrichen grundsätzlich auch einen Doppelpunkt setzen, wenn Du die Leerstelle vor den Bindestrichen mitnimmst. Für die Schreibweise von globalen Parametern werden üblicherweise allerdings die Bindestriche und nicht der Doppelpunkt vorangestellt. Dieser wird als Trennzeichen von zusammengehörigen Parameterteilen verwendet, zum Beispiel IP-Adresse:Port (url_video=192.168.1.2:1213).


    MfG, kodela

  • Danke für die Antwort,
    ich verwende Linux da das dann auf einem kleinen Server laufen soll, hoffe das Speichern und Streamen per rtp benötigt nicht so vier Rechenleistung(muss ja nix encodiert werden).
    Ob cvlc oder vlc ist dann glaube ich egal. Den Aufruf mache ich dann über cron.
    Der Link Aufruf und Parameterübergabe ist gut erklärt, jetzt sehe ich etwas klarer.
    Jedoch laufen die Beispiele komischerweise nicht unter Ubuntu Linux VLC media player 2.2.2 Weatherwax (revision 2.2.2-0-g6259d80)


    Wenn ich zb. vor sout -- gegen : tausche geht die Ausgabe am Server, Streaming aber nicht.
    Werde wohl noch experimentieren müssen und mich nochmal melden.
    Und wann muss man eigentlich das # verwendet werden?


    Viele Grüße

  • Hallo sirAnton,


    der Unterschied zwischen vlc und cvlc liegt darin, dass mit cvlc das Interface nicht gestartet wird. Das kann man zumindest unter Windows auch über den Parameter -Idummy erreichen. Wie bereits gesagt, unter Windows gibt es die cvlc.exe nicht mehr.


    Dass zumindest einige der Beispiele in dem von mir verlinkten Thema mit der aktuellen Version nicht funktionieren, ist mir bekannt. Ich verwende dann die Version 2.0.8, mit der gibt es die wenigsten Streamingprobleme. Wie das unter Linux ist, weiß ich nicht.


    Das Doppelkreuz # steht vor einem Modul. Damit werden gleichnamige Bezeichner für ein Modul und eine Funktion von einander unterschieden. In dem von mir verlinkten Thema im Teil 2 Abschnitt Syntax der Parameterübergabe ist unter b) --sout oder der Output-String dazu etwas gesagt.


    Auch zu den Doppelpunkten/Bindestrichen findet sich in dem von mir verlinkten Thema im Teil 2 Abschnitt Syntax der Parameterübergabe unter c) globale Optionen ein Hinweis dazu.


    MfG, kodela

  • Hallo, ich habe nun doch noch mal ein Versuch gestartet...


    Code
    1. Kamera streamen: OK
    2. vlc 'rtsp://192.168.178.19:554/user=admin&password=&channel=1&stream=0.sdp?' :sout=#rtp{sdp=rtsp://:8554/} :sout-keep
    3. rtsp://127.0.0.1:8554
    4. Aufzeichnen: OK
    5. vlc 'rtsp://192.168.178.19:554/user=admin&password=&channel=1&stream=0.sdp?' :sout=#file{dst=/home/xy/x/x.ts} :sout-keep
    6. Kamera streamen und aufzeichnen: Geht nicht....
    7. vlc 'rtsp://192.168.178.19:554/user=admin&password=&channel=1&stream=0.sdp?' :sout=#duplicate{dst=#rtp{sdp=rtsp://:8554/},dst=#file{dst=/home/xy/x/x.ts}} :sout-keep

    einzeln gehen die gewünschten Funktionen, jedoch bei #duplicate kommt immer folgender Fehler:


    [00007f6280001088] core stream output error: stream chain failed for `duplicatedst=#file{dst=/home/xy/x/x.ts}'
    [00007f6278896de8] core input error: cannot start stream output instance, aborting


    Hab ich da noch einen Syntaxfehler drinnen, oder geht bei mir das #duplicate nicht?

  • Hallo sirAnton,


    mich wundert, dass bei Dir überhaupt etwas geht. Kannst Du diesen Teilstring erklären:


    user=admin&password=&channel=1&stream=0.sdp?


    Hier erfolgt Zuweisung auf Zuweisung auf Zuweisung auf Zuweisung - warum?


    Du hast meiner Meinung nach nur Glück, dass der VLC so fehlertolerant ist.


    Schau Dir doch noch einmal das Thema F30 Kommandozeile - Aufruf und Parameterübergabe an.


    Würde das Streamen der Kamera mit diesem Kommandozeilenstring funktionieren?


    vlc rtsp://admin:channel@192.168.178.19:554/0 --sout=#rtp{sdp=rtsp://:8554/} :sout-keep



    MfG, kodela

  • Hallo, das will die chinesische IP-Kamera (ELP) so. Wird auch explizit für den vlc player im Datenblatt so angegeben.
    Die ist da auch in keinster weise tolerant.


    vlc rtsp://admin:channel@192.168.178.19:554/0 --sout=#rtp{sdp=rtsp://:8554/} :sout-keep
    geht nicht.


    Der vlc leitet den String ja nur an die Netzwerkadresse weiter.
    Aber mein Beispiel geht auch nicht wenn ich statt der rtsp Adresse eine Datei angebe.

  • Hallo sirAnton,


    versuche es dann doch einmal auf folgendem Wege:


    RTSP-Stream im TS-Format speichern und mit einem geringen Zeitversatz von einigen Sekunden die in Aufzeichnung befindliche TS-Datei zu streamen. Das müsste auf jeden Fall funktionieren.


    MfG, kodela

  • Danke kodela,
    so geht das schon. Finde die Lösung aber nicht elegant wegen dem zusätzlichen Zeitversatz.
    Kann der vlc als Streamingserver eigentlich irgendwie mehrere Clients handeln? Hab es mal erfolglos ausprobiert mit 2 clients zuzugreifen...
    Sonst würde ich eine Instanz des vlcs laufen lassen der den Stream der Kamera empfängt und als Stream ins Heimnetz schickt.
    Andere vlc Instanzen könnten dann das aufnehmen und anzeigen übernehmen.( Die Kamera kann leider auch nur ein Stream handeln.)
    Viele Grüße
    sirAnton

  • Hallo, dann wäre ich wieder bei dem bei mir nicht funktionierenden #duplicate


    :sout=#duplicate{dst=#rtp{sdp=rtsp://:8554/},dst=#rtp{sdp=rtsp://:8555/}}
    -> Fehler


    [00007fdeac846d08] core input error: cannot start stream output instance, aborting
    [00007fdeb8001048] core stream output error: stream chain failed for `duplicatedst=#rtp{sdp=rtsp://:8555/}'


    Sollte ich ältere Linux Versionen des vlc testen?

  • Hallo sirAnton,


    ich weiß zwar immer noch nicht, wie Deine Frage gemeint war, aber lassen wir das.


    Du willst den Stream von einer IP Kamera speichern und gleichzeitig an einen Multicastport schicken. Wie Du hier im Beitrag Nr. 5 schreibst, funktioniert das Aufzeichnen und Streamen jeweils für sich alleine. Nur beides zusammen bekommst Du nicht hin.


    Du kannst Dir doch eine Batchdatei erstellen und damit zwei Instanzen des VLC aufrufen, die eine für das Streaming, die andere für die Aufzeichnung.


    MfG, kodela

  • Hallo kodela,
    wie oben beschrieben kann leider nur einer auf den Stream der Kamera zugreifen.
    Also wollte ich mit dem vlc den Stream sozusagen aufteilen. Einen aufnehmen den anderen streamen.
    Dachte das würde mit #duplicate funktionieren.
    Nur leider geht das mit dem getesteten vlc Linux 2.2.2 und dem vlc Windows 2.2.4 nicht.


    "C:\Program Files\VideoLAN\VLC\vlc.exe" "rtsp://192.168.178.19:554/user=admin&password=&channel=1&stream=0.sdp?" :sout=#duplicate{dst=#rtp{dst=127.0.0.1,port=5004,mux=ts},dst=#file{C:\x.ts}} :sout-keep
    :-( .......


    Einzeln geht es....

  • Hallo kodela,
    wie unter #9 geschrieben ist mir dann der Zeitversatz zu hoch, Normal sind das 1,5sec in meinem Netzwerk.
    Bei der Version mit der Datei sind es dann 4 sec.
    Warum #duplicate nicht funktioniert ist mir weiterhin ein Rätsel....
    Na ja vielleicht in Zukunft...
    Viele Grüße, und danke für deine Mühe.