Exemplo n.º 1
0
    def start(self):
        sem = threading.Event()

        self.streamingPlugin = StreamingPlugin()
        self.session = Session('ws://127.0.0.1:8188',
                               secret='d5faa25fe8e3438d826efb1cd3369a50')

        @self.session.on_plugin_attached.connect
        def receive_data(sender, **kw):
            #wait until Janus plugin is not attached
            sem.set()

        #CONNECTION
        #self.session.cxn_cls
        #
        #SIGNALS
        #
        # Signal fired when `Connection` has been established.
        #	on_opened = blinker.Signal()
        #self.session.cxn_cls.on_opened.connect(self.connection_on_opened)

        #
        # Signal fired when `Connection` has been closed.
        #	on_closed = blinker.Signal()
        #self.session.cxn_cls.on_closed.connect(self.connection_on_closed)

        #
        # Signal fired when `Connection` receives a message
        #	on_message = blinker.Signal()
        self.session.cxn_cls.on_message.connect(self.connection_on_message)

        ##

        #SESSION
        #self.session
        #
        #SIGNALS
        #
        # Signal fired when `Session` has been connected.
        #	on_connected = blinker.Signal()
        #self.session.on_connected.connect(self.session_on_connected)

        #
        # Signal fired when `Session` has been disconnected.
        #	on_disconnected = blinker.Signal()
        #self.session.on_disconnected.connect(self.session_on_disconnected)

        #
        # Signal fired when a `Session` level message is received.
        #	on_message = blinker.Signal()
        #self.session.on_message.connect(self.session_on_message)

        #
        # Signal fired when a `Session` `Plugin` been attached.
        #	on_plugin_attached = blinker.Signal()
        #self.session.on_plugin_attached.connect(self.session_on_plugin_attached)

        #
        # Signal fired when a `Session` `Plugin` been detached.
        #	on_plugin_detached = blinker.Signal()
        #self.session.on_plugin_detached.connect(self.session_on_plugin_detached)

        ##

        #PLUGIN
        #self.streamingPlugin
        #
        #SIGNALS
        #
        # Signal fired when a `Plugin` is attached to a `Session`.
        #	on_attached = blinker.Signal()
        #self.streamingPlugin.on_attached.connect(self.streamingPlugin_on_attached)

        #
        # Signal fired when a `Plugin` is attached to a `Session`.
        #	on_detached = blinker.Signal()
        #self.streamingPlugin.on_detached.connect(self.streamingPlugin_on_detached)

        #
        # Signal fired when a `Plugin` receives a message.
        #	on_message = blinker.Signal()
        #self.streamingPlugin.on_message.connect(self.streamingPlugin_on_message)
        #

        # Signal fired when webrtc for a `Plugin` has been setup.
        #	on_webrtcup = blinker.Signal()
        #self.streamingPlugin.on_webrtcup.connect(self.streamingPlugin_on_webrtcup)

        #
        # Signal fired when webrtc session for a `Plugin` has been torn down.
        #	on_hangup = blinker.Signal()
        #self.streamingPlugin.on_hangup.connect(self.streamingPlugin_on_hangup)

        ##

        self.session.register_plugin(self.streamingPlugin)
        try:
            self.session.connect()
        except Exception as e:
            if e.errno == 111:
                #Connection refused
                self._logger.warn('Janus was unavailable. Restarting...')
                if self._parent.restartJanus():
                    self._logger.info('Janus succesfully restarted')
                    self.session.connect()
                else:
                    self._logger.error('Janus could not be restarted')
                    return None

        self.sessionKa = KeepAlive(self.session)
        self.sessionKa.daemon = True
        self.sessionKa.start()

        waitingState = sem.wait(5)
        sem.clear()

        if waitingState:
            return self.session.id

        else:
            self._logger.error(
                "Error initializing Janus: session can not be started")
            return None
