def play(camera_number, show_controls=None): """ Function to call to play the IP Camera feed. Determines if controls are shown or not. """ camera = Camera(camera_number) if camera.Connected(monitor): if show_controls == None: show_controls = False # Generic IP Cameras default without Controls if camera._type != GENERIC_IPCAM: # Foscam Cameras default with Controls show_controls = True if show_controls: player = CameraControlsWindow(camera, monitor) player.start() else: url = camera.getStreamUrl(0) name = settings.getCameraName(camera.number) utils.log( 2, 'Camera %s :: Name: %s; Url: %s' % (camera.number, name, url)) listitem = xbmcgui.ListItem() listitem.setInfo(type='Video', infoLabels={'Title': name}) listitem.setArt({'thumb': utils.get_icon(camera.number)}) utils.log( 1, 'Camera %s :: *** Playing Fullscreen *** URL: %s' % (camera.number, url)) player = xbmc.Player() player.play(url, listitem) if monitor.resume_previous_file(): while not player.isPlaying() and not monitor.stopped( ) and not monitor.abortRequested(): monitor.waitForAbort(.5) while player.isPlaying( ) and not monitor.stopped() and not monitor.abortRequested(): monitor.waitForAbort(.5) monitor.maybe_resume_previous() else: utils.log( 3, 'Camera %s :: Camera is not configured correctly' % camera.number) utils.notify('Camera %s not configured correctly' % camera.number)
def getImagesMjpegInterlace(self, camera, url, control, prefix): """ Update camera position with interlaced mjpeg frames """ try: stream = requests.get(url, stream=True, timeout=TIMEOUT).raw except requests.RequestException as e: utils.log(3, e) control[0].setImage(_error, useCache=False) return x = 0 while not monitor.abortRequested() and self.isRunning: filename = os.path.join(_datapath, "%s_%s.%d.jpg") % (prefix, camera.number, x) filename_exists = utils.get_mjpeg_frame(stream, filename) if filename_exists: if x % 2 == 0: # Interlacing for flicker reduction/elimination control[0].setImage(filename, useCache=False) else: control[1].setImage(filename, useCache=False) xbmcvfs.delete(os.path.join(_datapath, "%s_%s.%d.jpg") % (prefix, camera.number, x - 2)) x += 1 else: utils.log(3, "Camera %s - Error on MJPEG" % camera.number) control[0].setImage(_error, useCache=False) return
def getImagesMjpegInterlace(self, camera, url, control, prefix): """ Update camera position with interlaced mjpeg frames """ try: stream = requests.get(url, stream = True, timeout = TIMEOUT).raw except requests.RequestException as e: utils.log(3, e) control[0].setImage(_error, useCache = False) return x = 0 while not monitor.abortRequested() and self.isRunning: filename = os.path.join(_datapath, '%s_%s.%d.jpg') %(prefix, camera.number, x) filename_exists = utils.get_mjpeg_frame(stream, filename) if filename_exists: if x % 2 == 0: #Interlacing for flicker reduction/elimination control[0].setImage(filename, useCache = False) else: control[1].setImage(filename, useCache = False) xbmcvfs.delete(os.path.join(_datapath, '%s_%s.%d.jpg') %(prefix, camera.number, x - 2)) x += 1 else: utils.log(3, 'Camera %s - Error on MJPEG' %camera.number) control[0].setImage(_error, useCache = False) return
def play(camera_number, show_controls = None): """ Function to call to play the IP Camera feed. Determines if controls are shown or not. """ camera = Camera(camera_number) if camera.Connected(monitor): if show_controls == None: show_controls = False # Generic IP Cameras default without Controls if camera._type != GENERIC_IPCAM: # Foscam Cameras default with Controls show_controls = True if show_controls: player = CameraControlsWindow(camera, monitor) player.start() else: url = camera.getStreamUrl(0) name = settings.getCameraName(camera.number) utils.log(2, 'Camera %s :: Name: %s; Url: %s' %(camera.number, name, url)) listitem = xbmcgui.ListItem() listitem.setInfo(type = 'Video', infoLabels = {'Title': name}) listitem.setArt({'thumb': utils.get_icon(camera.number)}) utils.log(1, 'Camera %s :: *** Playing Fullscreen *** URL: %s' %(camera.number, url)) player = xbmc.Player() player.play(url, listitem) if monitor.resume_previous_file(): while not player.isPlaying() and not monitor.stopped() and not monitor.abortRequested(): monitor.waitForAbort(.5) while player.isPlaying() and not monitor.stopped() and not monitor.abortRequested(): monitor.waitForAbort(.5) monitor.maybe_resume_previous() else: utils.log(3, 'Camera %s :: Camera is not configured correctly' %camera.number) utils.notify('Camera %s not configured correctly' %camera.number)
def getImagesSnapshot(self, camera, url, control, prefix): """ Update camera position with snapshots """ x = 0 while not monitor.abortRequested() and self.isRunning: try: filename = os.path.join(_datapath, "%s_%s.%d.jpg") % (prefix, camera.number, x) urlretrieve(url, filename) if os.path.exists(filename): control[0].setImage(filename, useCache=False) xbmcvfs.delete(os.path.join(_datapath, "%s_%s.%d.jpg") % (prefix, camera.number, x - 1)) control[1].setImage(filename, useCache=False) x += 1 except Exception, e: utils.log(3, "Camera %s - Error on MJPEG: %s" % (camera.number, e)) control[0].setImage(_error, useCache=False) return
def getImagesSnapshot(self, camera, url, control, prefix): """ Update camera position with snapshots """ x = 0 while not monitor.abortRequested() and self.isRunning: try: filename = os.path.join(_datapath, '%s_%s.%d.jpg') %(prefix, camera.number, x) urlretrieve(url, filename) if os.path.exists(filename): control[0].setImage(filename, useCache = False) xbmcvfs.delete(os.path.join(_datapath, '%s_%s.%d.jpg') %(prefix, camera.number, x - 1)) control[1].setImage(filename, useCache = False) x += 1 except Exception, e: utils.log(3, 'Camera %s - Error on MJPEG: %s' %(camera.number, e)) control[0].setImage(_error, useCache = False) return
def getImagesSnapshot(self, camera, url, control, prefix): """ Update camera position with snapshots """ x = 0 while not monitor.abortRequested() and self.isRunning: try: filename = os.path.join( _datapath, '%s_%s.%d.jpg') % (prefix, camera.number, x) if '4' in camera.number: #DIGEST IS ONLY ENABLED ON CAMERA 4 r = requests.get( url, stream=True, timeout=TIMEOUT, auth=HTTPDigestAuth('USERNAME', 'PASSWORD') ) #You must define your user and password here!!! with open(filename, 'wb') as fd: for chunk in r.iter_content(chunk_size=128): fd.write(chunk) else: urlretrieve(url, filename) if os.path.exists(filename): control[0].setImage(filename, useCache=False) xbmcvfs.delete( os.path.join(_datapath, '%s_%s.%d.jpg') % (prefix, camera.number, x - 1)) control[1].setImage(filename, useCache=False) x += 1 except Exception, e: utils.log( 3, 'Camera %s - Error on MJPEG: %s' % (camera.number, e)) control[0].setImage(_error, useCache=False) return