Securitycams -Webcams als Hauptmenüpunkt mit Livestream in Kodi XBMC

  • Hallo Leute

    ich habe bereits einen Hauptmenüpunkt SECURITY der wie folgt aussieht

    Externer Inhalt i40.tinypic.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.


    wenn man den Hauptmenüpunkt anwählt kommt man auf das NAS wo die Aufzeichnungen der Cams abgelegt werden. (Motion detection)

    Über die 4 Untermenüpunkte kann man den Stream der einzelnen Cams aufrufen.
    Soweit läuft das alles schon sehr gut.

    Was ich aber erreichen möchte ist im folgenden Bild dargstellt

    Externer Inhalt i39.tinypic.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.

    (Die Dargestellten Webcams sind streams aus dem Netz zum testen weil ich davon ausgehe das nicht jeder 4 Cams ums Haus hat)


    Wenn man auf den Menüpunkt Secuirty wechselt sollten im Hintergrund 4 Cams als stream angezeigt werden.
    Nachdem XBMC nur einen stream gleichzeitig anzeigen kann habe ich etwas improvisiert.

    Mit dem Doorbell Plugin Pyton Script von

    http://homeawesomation.wordpress.com/2013/02/18/doo…am-xbmc-update/

    (was ich übrigens auch einsetzte und der Hammer ist!)
    kann man den Motion JPG Stream einer Kamera abgreifen und im XMBC darstellen obwohl ein Film gerade läuft weil hier nur ein Bild angezeigt wird das im Intervall aktualisiert wird.
    Wenn das Intervall der Aktualisierung nur sehr klein ist schaut es aus wie eine Stream.

    Dieses Plugin habe ich jetzt auf 4 Cams erweitert und das steht hier zum download

    http://www.workupload.com/file/gkLacswl

    Hier der Code des Plugins


    Dabei wird der Schirm schon in 4 Teile aufgeteilt und die Cams werden angezeigt. Aus meiner Sicht eine sehr gute Basis.

    Teil 1

  • Die Integration in der Home.xml schaut so aus (Dank der Hilfe von Madmax)


    in der IncludesHomeMenuItems.xml so. (Dank der Hilfe von Madmax)

    In den Cam_0?.strm Dateien wird in einer Zeile die Adresse des RTSP Streams angegeben.

    rtsp://USER:PASSWORD@IP:554/h264/media.amp
    Achtung die Adresse ist von Kamerahersteller zu Hersteller unterschiedlich und muss entsprechend angepasst werden.


    Und wer kann mir jetzt dabei helfen den "Rest" zu schaffen? Leider sind sowohl mein Pyton als auch meine Skin Programmier-Künste sehr beschränkt. Also die Idee ist geboren die Infos alle zusammengetragen.

    Ich bitte um Hilfe bei

    Must haves:
    - Pyton Script umbauen sodas es in einer Endlosschleife läuft
    - Pyton Script umbauen sodas es keinen Animationseffekt mehr gibt sondern die Bilder nur angezeigt werden
    - Darstellung der 4 Videostreams (oder besser gesagt Bildfolgen)
    1. hinter dem Hauptmenü
    2. hinter dem Wetter App und der Zeit (ev. selber Punkt wie 1)
    3. hinter ev. laufenen Filmen wenn man während einer Wiedergabe das Menü nutzt (ev. selber Punkt wie 1)
    - Integration im Hauptmenü des Skins Modded Confluence von Mad Max
    1. starten des Pyton Scripts wenn man auf den Menüpunkt Security wechselt
    2. beenden des Pyton Scripts wenn man den Menüpunkt Security verlässt

    nice to haves: (nur für Benutzerfreundlichkeit)
    - die 4 Kamera-Urls des Mjpeg Stream als Konfigurationseingabe des Plugins und nicht im Code des Pyton scripts zu ändern
    - die 4 Kamera-Urls des nicht mjpeg Streams im Konfigurationsmenü des Plugins und nicht in der .strm Datei
    - Pfad für Kamerarecordings im Konfigurationsmenü des Plugins
    - Namen der 4 Cams im Konfigurationsmenü des Plugins damit im Untermenü nicht Cam1 Cam2 Cam3 Cam4 steht (Mir ist schon klar das ich das nur in der IncludesHomeMenuItems.xml machen kann)


    Ciao der Homi

  • Hallo

    also in der Zwischenzeit habe ich das Script leicht abgeändert und die Fade und Slide Effekte entfernt. Nachdem man das Bild anscheinend nicht in den Hintergrund einfügen kann habe ich vor Cam1 einen zusätlichen Menüpunkt "Übersicht" eingefügt über den ich das Script starten kann. Soweit so gut.

    Somit läuft die Kameraübersicht jetzt 30 Sekunden lang. Ich würde gerne die Übersicht unendlich lange laufen lassen können. Dazu setzte ich im Moment einfach die Zeit nach oben. Wenn ich aber dann mit ESC das Script beende funktioniert es beim nächsten Start nicht mehr. Das muss irgendwie damit zusammenhängen weil es nicht sauber beendet wurde.

    viewer.close()
    del viewer

    fehlt dann schätz ich mal.

    Kann mir da wer weiterhelfen damit ich eine saubere Lösung zusammenbringe!?!!?! Bitte Danke

    Der aktuelle Code ist

  • Hi Don

    ja mit einer Cam ist es nicht so tragisch. Da kann ich gleich einen RTSP Strem aufrufen. Diese Streams starte ich über mein Untermenü.

    Das Script selber läuft eh gut. Ich bräuchte nur jemanden der mir hilft den Exit zu lösen dann ist es perfekt.

    Wo haben sich die Python Scripter versteckt?

    Hmmm

    Das Script als Datei findet man unter

    http://workupload.com/file/lXqJZ8kY

  • Ein sehr interessantes Projekt. Da ich selber gerade eine Überwachungssystem auf Basis einem Raspberry Pi mit Cam und Motion baue. So weit läuft auch alles aber das mit der Einbindung in die XBMC Oberfläche habe ich noch gar nicht nachgedacht. Ist auf jeden Fall eine Überlegung wert. Zur Zeit greife ich die Videoübertragung per DynDNS über den Browser ab. Habe auch das ganze so gemacht das es auf Bewegung reagiert und 20 Bilder in der SeK macht und es in ein mp4 Video Konvertiert. Dadurch wird Platz gespart. Nach 48Std werden die Videos automatisch wieder gelöscht.

    HTPC: MLD 5.4 64Bit | ASRock Q1900M | 4GB Ram | DigitalDevices DVB-S2 | SSD 64GB | HDD 2,5 500GB | 250GB Backup HDD

  • Hallo mafe68

    also ich hab ein Synology Nas und da gibt es eine eigene Software für Kameraüberwachung mit Aufzeichnung und allem was man sich wünschen kann. Würde ich jedem empfehlen. Dabei wird automatisch ein H264 Video erstellt was im Moment am wenigsten Speicher frist.

    Auf diese Aufzeichnungen kann ich auch über den Hauptmenüpunkt zugreifen. Die Lizenz für eine Kamera ist bei einem Nas von Synology immer mit dabei. Weitere muss man dazukaufen. Möchte keine Werbung machen aber ich von dem ganzen sehr überzeugt.

    Zusätzlich hab ich über das Doorbell Script was oben erwähnt wird und als Basis diente eine sofortige Benachrichtigung falls sich jemand im Eingangsbereich bewegt. GANZ tolle Sache.

    Ciao ciao

  • Ja ist sicher eine feine Sache aber mir ist es lieber ich mache mir so was von Grund auf selber darum verwende ich auch das Pi. Konvertieren der Videos kann ich in jedem Format machen was ich einstelle.

    1. Habe ich genügend von den Pi's da ich sie auch verkaufe :D
    2. will ich wissen was genau die Software macht und ich kann sie jeder Zeit anpassen wie ich sie haben möchte.
    3. laufen auch noch andere Sachen am Pi wie z.B Datenlogger für die Solar, Heizungsteuerung, Licht u.s.w.
    4. betrieben wird es über Solarstrom da ich nicht immer dort bin und ich von zu Hause aus alles Steuern kann.
    5. und der letzte Punkt der mir auch sehr wichtig ist das es auch Linux OS läuft

    HTPC: MLD 5.4 64Bit | ASRock Q1900M | 4GB Ram | DigitalDevices DVB-S2 | SSD 64GB | HDD 2,5 500GB | 250GB Backup HDD

  • Hi 4lb3rtO

    leider funktioniert der refresh der Bilder nicht mehr sauber. Ich habe auch die sleep time wieder zurück gesetzt auf die 10 Milisekunden doch auch das hat keine Verbesserung gebracht. Leider lässt sich das nur mit einer lokalen Cam testen bei der man die Zeit einblendet. Die Webcams die ich oben angegeben habe taugen für das Testen leider nicht.

    Hmm...

    Du hast einiges am Code geändert hab ich gesehen.

    Der entscheidende Teil ist aber das oder

    def onAction(self, action):
    if (action == 10) or (action == 92):
    self.close()

    Ich hätte mal probiet den Teil in das alte Script zu setzten aber da hab ich auch etwas falsch gemacht.

    Hast du noch eine Idee?

    Ciao ciao

  • leider funktioniert der refresh der Bilder nicht mehr sauber.


    Kann ich hier leider nicht ganz nachvollziehen. Die Bilder werden bei mir ca alle 10 Sekunden nacheinander aktualisiert.

    Ich habe auch die sleep time wieder zurück gesetzt auf die 10 Milisekunden doch auch das hat keine Verbesserung gebracht.


    Für die Refresh-Rate ist dieser sleep Wert auch nicht von Bedeutung. Dieser Wert sollte nur kleiner sein, als der in der Zeile...

    if (time.time() - cur_time > 9:( # Time definition - How long will the cameras be displayed in seconds

    ...sein. Hier wird ja angegeben, nach welcher Zeit neue Bilder empfangen werden sollen. Wenn man als Beispiel irgendeine x-beliebige Kamera nimmt die bspw eine Aktualisierungsrate von 1 Sekunde hat, könnte man hier 1 Sekunde eintragen. Der sleep könnte hierbei dann zB 200 oder 500ms betragen. Der Refresh der Bilder von 1 Sekunde ist hier allerdings auch nur theoretisch, da die Bilder anschließend nacheinander empfangen werden. Wenn man hierbei dann zB für die Übertragung auch 1 Sek/Bild benötigt, kommt man am Ende nur auf eine Rate - bei einer kompletten Aktualisierung aller Bilder mit 4 Kameras - von ~4 Sekunden (hier kommt dann allerdings auch noch die Verzögerung dazu). Es wird also innerhalb dieser 4 Sekunden jede Sekunde ein Bild nach dem anderen gesetzt. Wenn man hier etwas mehr Schmackes dran bekommen wollte, würde ich den Empfang und das Setzen der Bilder in XBMC in Threads auslagern. Dann könnte man erreichen, das die Bilder unabhängig voneinander aktualisiert werden. Aber das wird dann schon eine Nummer härter, weil man dann wohl schauen müsste, wann, welcher Thread fertig ist oder man mit locks (ist glaube ich bei Python der Fall) arbeiten müsste... Das ist mir dann aber auch zu viel Maloche und dann kommt noch hinzu das ich mit Threads generell irgendwie auf Kriegsfuß stehe ^^

    Ich habe mal zum Testen die Adresse...
    http://62.157.185.131/record/current.jpg
    ...für alle 4 Kameras, als Intervall 1 Sekunde und eine Verzögerung von 200ms genommen. Funktionierte wunderbar...

    Ciao


    PS:
    Achso Exeptions müssten im Script eigentlich auch noch hinzugefügt werden, aber für den Heimgebrauch kann man davon sicherlich absehen...

  • Für die Refresh-Rate ist dieser sleep Wert auch nicht von Bedeutung

    Hi 4lb3rtO
    hoffentlich brech ich mir das nächste mal nicht die Finger wenn ich deinen Nic tippe :)

    - 1. Also ich hab jetzt mal mit dem Wert if (time.time() - cur_time > 9) gespielt und bin bei 0,2 gelandet.

    Die Aktualisierung läuft mit dem netzinternen Kameras natürlich viel schneller als mit den Links aus dem Netz.

    Mit 0.2 und dem xbmc.sleep(50) rausgenommen läuft es wirklich sehr sauber. Fast im Sekundentakt. Manchmal springt es 2 Sekunden weiter.

    LEIDER funktioniert ein Abbrechen des Scripts nicht mehr wenn man den xbmc.sleep weglässt. Ein verkürzen der Zeit auf 0.1 bringt dann leider nichts mehr weil dann auch Bilder angezeigt werden die nur teilweise übertragen wurden.

    - 2. Sehr interessant allerdings ist das auch wenn ich das Script nicht verändere und es mit ESC beende die Cam1-4.jpg Bilder im User Script Verzeichnis dann noch weiter ausgetauscht und aktualisiert werden! Obwohl das Script aus meiner Sicht eigentlich beendet wurde.

    - 3. Nur so nebenbei fällt mir auf das die Bilder der Cameras immer etwas versetzt sind. Das ist sehr komisch. Der aspectRadio hat dabei auch 0 Einfluss kommt mir.

    Leider kann ich auch zu den Code Verbesserungen keine Stellung nehmen weil ich 0 Ahnung von Python hab - Sonst würde ich selber angreifen und den Code verbessern.

    Hast noch Ideen wie man den Code noch verbessern könnte ohne eine "Maloche" auszulösen?

    Ciao der Homi und Danke bis jetzt!

    ==>> UPDATE wenn ich den xbmc.sleep auf 1 setzte geht der EXIT immer noch ;)

  • Kann man die if time Schleife nicht komplett weglassen? Hmm...
    Statt eines Zeitintervalls wäre es doch inteligenter das nächste voll übertragene Bild zu verwenden und zu aktualisieren so schnell es geht. Damit würde man dann alles Fehlbilder vermeiden und trotzdem einen sehr flüssigen "Stream" bekommen

    Nur so als Gedanke

  • hoffentlich brech ich mir das nächste mal nicht die Finger wenn ich deinen Nic tippe :)

    :) :P

    Ein verkürzen der Zeit auf 0.1 bringt dann leider nichts mehr weil dann auch Bilder angezeigt werden die nur teilweise übertragen wurden.


    Das dürfte theoretisch nicht passieren... Selbst wenn die 100ms bereits verstrichen sind und wieder neue Bilder empfangen werden dürften, müssten eigentlich zuerst alle Bilder sauber nach und nach empfangen und angezeigt werden.


    - 2. Sehr interessant allerdings ist das auch wenn ich das Script nicht verändere und es mit ESC beende die Cam1-4.jpg Bilder im User Script Verzeichnis dann noch weiter ausgetauscht und aktualisiert werden! Obwohl das Script aus meiner Sicht eigentlich beendet wurde.


    Das war mir leider auch nicht aufgefallen... Kann ich aber mal nachschauen


    - 3. Nur so nebenbei fällt mir auf das die Bilder der Cameras immer etwas versetzt sind. Das ist sehr komisch. Der aspectRadio hat dabei auch 0 Einfluss kommt mir.


    Springen die hin und her oder passt die Aufteilung generell nicht? Bei zweiterem kannst du das ja über die Positionen in "xbmcgui.ControlImage(0, 0, 640, 360, IMAGEFILE1, aspectRatio=0)" regeln...

    Kann man die if time Schleife nicht komplett weglassen? Hmm...

    Statt eines Zeitintervalls wäre es doch inteligenter das nächste voll übertragene Bild zu verwenden und zu aktualisieren so schnell es geht. Damit würde man dann alles Fehlbilder vermeiden und trotzdem einen sehr flüssigen "Stream" bekommen


    Das würde ich eigentlich so belassen... Da man mit der "while (not xbmc.abortRequested):" eine Endlosschleife hat (ist äquivalent zu "while True:") benötigt man ja quasi noch eine Einsprungsmöglichkeit... Das machen wir dann hier über die verstrichene Zeit...
    Ich weiß nur nicht, warum es zu Fehlbildern kommt, da diese eigentlich sauber übertragen und angezeigt werden müssten... Völlig egal ob in der Zwischenzeit schon die Wartezeit verstrichen ist und eigentlich ja schon neue Bilder angefordert werden dürften... Man hängt ja sozusagen noch in dem if-Block fest und dieser müsste zuerst noch abgearbeitet werden... Deswegen müsste man die Zeiten auch generell nahe an Null herangehen lassen dürfen (bspw Verzögerung 0.2 und sleep 100ms), da man sowieso auf die Abarbeitung (Empfang und Anzeige) warten müsste... Man aktualisiert dann schon im Prinzip so schnell wie es geht...


    Uff wenn man es laufen lässt aktiviert sich dann der Bildschirmschoner. Kann man da noch verhindern?


    Da ist mir so spontan kein Weg bekannt... Aber vielleicht kann man das schon mit einem regelmäßigen Ping in den Griff bekommen... Schaue ich mir dann später mal an...

  • Springen die hin und her oder passt die Aufteilung generell nicht? Bei zweiterem kannst du das ja über die Positionen in "xbmcgui.ControlImage(0, 0, 640, 360, IMAGEFILE1, aspectRatio=0)" regeln...


    also die Position der Bilder über die Koordinaten passt schon.Jede Kamera blendet oben in einer Leiste die Zeit und Datum ein. Interessanter weise sind ab ab und zu die Bilder in dem definierten Fenster versetzt sodaß die Leiste mit der Zeit und dem Datum wegfällt. Ganz kurios.
    Eigentlich sollte er ja jedes Bild in das Angegebene Koordinatenfenster scalen und verzerren das es reingeht.

    Das dürfte theoretisch nicht passieren... Selbst wenn die 100ms bereits verstrichen sind und wieder neue Bilder empfangen werden dürften, müssten eigentlich zuerst alle Bilder sauber nach und nach empfangen und angezeigt werden.

    Also bei mir zeigt er dann immer wieder Bildfehler. Also halb oder 2/3 aufgebaute Bilder. Der Rest des Bildes ist dann grau oder schwarz und manchmal auch in größere Artefakte zerlegt und grün. Schrottig halt

    Das sollte auf keinen Fall so klingen als ob ich mich zu tote jammere. Grundsätzlich bin ich schon sehr zufrieden. Das schaut richtig gut aus  :thumbup:



  • Zitat von »Homeserver«
    Ein verkürzen der Zeit auf 0.1 bringt dann leider nichts mehr weil dann auch Bilder angezeigt werden die nur teilweise übertragen wurden.

    Das dürfte theoretisch nicht passieren... Selbst wenn die 100ms bereits verstrichen sind und wieder neue Bilder empfangen werden dürften, müssten eigentlich zuerst alle Bilder sauber nach und nach empfangen und angezeigt werden.

    ich hab mal schnell ein paar Screenshots gemacht was den Bildrefresh betrifft
    http://workupload.com/file/YzsEeEhE

    http://workupload.com/file/U3da1ttc

    http://workupload.com/file/SBSIEjrx
    das passiert wenn man 0.1 bei (time.time() - cur_time > 0.1) verwendet.

    Auch wenn man es langsamer macht passiert das immer wieder mit den lokalen Kameras die eigentlich die Bilder auch schneller liefern sollten.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!