Exemplo n.º 2
0
	def start(self):
		sem = threading.Event()

		self.streamingPlugin = StreamingPlugin()
		self.session = Session('ws://127.0.0.1:8188', secret='d5faa25fe8e3438d826efb1cd3369a50')

		@self.session.on_plugin_attached.connect
		def receive_data(sender, **kw):
			#wait until Janus plugin is not attached
			sem.set()


		#CONNECTION
		#self.session.cxn_cls
		#
		#SIGNALS
		#
		# Signal fired when `Connection` has been established.
			#	on_opened = blinker.Signal()
		#self.session.cxn_cls.on_opened.connect(self.connection_on_opened)

		#
		# Signal fired when `Connection` has been closed.
		#	on_closed = blinker.Signal()
		#self.session.cxn_cls.on_closed.connect(self.connection_on_closed)

		#
		# Signal fired when `Connection` receives a message
		#	on_message = blinker.Signal()
		self.session.cxn_cls.on_message.connect(self.connection_on_message)

		##


		#SESSION
		#self.session
		#
		#SIGNALS
		#
		# Signal fired when `Session` has been connected.
		#	on_connected = blinker.Signal()
		#self.session.on_connected.connect(self.session_on_connected)

		#
		# Signal fired when `Session` has been disconnected.
		#	on_disconnected = blinker.Signal()
		#self.session.on_disconnected.connect(self.session_on_disconnected)

		#
		# Signal fired when a `Session` level message is received.
		#	on_message = blinker.Signal()
		#self.session.on_message.connect(self.session_on_message)

		#
		# Signal fired when a `Session` `Plugin` been attached.
		#	on_plugin_attached = blinker.Signal()
		#self.session.on_plugin_attached.connect(self.session_on_plugin_attached)

		#
		# Signal fired when a `Session` `Plugin` been detached.
		#	on_plugin_detached = blinker.Signal()
		#self.session.on_plugin_detached.connect(self.session_on_plugin_detached)

		##


		#PLUGIN
		#self.streamingPlugin
		#
		#SIGNALS
		#
		# Signal fired when a `Plugin` is attached to a `Session`.
		#	on_attached = blinker.Signal()
		#self.streamingPlugin.on_attached.connect(self.streamingPlugin_on_attached)

		#
		# Signal fired when a `Plugin` is attached to a `Session`.
		#	on_detached = blinker.Signal()
		#self.streamingPlugin.on_detached.connect(self.streamingPlugin_on_detached)

		#
		# Signal fired when a `Plugin` receives a message.
		#	on_message = blinker.Signal()
		#self.streamingPlugin.on_message.connect(self.streamingPlugin_on_message)
		#

		# Signal fired when webrtc for a `Plugin` has been setup.
		#	on_webrtcup = blinker.Signal()
		#self.streamingPlugin.on_webrtcup.connect(self.streamingPlugin_on_webrtcup)


		#
		# Signal fired when webrtc session for a `Plugin` has been torn down.
		#	on_hangup = blinker.Signal()
		#self.streamingPlugin.on_hangup.connect(self.streamingPlugin_on_hangup)

		##

		self.session.register_plugin(self.streamingPlugin)
		try:
			self.session.connect()
		except Exception as e:
			if e.errno == 111:
				#Connection refused
				self._logger.warn('Janus was unavailable. Restarting...')
				if self._parent.restartJanus():
					self._logger.info('Janus succesfully restarted')
					self.session.connect()
				else:
					self._logger.error('Janus could not be restarted')
					return None

		self.sessionKa = KeepAlive(self.session)
		self.sessionKa.daemon = True
		self.sessionKa.start()

		waitingState = sem.wait(5)
		sem.clear()

		if waitingState:
			return self.session.id

		else:
			self._logger.error("Error initializing Janus: session can not be started")
			return None
