X-Git-Url: https://git.rvb.name/vpproxy.git/blobdiff_plain/f4c36b837c66078d1dd496481b82439377d5709a..c5401ae7940c77b3f65eaccfee8493c61478b579:/vlcclient/vlcclient.py?ds=inline diff --git a/vlcclient/vlcclient.py b/vlcclient/vlcclient.py index 69d9fb9..9492156 100644 --- a/vlcclient/vlcclient.py +++ b/vlcclient/vlcclient.py @@ -8,7 +8,7 @@ import gevent.coros import telnetlib import logging from vlcmessages import * - +import time class VlcException(Exception): @@ -51,10 +51,13 @@ class VlcClient(object): # Logger logger = logging.getLogger('VlcClient_init') + # Streams + self.streams=dict() + # Making connection try: self._socket = telnetlib.Telnet(host, port, connect_timeout) - logger.debug("Successfully connected with VLC socket!") + logger.info("Successfully connected with VLC socket!") except Exception as e: raise VlcException( "Socket creation error! VLC is not running? ERROR: " + repr(e)) @@ -89,7 +92,7 @@ class VlcClient(object): # If socket is still alive (connected) if self._socket: try: - logger.debug("Destroying VlcClient...") + logger.info("Destroying VlcClient...") self._write(VlcMessage.request.SHUTDOWN) # Set shuttingDown flag for recvData self._shuttingDown.set() @@ -107,7 +110,7 @@ class VlcClient(object): try: # Write message - logger.debug('VLC command: ' + message) + logger.info('VLC command: ' + message) self._socket.write(message + "\r\n") except EOFError as e: raise VlcException("Vlc Write error! ERROR: " + repr(e)) @@ -133,6 +136,10 @@ class VlcClient(object): msg = VlcMessage.request.startBroadcast(stream_name, input, self._out_port, muxer, pre_access, qtype) self._write(msg) else: + if stream_name not in self.streams: + self._resultlock.release() + logger.error("Attempting to delete not existing stream %s" % stream_name) + return self._write(VlcMessage.request.stopBroadcast(stream_name)) try: @@ -145,12 +152,18 @@ class VlcClient(object): logger.error(broadcast + " result timeout") raise VlcException(broadcast + " result timeout") finally: + logger.info("working with %s stream: %s" % (stream_name,broadcast)) + if brtype == True: + self.streams[stream_name]=time.time() + else: + del self.streams[stream_name] self._resultlock.release() + logger.info("worked with %s stream: %s" % (stream_name,broadcast)) if brtype == True: - logger.debug("Broadcast started") + logger.info("Broadcast started") else: - logger.debug("Broadcast stopped") + logger.info("Broadcast stopped") def startBroadcast(self, stream_name, input, muxer='ts', pre_access='', qtype='default'): logger = logging.getLogger("VlcClient_startBroadcast") @@ -160,6 +173,29 @@ class VlcClient(object): def stopBroadcast(self, stream_name): return self._broadcast(False, stream_name) + def mark(self,stream_name): + self.streams[stream_name]=time.time() + + def clean_streams(self,timeout=15): + self._resultlock.acquire() + to_stop=set() + for stream,lasttime in self.streams.iteritems(): + if time.time()-lasttime>timeout: + to_stop.add(stream) + for stream in to_stop: + try: + self.stopBroadcast(stream) + except: + pass + self._resultlock.release() + + def check_stream(self,stream_name): + if stream_name in self.streams: + self.streams[stream_name]=time.time() + return True + else: + return False + def pauseBroadcast(self, stream_name): return self._write(VlcMessage.request.pauseBroadcast(stream_name)) @@ -220,10 +256,10 @@ class VlcClient(object): # Do not move this before error handlers! elif self._recvbuffer.startswith(VlcMessage.response.STARTOK): # Broadcast started - logger.debug("Broadcast started") + logger.info("Broadcast started") self._result.set(True) elif self._recvbuffer.startswith(VlcMessage.response.STOPOK): # Broadcast stopped - logger.debug("Broadcast stopped") + logger.info("Broadcast stopped") self._result.set(True)