Example #1
0
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
Example #3
0
    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
Example #6
0
 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