Exemplo n.º 3
0
class ConnectionPeer(object):
    def __init__(self, clientId, parent):
        self._logger = logging.getLogger(__name__ + ':ConnectionPeer')
        self.session = None
        self.clientId = clientId
        self.sessionKa = None
        self.id = None
        self.streamingPlugin = None
        self._parent = parent

    #CONNECTION
    #def connection_on_opened(self,connection):
    #	logging.info('CONNECTION ON OPENED')

    #def connection_on_closed(self, connection, **kw):
    #	self._logger.warn('Lost connection with Janus')

    def connection_on_message(self, connection, message):
        messageToSend = json.loads(str(message))

        if self.session is not None and 'session_id' in messageToSend and messageToSend[
                'session_id'] != self.session.id:
            return

        if 'janus' in messageToSend and messageToSend['janus'] == 'hangup':
            #Finish camera session caused by user or exception
            self._parent.closePeerSession(messageToSend['session_id'])

        elif 'jsep' in messageToSend:
            self.sendEventToPeer('getSdp', messageToSend)

    #SESSION
    #def session_on_connected(self,session,**kw):
    #	logging.info('SESSION ON OPENED')

    #def session_on_disconnected(self,session,**kw):
    #	logging.info('SESSION ON CLOSED')

    #def session_on_message(self,session,**kw):
    #	logging.info('SESSION ON MESSAGE')

    #def session_on_plugin_attached(self,session,**kw):
    #	logging.info('SESSION ON PLUGIN ATTACHED')

    #def session_on_plugin_detached(self,session,**kw):
    #	logging.info('SESSION ON PLUGIN DETACHED')

    #PLUGIN
    #def streamingPlugin_on_message(self,plugin,**kw):
    #	logging.info('STREAMINGPLUGIN ON MESSAGE')

    #def streamingPlugin_on_attached(self,plugin,**kw):
    #	logging.info('STREAMINGPLUGIN ON ATTACHED')

    #def streamingPlugin_on_detached(self,plugin,**kw):
    #	logging.info('STREAMINGPLUGIN ON DETACHED')

    #def streamingPlugin_on_webrtcup(self,plugin,**kw):
    #	logging.info('STREAMINGPLUGIN ON WEBRTCUP')

    #def streamingPlugin_on_hangup(self,plugin,**kw):
    #	logging.info('STREAMINGPLUGIN ON HANGUP')

    def start(self):
        sem = threading.Event()

        self.streamingPlugin = StreamingPlugin()
        self.session = Session('ws://127.0.0.1:8188',
                               secret='d5faa25fe8e3438d826efb1cd3369a50')

        @self.session.on_plugin_attached.connect
        def receive_data(sender, **kw):
            #wait until Janus plugin is not attached
            sem.set()

        #CONNECTION
        #self.session.cxn_cls
        #
        #SIGNALS
        #
        # Signal fired when `Connection` has been established.
        #	on_opened = blinker.Signal()
        #self.session.cxn_cls.on_opened.connect(self.connection_on_opened)

        #
        # Signal fired when `Connection` has been closed.
        #	on_closed = blinker.Signal()
        #self.session.cxn_cls.on_closed.connect(self.connection_on_closed)

        #
        # Signal fired when `Connection` receives a message
        #	on_message = blinker.Signal()
        self.session.cxn_cls.on_message.connect(self.connection_on_message)

        ##

        #SESSION
        #self.session
        #
        #SIGNALS
        #
        # Signal fired when `Session` has been connected.
        #	on_connected = blinker.Signal()
        #self.session.on_connected.connect(self.session_on_connected)

        #
        # Signal fired when `Session` has been disconnected.
        #	on_disconnected = blinker.Signal()
        #self.session.on_disconnected.connect(self.session_on_disconnected)

        #
        # Signal fired when a `Session` level message is received.
        #	on_message = blinker.Signal()
        #self.session.on_message.connect(self.session_on_message)

        #
        # Signal fired when a `Session` `Plugin` been attached.
        #	on_plugin_attached = blinker.Signal()
        #self.session.on_plugin_attached.connect(self.session_on_plugin_attached)

        #
        # Signal fired when a `Session` `Plugin` been detached.
        #	on_plugin_detached = blinker.Signal()
        #self.session.on_plugin_detached.connect(self.session_on_plugin_detached)

        ##

        #PLUGIN
        #self.streamingPlugin
        #
        #SIGNALS
        #
        # Signal fired when a `Plugin` is attached to a `Session`.
        #	on_attached = blinker.Signal()
        #self.streamingPlugin.on_attached.connect(self.streamingPlugin_on_attached)

        #
        # Signal fired when a `Plugin` is attached to a `Session`.
        #	on_detached = blinker.Signal()
        #self.streamingPlugin.on_detached.connect(self.streamingPlugin_on_detached)

        #
        # Signal fired when a `Plugin` receives a message.
        #	on_message = blinker.Signal()
        #self.streamingPlugin.on_message.connect(self.streamingPlugin_on_message)
        #

        # Signal fired when webrtc for a `Plugin` has been setup.
        #	on_webrtcup = blinker.Signal()
        #self.streamingPlugin.on_webrtcup.connect(self.streamingPlugin_on_webrtcup)

        #
        # Signal fired when webrtc session for a `Plugin` has been torn down.
        #	on_hangup = blinker.Signal()
        #self.streamingPlugin.on_hangup.connect(self.streamingPlugin_on_hangup)

        ##

        self.session.register_plugin(self.streamingPlugin)
        try:
            self.session.connect()
        except Exception as e:
            if e.errno == 111:
                #Connection refused
                self._logger.warn('Janus was unavailable. Restarting...')
                if self._parent.restartJanus():
                    self._logger.info('Janus succesfully restarted')
                    self.session.connect()
                else:
                    self._logger.error('Janus could not be restarted')
                    return None

        self.sessionKa = KeepAlive(self.session)
        self.sessionKa.daemon = True
        self.sessionKa.start()

        waitingState = sem.wait(5)
        sem.clear()

        if waitingState:
            return self.session.id

        else:
            self._logger.error(
                "Error initializing Janus: session can not be started")
            return None

    def close(self):
        #stop the keepalive worker
        self.sessionKa.stop()
        self.sessionKa.join()
        self.sessionKa = None

        #kill the current session
        self.session.unregister_plugin(self.streamingPlugin)
        self.session.disconnect()
        self.session = None
        self.streamingPlugin = None

    def sendEventToPeer(self, type, data=None):
        try:
            boxrouterManager().sendEventToClient(self.clientId, type, data)

        except:
            self._logger.error('Error sending event [%s] to peer %s' %
                               (type, self.clientId),
                               exc_info=True)
