Esempio n. 1
0
    def start_recording(self):
        log.info("Screencast recorder starting for session {}".format(
            self.filename_prefix))
        sys.stderr = sys.stdout = open(
            os.sep.join([self.dir_path, 'vnc_video.log']), 'w')
        self.__filepath = os.sep.join(
            [self.dir_path, str(self.filename_prefix) + '.flv'])

        kwargs = {
            'framerate':
            self.SCREENCAST_FRAMERATE,
            'clipping':
            video.str2clip("{}x{}+0-0".format(self.SCREENCAST_WIDTH,
                                              self.SCREENCAST_HEIGHT)),
            'debug':
            1
        }
        self.recorder = multiprocessing.Process(
            target=self._flvrec,
            args=(self.__filepath, self.host, self.port),
            kwargs=kwargs,
            name="{}.recorder".format(__name__))
        self.recorder.daemon = True
        self.recorder.start()
        log.info("Started screencast recording(pid:{}) for {}:{} to {}".format(
            self.recorder.pid, self.host, self.port, self.dir_path))
Esempio n. 2
0
def main(argv):
    import getopt, vnc2flv
    def usage():
        print argv[0], vnc2flv.__version__
        print ('usage: %s [-d] [-q] [-o filename] [-r framerate] [-K keyframe]'
               ' [-e vnc_encoding] [-P vnc_pwdfile] [-N]'
               ' [-B blocksize] [-C clipping] [-S subprocess] [-t time-per-piece]'
               ' [host[:display] [port]]' % argv[0])
        return 100
    try:
        (opts, args) = getopt.getopt(argv[1:], 'dqo:r:K:t:e:P:NB:C:S:')
    except getopt.GetoptError:
        return usage()
    debug = 0
    verbose = 1
    filename = 'out%s.flv' % time.strftime('%Y%m%d%H%M')
    framerate = 12
    keyframe = 120
    preferred_encoding = (0,)
    pwdfile = None
    cursor = True
    blocksize = 32
    clipping = None
    cmdline = None
    time_per_piece = None
    (host, port) = ('localhost', 5900)
    for (k, v) in opts:
        if k == '-d': debug += 1
        elif k == '-q': verbose -= 1
        elif k == '-o': filename = v
        elif k == '-r': framerate = int(v)
        elif k == '-K': keyframe = int(v)
        elif k == '-e': preferred_encoding = tuple( int(i) for i in v.split(',') )
        elif k == '-P': pwdfile = v
        elif k == '-N': cursor = False
        elif k == '-B': blocksize = int(v)
        elif k == '-C': clipping = str2clip(v)
        elif k == '-S': cmdline = v
        elif k == '-t':
            if v.endswith('m'):
                time_per_piece = int(v[:-1])
            else:
                raise Exception('Only understand values like 5m at present')
    if not cursor:
        preferred_encoding += (-232,-239,)
    if 1 <= len(args):
        if ':' in args[0]:
            i = args[0].index(':')
            host = args[0][:i] or 'localhost'
            port = int(args[0][i+1:])+5900
        else:
            host = args[0]
    if 2 <= len(args):
        port = int(args[1])
    return flvrec(filename, host, port, framerate=framerate, keyframe=keyframe,
                  preferred_encoding=preferred_encoding, pwdfile=pwdfile,
                  blocksize=blocksize, clipping=clipping, cmdline=cmdline,
                  debug=debug, verbose=verbose, time_per_piece=time_per_piece)
Esempio n. 3
0
def main(argv):
    import getopt, vnc2flv

    def usage():
        print argv[0], vnc2flv.__version__
        print(
            'usage: %s [-d] [-f] [-r framerate] [-K keyframe]'
            ' [-B blocksize] [-C clipping] [-W panwindow] [-S panspeed]'
            ' src1.flv src2.flv ... dest.flv' % argv[0])
        return 100

    try:
        (opts, args) = getopt.getopt(argv[1:], 'dfr:K:B:C:W:S:')
    except getopt.GetoptError:
        return usage()
    debug = 0
    force = False
    framerate = 12
    keyframe = 120
    blocksize = 32
    clipping = None
    panwindow = None
    panspeed = 15
    for (k, v) in opts:
        if k == '-d': debug += 1
        elif k == '-f': force = True
        elif k == '-r': framerate = int(v)
        elif k == '-K': keyframe = int(v)
        elif k == '-B': blocksize = int(v)
        elif k == '-C': clipping = str2clip(v)
        elif k == '-W': panwindow = str2size(v)
        elif k == '-S': panspeed = int(v)
    if len(args) < 2: return usage()
    outfile = args.pop(-1)
    srcfiles = args
    try:
        flvcat(outfile,
               srcfiles,
               framerate=framerate,
               keyframe=keyframe,
               blocksize=blocksize,
               clipping=clipping,
               panwindow=panwindow,
               panspeed=panspeed,
               force=force,
               debug=debug)
    except IOError, e:
        print >> sys.stderr, e
