def flvrec(filename, host='localhost', port=5900, framerate=12, keyframe=120, preferred_encoding=(0, ), pwdfile=None, blocksize=32, clipping=None, cmdline=None, debug=0, verbose=1): fp = file(filename, 'wb') if pwdfile: pwdcache = PWDFile(pwdfile) else: pwdcache = PWDCache('%s:%d' % (host, port)) writer = FLVWriter(fp, framerate=framerate, debug=debug) sink = FLVVideoSink(writer, blocksize=blocksize, framerate=framerate, keyframe=keyframe, clipping=clipping, debug=debug) client = RFBNetworkClient(host, port, sink, timeout=500 / framerate, pwdcache=pwdcache, preferred_encoding=preferred_encoding, debug=debug) if verbose: print >> sys.stderr, 'start recording' pid = 0 if cmdline: pid = os.fork() if pid == 0: os.setpgrp() os.execvp('sh', ['sh', '-c', cmdline]) sys.exit(1) retval = 0 try: def sigint_handler(sig, frame): raise KeyboardInterrupt signal.signal(signal.SIGINT, sigint_handler) client.open() try: while 1: client.idle() finally: client.close() except KeyboardInterrupt: pass except socket.error, e: print >> sys.stderr, 'Socket error:', e retval = 1
def client_from_config(config): password = config.get('password') filename = config.get('filename') host = config.get('host') port = config.get('port') output_path = config.get('output_path') framerate = config.get('framerate') keyframe = config.get('keyframe') preferred_encoding = config.get('preferred_encoding') blocksize = config.get('blocksize') clipping = config.get('clipping') debug = config.get('debug') pwdcache = MemoryPWD(password) try: os.makedirs(output_path) except OSError as exc: if exc.errno == errno.EEXIST and os.path.isdir(output_path): pass else: raise fp = open(os.path.join(output_path, filename), 'wb') writer = FLVWriter(fp, framerate=framerate, debug=debug) sink = FLVVideoSink(writer, blocksize=blocksize, framerate=framerate, keyframe=keyframe, clipping=clipping, debug=debug) client = RFBNetworkClient(host, port, sink, timeout=500 / framerate, pwdcache=pwdcache, preferred_encoding=preferred_encoding, debug=debug) return fp, writer, client