Exemplo n.º 4
0
class ConnectionPeer(object):
	def __init__(self, clientId, parent):
		self._logger = logging.getLogger(__name__ + ':ConnectionPeer')
		self.session = None
		self.clientId = clientId
		self.sessionKa = None
		self.id = None
		self.streamingPlugin = None
		self._parent = parent

	#CONNECTION
	#def connection_on_opened(self,connection):
	#	logging.info('CONNECTION ON OPENED')

	#def connection_on_closed(self, connection, **kw):
	#	self._logger.warn('Lost connection with Janus')

	def connection_on_message(self, connection, message):
		messageToSend = json.loads(str(message))

		if self.session is not None and 'session_id' in messageToSend and messageToSend['session_id'] != self.session.id:
			return

		if 'janus' in messageToSend and messageToSend['janus'] == 'hangup':
			#Finish camera session caused by user or exception
			self._parent.closePeerSession(messageToSend['session_id'])

		elif 'jsep' in messageToSend:
			self.sendEventToPeer('getSdp', messageToSend)

	#SESSION
	#def session_on_connected(self,session,**kw):
	#	logging.info('SESSION ON OPENED')

	#def session_on_disconnected(self,session,**kw):
	#	logging.info('SESSION ON CLOSED')

	#def session_on_message(self,session,**kw):
	#	logging.info('SESSION ON MESSAGE')

	#def session_on_plugin_attached(self,session,**kw):
	#	logging.info('SESSION ON PLUGIN ATTACHED')

	#def session_on_plugin_detached(self,session,**kw):
	#	logging.info('SESSION ON PLUGIN DETACHED')


	#PLUGIN
	#def streamingPlugin_on_message(self,plugin,**kw):
	#	logging.info('STREAMINGPLUGIN ON MESSAGE')

	#def streamingPlugin_on_attached(self,plugin,**kw):
	#	logging.info('STREAMINGPLUGIN ON ATTACHED')

	#def streamingPlugin_on_detached(self,plugin,**kw):
	#	logging.info('STREAMINGPLUGIN ON DETACHED')

	#def streamingPlugin_on_webrtcup(self,plugin,**kw):
	#	logging.info('STREAMINGPLUGIN ON WEBRTCUP')

	#def streamingPlugin_on_hangup(self,plugin,**kw):
	#	logging.info('STREAMINGPLUGIN ON HANGUP')

	def start(self):
		sem = threading.Event()

		self.streamingPlugin = StreamingPlugin()
		self.session = Session('ws://127.0.0.1:8188', secret='d5faa25fe8e3438d826efb1cd3369a50')

		@self.session.on_plugin_attached.connect
		def receive_data(sender, **kw):
			#wait until Janus plugin is not attached
			sem.set()


		#CONNECTION
		#self.session.cxn_cls
		#
		#SIGNALS
		#
		# Signal fired when `Connection` has been established.
			#	on_opened = blinker.Signal()
		#self.session.cxn_cls.on_opened.connect(self.connection_on_opened)

		#
		# Signal fired when `Connection` has been closed.
		#	on_closed = blinker.Signal()
		#self.session.cxn_cls.on_closed.connect(self.connection_on_closed)

		#
		# Signal fired when `Connection` receives a message
		#	on_message = blinker.Signal()
		self.session.cxn_cls.on_message.connect(self.connection_on_message)

		##


		#SESSION
		#self.session
		#
		#SIGNALS
		#
		# Signal fired when `Session` has been connected.
		#	on_connected = blinker.Signal()
		#self.session.on_connected.connect(self.session_on_connected)

		#
		# Signal fired when `Session` has been disconnected.
		#	on_disconnected = blinker.Signal()
		#self.session.on_disconnected.connect(self.session_on_disconnected)

		#
		# Signal fired when a `Session` level message is received.
		#	on_message = blinker.Signal()
		#self.session.on_message.connect(self.session_on_message)

		#
		# Signal fired when a `Session` `Plugin` been attached.
		#	on_plugin_attached = blinker.Signal()
		#self.session.on_plugin_attached.connect(self.session_on_plugin_attached)

		#
		# Signal fired when a `Session` `Plugin` been detached.
		#	on_plugin_detached = blinker.Signal()
		#self.session.on_plugin_detached.connect(self.session_on_plugin_detached)

		##


		#PLUGIN
		#self.streamingPlugin
		#
		#SIGNALS
		#
		# Signal fired when a `Plugin` is attached to a `Session`.
		#	on_attached = blinker.Signal()
		#self.streamingPlugin.on_attached.connect(self.streamingPlugin_on_attached)

		#
		# Signal fired when a `Plugin` is attached to a `Session`.
		#	on_detached = blinker.Signal()
		#self.streamingPlugin.on_detached.connect(self.streamingPlugin_on_detached)

		#
		# Signal fired when a `Plugin` receives a message.
		#	on_message = blinker.Signal()
		#self.streamingPlugin.on_message.connect(self.streamingPlugin_on_message)
		#

		# Signal fired when webrtc for a `Plugin` has been setup.
		#	on_webrtcup = blinker.Signal()
		#self.streamingPlugin.on_webrtcup.connect(self.streamingPlugin_on_webrtcup)


		#
		# Signal fired when webrtc session for a `Plugin` has been torn down.
		#	on_hangup = blinker.Signal()
		#self.streamingPlugin.on_hangup.connect(self.streamingPlugin_on_hangup)

		##

		self.session.register_plugin(self.streamingPlugin)
		try:
			self.session.connect()
		except Exception as e:
			if e.errno == 111:
				#Connection refused
				self._logger.warn('Janus was unavailable. Restarting...')
				if self._parent.restartJanus():
					self._logger.info('Janus succesfully restarted')
					self.session.connect()
				else:
					self._logger.error('Janus could not be restarted')
					return None

		self.sessionKa = KeepAlive(self.session)
		self.sessionKa.daemon = True
		self.sessionKa.start()

		waitingState = sem.wait(5)
		sem.clear()

		if waitingState:
			return self.session.id

		else:
			self._logger.error("Error initializing Janus: session can not be started")
			return None

	def close(self):
		#stop the keepalive worker
		self.sessionKa.stop()
		self.sessionKa.join()
		self.sessionKa = None

		#kill the current session
		self.session.unregister_plugin(self.streamingPlugin)
		self.session.disconnect()
		self.session = None
		self.streamingPlugin = None

	def sendEventToPeer(self, type, data= None):
		try:
			boxrouterManager().sendEventToClient(self.clientId, type, data)

		except:
			self._logger.error('Error sending event [%s] to peer %s' % (type, self.clientId), exc_info = True)