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 run(self, monitor): self.monitor = monitor self.monitor.reset() preview_enabled_cameras = [] self.threads = [] for camera_number in "123456": utils.log(2, 'Camera %s :: Enabled: %s; Preview Enabled: %s' %(camera_number, settings.enabled_camera(camera_number), settings.enabled_preview(camera_number))) if settings.enabled_camera(camera_number): camera = Camera(camera_number) if settings.enabled_preview(camera_number): if camera.Connected(self.monitor, useCache=False): previewWindow = threading.Thread(target = camerapreview.CameraPreviewWindow, args = (camera, self.monitor, )) previewWindow.daemon = True previewWindow.start() t = CameraPreviewThread(camera, self.monitor, ) t.daemon = True self.threads.append(t) t.start() utils.log(1, 'Camera %s :: Preview Thread started.' %camera_number) else: utils.log(1, 'Camera %s :: Preview thread did not start because camera is not properly configured.' %camera_number) utils.notify('Error Connecting to Camera %s.' %camera_number) utils.notify(utils.translation(32224)) #Service Started xbmc.executebuiltin('Container.Refresh') while not self.monitor.stopped() and not self.monitor.abortRequested(): self.monitor.waitForAbort(1) if self.monitor.stopped() and not self.monitor.abortRequested(): utils.notify(utils.translation(32225)) #Service Restarting self.restart() '''
def main_menu(): """ First Level Menu to access main functions """ if settings.atLeastOneCamera(): # All Camera Player addDirectoryItem(name=utils.translation(32027), icon=utils.get_icon('default'), fanart=utils.get_fanart('default'), parameters={'action': 'all_cameras'}) for camera_number in "123456": if settings.enabled_camera(camera_number): camera = Camera(camera_number) list_label = settings.getCameraName(camera_number) # Build Context Menu li = li = xbmcgui.ListItem(list_label) context_items = [] if settings.getSetting('enabled_preview', camera_number) == 'true': #Show Preview context_items.append((utils.translation( 32210 ), 'RunPlugin(plugin://plugin.video.surveillanceroom?action=show_preview&camera_number=%s)' % camera_number)) #Disable Preview context_items.append((utils.translation( 32212 ), 'RunPlugin(plugin://plugin.video.surveillanceroom?action=disable_preview&camera_number=%s)' % camera_number)) else: #Enable Preview context_items.append((utils.translation( 32211 ), 'RunPlugin(plugin://plugin.video.surveillanceroom?action=enable_preview&camera_number=%s)' % camera_number)) camera_type = settings.getCameraType(camera_number) if camera_type < 3: #Play Stream no Controls context_items.append((utils.translation( 32214 ), 'RunPlugin(plugin://plugin.video.surveillanceroom?action=single_camera_no_controls&camera_number=%s)' % camera_number)) #Camera Settings context_items.append((utils.translation( 32215 ), 'RunPlugin(plugin://plugin.video.surveillanceroom?action=camera_settings&camera_number=%s)' % camera_number)) # Update Fanart if settings.getSetting_int('fanart') == 1: context_items.append((utils.translation( 32213 ), 'RunPlugin(plugin://plugin.video.surveillanceroom?action=update_fanart&camera_number=%s)' % camera_number)) li.addContextMenuItems(context_items, replaceItems=True) # Fanart URL new_art_url = None if camera.Connected(monitor): new_art_url = camera.getSnapShotUrl() else: if camera.Connected(monitor, False): new_art_url = camera.getSnapShotUrl() # Single Camera Player for enabled cameras addDirectoryItem(name=list_label, icon=utils.get_icon(camera_number), fanart=utils.get_fanart( camera_number, new_art_url), li=li, parameters={ 'action': 'single_camera', 'camera_number': camera_number }) # Link to Second Level Advanced Menu addDirectoryItem(name=utils.translation(32029), isFolder=True, icon=utils.get_icon('advanced'), fanart=utils.get_fanart('default'), parameters={'action': 'advanced'}) else: # Add-on Settings if no cameras are configured addDirectoryItem(name=utils.translation(32028), icon=utils.get_icon('settings'), fanart=utils.get_fanart('default'), parameters={'action': 'settings'}) xbmcplugin.endOfDirectory(handle=handle, succeeded=True) utils.cleanup_images()
settings.setSetting('enabled_preview', camera_number, 'false') xbmc.executebuiltin('Container.Refresh') # Enable Preview elif action == 'enable_preview': settings.setSetting('enabled_preview', camera_number, 'true') xbmc.executebuiltin('Container.Refresh') # Toggle All Preview elif action == 'toggle_preview': monitor.togglePreview() # Update Fanart elif action == 'update_fanart': camera = Camera(camera_number) if camera.Connected(monitor, False): utils.get_fanart(camera_number, camera.getSnapShotUrl(), update=True) xbmc.executebuiltin('Container.Refresh') else: utils.notify(utils.translation(32222)) # Restart Preview Service elif action == 'restart_service': monitor.stop() # Preliminary attempt to show an overlay based on a URL, not fully tested and does not close on its own yet elif action == 'show_preview_custom': url = params.get('url', '')