Hallo Leute
ich habe bereits einen Hauptmenüpunkt SECURITY der wie folgt aussieht
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
(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
# Import the XBMC/XBMCGUI modules.
import xbmc, xbmcgui, time, urllib, xbmcvfs, xbmcaddon, os
__addon__ = xbmcaddon.Addon()
__addonid__ = __addon__.getAddonInfo('id')
# ATTENTION
# You must use MJPEG Streams for the URL Definition
# URL Syntax for Axis cameras
#url='http://10.0.0.182/axis-cgi/jpg/image.cgi'
#url='http://10.0.0.182/jpg/1/image.jpg'
# Test URLs with Webcams
url1='http://webcams.passau.de/cam-rathaus-huge-aktuell.jpg'
url2='http://www.mediac2.de/projekte/webcam/wallstrasse/aktuell/aktuell.jpg'
url3='http://www.cityscope.de/bmw/current_pano.jpg'
url4='http://www.goldbeck.de/uploads/webcam/df0691/current.jpg'
path = xbmc.translatePath('special://profile/addon_data/%s' % __addonid__)
if not xbmcvfs.exists(path):
xbmcvfs.mkdir(path)
imagefile1 = os.path.join(path, 'cam1.jpg')
imagefile2 = os.path.join(path, 'cam2.jpg')
imagefile3 = os.path.join(path, 'cam3.jpg')
imagefile4 = os.path.join(path, 'cam4.jpg')
class CamView(xbmcgui.WindowDialog):
def __init__(self):
#set the initial image before the window is shown
urllib.urlretrieve(url1, imagefile1)
self.image1 = xbmcgui.ControlImage(0, 0, 640, 360, imagefile1, aspectRatio=2)
self.addControl(self.image1)
#set the initial image before the window is shown
urllib.urlretrieve(url2, imagefile2)
self.image2 = xbmcgui.ControlImage(640, 0, 640, 360, imagefile2, aspectRatio=2)
self.addControl(self.image2)
#set the initial image before the window is shown
urllib.urlretrieve(url3, imagefile3)
self.image3 = xbmcgui.ControlImage(0, 360, 640, 360, imagefile3, aspectRatio=2)
self.addControl(self.image3)
#set the initial image before the window is shown
urllib.urlretrieve(url4, imagefile4)
self.image4 = xbmcgui.ControlImage(640, 360, 640, 360, imagefile4, aspectRatio=2)
self.addControl(self.image4)
viewer = CamView()
viewer.show()
start_time = time.time()
firstimage = True
while(time.time() - start_time <= 14): # Time definition - How long will the cameras be displayed
urllib.urlretrieve(url1, imagefile1)
viewer.image1.setImage("")
viewer.image1.setImage(imagefile1)
urllib.urlretrieve(url2, imagefile2)
viewer.image2.setImage("")
viewer.image2.setImage(imagefile2)
urllib.urlretrieve(url3, imagefile3)
viewer.image3.setImage("")
viewer.image3.setImage(imagefile3)
urllib.urlretrieve(url4, imagefile4)
viewer.image4.setImage("")
viewer.image4.setImage(imagefile4)
curr_time = round(time.time() - start_time, 0)
if firstimage:
nowtime=time.strftime("%I:%M %p")
viewer.image1.setAnimations([('conditional', 'effect=fade start=0 end=100 time=250 delay=125 condition=true',), ('conditional', 'effect=slide start=0,400 end=0,0 time=250 condition=true',)])
viewer.image2.setAnimations([('conditional', 'effect=fade start=0 end=100 time=250 delay=125 condition=true',), ('conditional', 'effect=slide start=0,400 end=0,0 time=250 condition=true',)])
viewer.image3.setAnimations([('conditional', 'effect=fade start=0 end=100 time=250 delay=125 condition=true',), ('conditional', 'effect=slide start=0,400 end=0,0 time=250 condition=true',)])
viewer.image4.setAnimations([('conditional', 'effect=fade start=0 end=100 time=250 delay=125 condition=true',), ('conditional', 'effect=slide start=0,400 end=0,0 time=250 condition=true',)])
firstimage = False
elif curr_time == 14: # Time definition - How long will the cameras be displayed
viewer.image1.setAnimations([('conditional', 'effect=fade start=90 end=100 time=0 condition=true',), ('conditional', 'effect=slide start=0,0 end=0,400 time=250 condition=true',)])
viewer.image2.setAnimations([('conditional', 'effect=fade start=90 end=100 time=0 condition=true',), ('conditional', 'effect=slide start=0,0 end=0,400 time=250 condition=true',)])
viewer.image3.setAnimations([('conditional', 'effect=fade start=90 end=100 time=0 condition=true',), ('conditional', 'effect=slide start=0,0 end=0,400 time=250 condition=true',)])
viewer.image4.setAnimations([('conditional', 'effect=fade start=90 end=100 time=0 condition=true',), ('conditional', 'effect=slide start=0,0 end=0,400 time=250 condition=true',)])
print "catch"
else:
viewer.image1.setAnimations([('conditional', 'effect=fade start=90 end=100 time=0 condition=true',)])
viewer.image2.setAnimations([('conditional', 'effect=fade start=90 end=100 time=0 condition=true',)])
viewer.image3.setAnimations([('conditional', 'effect=fade start=90 end=100 time=0 condition=true',)])
viewer.image4.setAnimations([('conditional', 'effect=fade start=90 end=100 time=0 condition=true',)])
print curr_time
xbmc.sleep(10) # Refresh time definition for the chaning of the pictures of the mjpeg stream.
viewer.close()
del viewer
Alles anzeigen
Dabei wird der Schirm schon in 4 Teile aufgeteilt und die Cams werden angezeigt. Aus meiner Sicht eine sehr gute Basis.
Teil 1