コード例 #1
0
ファイル: flvrec.py プロジェクト: ssdna/vnc2flv
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
コード例 #2
0
    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