Esempio n. 4
0
    def start_recording(self, framerate=5, size=(800, 600)):
        sys.stderr = sys.stdout = open(
            os.sep.join([self.dir_path, 'vnc_video.log']), 'w')
        self.__filepath = os.sep.join(
            [self.dir_path, str(self.filename_prefix) + '.flv'])

        kwargs = {
            'framerate': framerate,
            'clipping': video.str2clip("%sx%s+0-0" % (size[0], size[1])),
            'debug': 1,
            'verbose': 1
        }
        self.recorder = multiprocessing.Process(target=self._flvrec,
                                                args=(self.__filepath,
                                                      self.host, self.port),
                                                kwargs=kwargs)
        self.recorder.start()
Esempio n. 5
0
    def start_recording(self, framerate=5, size=(800, 600)):
        sys.stderr = sys.stdout = open(
            os.sep.join([self.dir_path, 'vnc_video.log']), 'w')
        self.__filepath = os.sep.join(
            [self.dir_path, str(self.filename_prefix) + '.flv'])

        kwargs = {
            'framerate': framerate,
            'clipping': video.str2clip("%sx%s+0-0" % (size[0], size[1])),
            'debug': 1
        }
        self.recorder = multiprocessing.Process(target=self._flvrec,
                                                args=(self.__filepath,
                                                      self.host, self.port),
                                                kwargs=kwargs)
        self.recorder.daemon = True
        self.recorder.start()
        log.info("Started screencast recording(pid:{}) for {}:{} to {}".format(
            self.recorder.pid, self.host, self.port, self.dir_path))
Esempio n. 6
0
def main(argv):
    import getopt, vnc2flv
    def usage():
        print argv[0], vnc2flv.__version__
        print ('usage: %s [-d] [-f] [-r framerate] [-K keyframe]'
               ' [-B blocksize] [-C clipping] [-W panwindow] [-S panspeed]'
               ' src1.flv src2.flv ... dest.flv' % argv[0])
        return 100
    try:
        (opts, args) = getopt.getopt(argv[1:], 'dfr:K:B:C:W:S:')
    except getopt.GetoptError:
        return usage()
    debug = 0
    force = False
    framerate = 12
    keyframe = 120
    blocksize = 32
    clipping = None
    panwindow = None
    panspeed = 15
    for (k, v) in opts:
        if k == '-d': debug += 1
        elif k == '-f': force = True
        elif k == '-r': framerate = int(v)
        elif k == '-K': keyframe = int(v)
        elif k == '-B': blocksize = int(v)
        elif k == '-C': clipping = str2clip(v)
        elif k == '-W': panwindow = str2size(v)
        elif k == '-S': panspeed = int(v)
    if len(args) < 2: return usage()
    outfile = args.pop(-1)
    srcfiles = args
    try:
        flvcat(outfile, srcfiles,
               framerate=framerate, keyframe=keyframe,
               blocksize=blocksize, clipping=clipping,
               panwindow=panwindow, panspeed=panspeed,
               force=force, debug=debug)
    except IOError, e:
        print >>sys.stderr, e
