Ankündigung

Einklappen
Keine Ankündigung bisher.

HowTo: rtsp Stream mit vlc in mjepg umwandel und in Edomi einbinden

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [Funktionen] HowTo: rtsp Stream mit vlc in mjepg umwandel und in Edomi einbinden

    Da ich bei der Anleitung von vento66 (Danke für die Inspiration!) mit meiner billigst-Cam aus Asien immer wieder Artefakte hatte (Bild ganz in Grau, Pinke Streifen am Unteren Rand) und ich das einfach nicht hinbekommen hab, hier eine Anleitung mit VLC.

    Bei meinem Edomi mit CentOS7 ist über
    Code:
    yum install vlc
    nur vlc mit Version 2.2xx installierbar.
    Daher habe ich nach dieser Anleitung (Danke!) folgende Schritte gemacht:
    Code:
    sudo yum install epel-release
    sudo yum install https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm
    sudo yum install vlc
    Wer als root unterwegs ist, braucht das "sudo" wohl nicht.

    Da vlc unter root-Rechten nicht läuft, muss eh ein neuer User angelegt werden: (nach hier)
    Code:
    adduser username
    passwd username
    Damit der User dann auch sudo kann:
    Code:
    gpasswd -a username wheel
    Nun kann vlc im Modus ohne GUI mit cvlc gestartet werden:
    (Hier gleich mit dem Stream und Outputdefinition)
    Code:
    cvlc --loop 'rtsp://192.168.178.10:554/user=admin&password=&channel=1&stream=0.sdp?' --sout "#transcode{vcodec=MJPG}:standard{access=http{mime=multipart/x-mixed-replace;boundary=--7b3cc56e5f51db803f790dad720ed50a},mux=mpjpeg,dst=:8087/}" --daemon
    hinter "rtsp" die eigene URL zum Kamerafeed einfügen.
    nach "dst=:" der Port auf einen anderen geändert werden
    ohne "-- daemon" getestet werden, um Logausgaben zu erhalten.
    mit "-v" für etwas mehr logging und "-vvv" für eine Logflut

    Für mich ist der VLC Ressoucensparender als der ffserver und er funktioniert ohne Artefakte.

    Unschön ist, dass die Zusatzpakete installiert werden müssen. Daher empfehle ich, es nicht auf dem Edomi Server laufen zu lassen.

    Mit vlc können sicher auch die Bild-Grösse und Frames angepasst werden. Da ich in der Kamera 10 Frames eingestellt habe, und mir das reicht, habe ich die Standardeinstellung gelassen.

    Um es beim Systemstart mit zu starten habe ich wie vento66 die rc.local verwendet:
    Nach hier ggf. die Rechte anpassen. (War bei mir ned nötig)
    Anpassen der rc.local mit vi oder nano:

    Code:
    vi /etc/rc.d/rc.local
    Nach der "touch" Zeile folgende einfügen:

    Code:
    su username -c "cvlc --loop 'rtsp://192.168.178.10:554/user=admin&password=&channel=1&stream=0.sdp?' --sout '#transcode{vcodec=MJPG}:standard{access=http{mime =multipart/x-mixed-replace;boundary=--7b3cc56e5f51db803f790dad720ed50a},mux=mpjpeg,dst=: 8087/}' --daemon"
    Den "username" mit dem eigens angelegten User austauschen.
    Service aktivieren:
    Code:
    systemctl enable rc-local
    Starten des Services:
    Code:
    systemctl start rc-local.service
    Status abfragen mit:
    Code:
    systemctl status rc-local.service
    Service stoppen:
    Code:
    systemctl stop rc-local.service
    Zuletzt geändert von bigbear2nd; 22.07.2020, 12:34.

    #2
    Ich hab noch ein Update eingepflegt. mit "--loop" oder "-R" kann der Stream auch bei einem Verbindungsverlust wieder weiterlaufen.
    Code:
    su username -c "cvlc [COLOR=#e74c3c]--loop[/COLOR] 'rtsp://192.168.178.10:554/user=admin&password=&channel=1&stream=0.sdp?' --sout '#transcode{vcodec=MJPG}:standard{access=http{mime =multipart/x-mixed-replace;boundary=--7b3cc56e5f51db803f790dad720ed50a},mux=mpjpeg,dst=: 8087/}' --daemon"

    Kommentar


      #3
      Da bisher niemand geantwortet hat, tue ich das einmal. Danke für die Anleitung. Ich habe bisher keine Zeit zum testen gefunden, aber würde das gerne mal ausprobieren. Mit ffmpeg habe ich auch leichte Artefakte, was mich nicht so sehr störte, aber besser geht es auf jeden Fall, daher werde ich das irgendwann auch mal testen.

      Ich hatte ffmpeg im Docker laufen. So konnte ich den Docker einfach starten und hatte das Bild. Mit Edomi per SSH einen Befehl senden, wenn man das Bild anschaut, wäre quasi "On Demand". Dann braucht man nur encodieren, wenn man in der Visu das Bild anschaut. Weißt Du, ob VLC On Demand beherrschen würde?

      Viele Grüße
      Nils

      Kommentar


        #4
        Ich denke, dass VLC genauso im Docker laufen sollte. Hab da aber wenig Erfahrung.
        VLC als "On Demand" geht wohl - mit Einschränkungen - mittels dem VideoLAN Manager (VLM)

        Ich habs noch nicht ausprobiert, aber hier ein Beispiel aus dem Wiki:

        https://wiki.videolan.org/Documentat.../VLM/#Examples

        Gruss

        Kommentar


          #5
          Hallo zusammen,

          und danke für die schöne Lösung mittels VLC. Ich nutze eine hikvision 8003 Türstation. Hier hat hikvision alles Sinnvolle an Code API und http ausgebaut. Das Teil sendet nur noch einen rtsp Stream. Mit deiner Lösung über VLC schaffe ich es den Stream nun als MJPEG Stream über seine HTTP Seite zu sehen. In Edomi kann ich die Kamera einbinden und ich bekomme ein Vorschau Bild - aber kein Bild in der echten Visu.

          Kann jemand dieses Verhalten verstätigen?

          Weiter war ich mit den obigen Anweisungen auch nicht im Stande das Kommando automatisch bei Start laufen zu lassen. Aber das kann ich im Zweifel schnell selber rausfinden.

          Für jede Hilfe dankbar
          Björn

          PS: nein, alles gut. Ich weiß leider auch nicht mehr, was ich geändert habe - es läuft so gut, dass meine Frau es zu schätzen gelernt hat. Das nächste Problem ist jedoch die Ressourcenauslastung. Hier muss ich den Stream beschränken.
          Zuletzt geändert von Phyxx; 17.10.2020, 22:19.

          Kommentar


            #6
            Ich habe ein ähnliches Problem mit VLAN's. Das Netzwerk des Hauses gibt ein Netzwerk für die Kamera frei (Firewall, 2 VLAN). In diesem VLAN ist Edomi, was auch gut ist, aber wenn mein Endgerät für die Visu im anderen VLAN ist, wird dorthin ggf. nicht geroutet. Das Endgerät, welches die Visu öffnet, muss die Freigabe für die Kamera haben.

            Daher habe ich aus meinem VPN VLAN keinen Zugriff auf die Kamera, obwohl alles andere sich steuern lässt.

            Vielleicht ist bei Dir ja ein ähnliches Konstrukt?!?

            Kommentar


              #7
              Danke für den Hinweis. Absolut nachvollziehbar. Trifft bei mir aber leider nicht zu. VLC läuft auf der Edomi Maschine und da ich das Kamerabild dort anrufen kann, muss etwas anderes der Verursacher sein.

              Aber von einem anderen Standpunkt... Ich muss meine Netzwerksicherheit verbessern...

              Kommentar


                #8
                Da sich bei mir immer wieder der cvlc Stream aufgehängt hat, hier nun die Abhilfe (Danke Ing-Dom )

                mit
                Code:
                vi restartCAM.sh
                ein neues Shell Skript anlegen.
                in VI dann "i" für Insert und
                Code:
                #!/bin/bash
                pkill vlc
                cvlc --loop 'rtsp://192.168.178.10:554/user=admin&password=&channel=1&stream=0.sdp?' --sout '#transcode{vcodec=MJPG}:standard{access=http{mime =multipart/x-mixed-replace;boundary=--7b3cc56e5f51db803f790dad720ed50a},mux=mpjpeg,dst=: 8087/}' --daemon
                angeben.

                Angemerkt sei, dass nun alle Prozesse mit "vlc" als Namen gekillt werden. Bei mir gibts nur einen, daher kein Problem.

                Mit "Esc"-Taste aus dem Editiermodus und mit ":wq" speichernd den VI verlassen.

                Dann es noch ausführbar für alle User machen:
                Code:
                chmod 777 restartCAM.sh
                Gegebenenfalls kann hier jemand mit mehr Linux Ahnung nachreichen, welche Rechte hier wirklich eingetragen werden sollten, in meiner Umgebung stimmt für mich 777..

                In Edomi dann ein neues HTTP/UDP/SHELL Script anlegen:

                210118 22_03-000453-EDOMI · Administration.png

                und konfigurieren:

                210118 22_04-000454-EDOMI · Administration.png

                Ich hab mir dann noch eine Logik-Seite gebaut, die das täglich neu startet:

                210118 22_05-000455-EDOMI · Administration.png

                Gruss

                Kommentar


                  #9
                  Die Lösung finde ich echt gut. Für Türkameras könnte man damit doch dann auch den Stream beim Klingeln starten, dann muss nicht andauernd umgewandelt werden.
                  Vielen Dank fürs Teilen.

                  Viele Grüße
                  Nils


                  Kommentar


                    #10
                    Stimmt!
                    Eigentlich könnte ja der Präsenzmelder vor der Tür und / oder ein Button in der Visu das Konvertieren starten und nach 5 min kanns wieder abgeschaltet werden...

                    Kommentar


                      #11
                      Der Umweg über das Script hat sich nicht bewährt.
                      Ist auch nicht nötig.

                      Hier der "direkte" Weg:
                      Direkt in das edomi HTTP/UDP/SHELL als Befehl eintragen:
                      Code:
                      /usr/bin/pkill vlc
                      /usr/bin/su username -c "cvlc --loop 'rtsp://192.168.178.10:554/user=admin&password=&channel=1&stream=0.sdp?' --sout '#transcode{vcodec=MJPG}:standard{access=http{mime =multipart/x-mixed-replace;boundary=--7b3cc56e5f51db803f790dad720ed50a},mux=mpjpeg,dst=: 8087/}' --daemon"

                      Kommentar


                        #12
                        Just my 2 cents: Eine andere Alternative ist ein Motioneye als Docker oder auf Hardware.
                        ...and I thought my jokes were bad!

                        Kommentar


                          #13
                          Ich habe eben mal just for fun einen Docker gemacht (auf i5 NUC) und das Programm angeschaut.

                          Ich habe eine Doorbird, welche mir das Bild in 640x40 ausgibt als mjepg. Das kann ich direkt in Edomi anschauen. Zudem kann man aber einen RTSP-Stream abrufen in 1280x720.

                          Nun. Das Bild ist, obwohl mit höherer Auflösung, zuerst einmal natürlich breiter, denn das 640x480 wird anscheinend gestaucht. Und es ist, auch noch bei 100% Streaming Quality bei weiterm schlechter und matschiger, als das 640er. In Edomi habe ich es bisher nicht einbinden können, obwohl VLC (gleiches Subnetz) es öffnet. Die Streaming-URL ist dabei http://IP:Port.
                          Und auch das Snapshot ist gruselig in der Qualität. Ich habe zwar keine Artefakte, aber so würde ich es niemals nutzen wollen.
                          Ich wollte noch schnell einen Vergleich machen. Direkter Stream und Video-Streaming-Ausgabe, aber komischerweise bekomme ich nun nur noch eine Fehlermeldung in VLC, auch nach Neustart von Motioneye.

                          Kommentar


                            #14
                            Zitat von bigbear2nd Beitrag anzeigen
                            Der Umweg über das Script hat sich nicht bewährt.
                            Ist auch nicht nötig.

                            Hier der "direkte" Weg:
                            Direkt in das edomi HTTP/UDP/SHELL als Befehl eintragen:
                            Code:
                            /usr/bin/pkill vlc
                            /usr/bin/su username -c "cvlc --loop 'rtsp://192.168.178.10:554/user=admin&password=&channel=1&stream=0.sdp?' --sout '#transcode{vcodec=MJPG}:standard{access=http{mime =multipart/x-mixed-replace;boundary=--7b3cc56e5f51db803f790dad720ed50a},mux=mpjpeg,dst=: 8087/}' --daemon"
                            Das funktioniert so doch aber nur, solange VLC auf der selben Machine wie Edomi läuft. Sonst müsste doch ein Verweis auf die IP der Machine mit VLC beinhaltet sein, oder?
                            Gruß David

                            Kommentar


                              #15
                              Zitat von eXec Beitrag anzeigen
                              Just my 2 cents: Eine andere Alternative ist ein Motioneye als Docker oder auf Hardware.
                              Schaut interessant aus! Startet das den Stream nur, wenn er angefordert wird?
                              Nutzt als Basis jedoch ffmpeg, und das wollte ich ja wegen den Artifakten vermeiden.

                              Zitat von Marino Beitrag anzeigen
                              auch noch bei 100% Streaming Quality bei weiterm schlechter und matschiger, als das 640er
                              Ist das auch so, wenn du dir den rtsp-Stream direkt anschaust? (mit einem Player deiner Wahl) Oder erst nach dem umcodieren?

                              Zitat von shortyle Beitrag anzeigen
                              Das funktioniert so doch aber nur, solange VLC auf der selben Machine wie Edomi läuft
                              Richtig. Einen Shellbefehl übers Netzwerk geht wohl mit SSH. Das "su" geht auch nur deshalb ohne Passwortabfrage, da edomi unter root läuft... (vlc unterbindet das ausführen als root, daher der andere User..)

                              Kommentar

                              Lädt...
                              X