Esempio n. 7
0
def main(argv):
    import getopt, vnc2flv

    def usage():
        print(argv[0], vnc2flv.__version__)
        print('usage: %s [-d] [-q] [-o filename] [-r framerate] [-K keyframe]'
              ' [-e vnc_encoding] [-P vnc_pwdfile] [-N]'
              ' [-B blocksize] [-C clipping] [-S subprocess]'
              ' [host[:display] [port]]' % argv[0])
        return 100

    try:
        (opts, args) = getopt.getopt(argv[1:], 'dqo:r:K:t:e:P:NB:C:S:')
    except getopt.GetoptError:
        return usage()
    debug = 0
    verbose = 1
    filename = 'out%s.flv' % time.strftime('%Y%m%d%H%M')
    framerate = 12
    keyframe = 120
    preferred_encoding = (0, )
    pwdfile = None
    cursor = True
    blocksize = 32
    clipping = None
    cmdline = None
    (host, port) = ('localhost', 5900)
    for (k, v) in opts:
        if k == '-d': debug += 1
        elif k == '-q': verbose -= 1
        elif k == '-o': filename = v
        elif k == '-r': framerate = int(v)
        elif k == '-K': keyframe = int(v)
        elif k == '-e':
            preferred_encoding = tuple(int(i) for i in v.split(','))
        elif k == '-P':
            pwdfile = v
        elif k == '-N':
            cursor = False
        elif k == '-B':
            blocksize = int(v)
        elif k == '-C':
            clipping = str2clip(v)
        elif k == '-S':
            cmdline = v
    if not cursor:
        preferred_encoding += (
            -232,
            -239,
        )
    if 1 <= len(args):
        if ':' in args[0]:
            i = args[0].index(':')
            host = args[0][:i] or 'localhost'
            port = int(args[0][i + 1:]) + 5900
        else:
            host = args[0]
    if 2 <= len(args):
        port = int(args[1])
    return flvrec(filename,
                  host,
                  port,
                  framerate=framerate,
                  keyframe=keyframe,
                  preferred_encoding=preferred_encoding,
                  pwdfile=pwdfile,
                  blocksize=blocksize,
                  clipping=clipping,
                  cmdline=cmdline,
                  debug=debug,
                  verbose=verbose)
Esempio n. 8
0
def main(argv):
    import getopt, vnc2flv
    def usage():
        print argv[0], vnc2flv.__version__
        print ('usage: %s [-d] [-q] [-o filename] [-r framerate] [-K keyframe]'
               ' [-e vnc_encoding] [-P vnc_pwdfile] [-N]'
               ' [-B blocksize] [-C clipping] [-S subprocess] [-R retry_max_times]'
               ' [host[:display] [port]]' % argv[0])
        return 100
    try:
        (opts, args) = getopt.getopt(argv[1:], 'dqo:r:K:t:e:P:NB:C:S:R:')
    except getopt.GetoptError:
        return usage()
    debug = 0
    verbose = 1
    filename = 'out%s.flv' % time.strftime('%Y%m%d%H%M')
    framerate = 12
    keyframe = 120
    preferred_encoding = (0,)
    pwdfile = None
    cursor = True
    blocksize = 32
    clipping = None
    cmdline = None
    retry_cnt = 1
    (host, port) = ('localhost', 5900)
    for (k, v) in opts:
        if k == '-d': debug += 1
        elif k == '-q': verbose -= 1
        elif k == '-o': filename = v
        elif k == '-r': framerate = int(v)
        elif k == '-K': keyframe = int(v)
        elif k == '-e': preferred_encoding = tuple( int(i) for i in v.split(',') )
        elif k == '-P': pwdfile = v
        elif k == '-N': cursor = False
        elif k == '-B': blocksize = int(v)
        elif k == '-C': clipping = str2clip(v)
        elif k == '-S': cmdline = v
        elif k == '-R': retry_cnt = int(v)
    if not cursor:
        preferred_encoding += (-232,-239,)
    if 1 <= len(args):
        if ':' in args[0]:
            i = args[0].index(':')
            host = args[0][:i] or 'localhost'
            port = int(args[0][i+1:])+5900
        else:
            host = args[0]
    if 2 <= len(args):
        port = int(args[1])





    # Doing retry when errors: Socket error(power cycle) or RFB error(also may caused by target power cycle , which causes VNC disconnected for a while.)
    interval=15 # sec between each retry
    arr=filename.split('.flv')
    base_fname=arr[0]
    if len(arr) <= 1 :
	print 'Error: the filename should be in format of xxxx.flv'
        return 4;

    i =1
    while i <= retry_cnt:
	    if i > 1:
		filename="%s_%d.flv" %( base_fname, i ) # save as a new file name
	    ret =  flvrec(filename, host, port, framerate=framerate, keyframe=keyframe,
        	          preferred_encoding=preferred_encoding, pwdfile=pwdfile,
                	  blocksize=blocksize, clipping=clipping, cmdline=cmdline,
	                  debug=debug, verbose=verbose)
            i = i + 1
            if retry_cnt == 1 or ret == 0:
                return ret;
            else:
                print ('[Warning]: VNC disconnected. ret code is %d  ')%( ret )
                print ('[Warning]: Retry recording after %d sec, retry counter = %d, total retry is %d ')%( interval, i, retry_cnt ) 
                time.sleep(interval)
    return 3; # exceed retry, too many RFB errors