예제 #1
0
 def _record_task(self, info):
     '''
     开始录像任务
     '''
     print 'start record_task'
     _rcmd = RecordingCommand()
     _rcmd.send_command('RecordCmd=StopRecord', info['_ip'])
     time.sleep(0.2)
     if info['_record_mode'].lower() == 'all':
         _rcmd.send_command('RecordCmd=SetRecordMode&RecordMode=All',
                            info['_ip'])
     elif info['_record_mode'].lower() == 'resource':
         _rcmd.send_command('RecordCmd=SetRecordMode&RecordMode=Resource',
                            info['_ip'])
     elif info['_record_mode'].lower() == 'movie':
         _rcmd.send_command('RecordCmd=SetRecordMode&RecordMode=Movie',
                            info['_ip'])
     time.sleep(0.2)
     _directory_name = 'RecordCmd=SetFileFolder&SubFileFolder=' + info[
         '_directory_name']
     _rcmd.send_command(_directory_name, info['_ip'])
     time.sleep(0.2)
     _course_info = 'RecordCmd=SetCourseInfo&Department=%s&Subject=%s&CourseName=%s&\
             Teacher=%s&Address=%s&DateTime=%s&Description=%s&Grade=%s'\
             %(info['_department'], info['_subject'],info['_course_name'],
                     info['_teacher'],info['_address'],info['_datetime'],info['_description'],info['_grade'])
     _rcmd.send_command(_course_info, info['_ip'])
     time.sleep(0.2)
     _rcmd.send_command('RecordCmd=StartRecord', info['_ip'])
예제 #2
0
    def set_recording_dir(self,ip='127.0.0.1',hosttype='x86'):
        set_thread = threading.Timer(600, self.set_recording_dir)
        set_thread.start()
        try:
            _rcmd = RecordingCommand()
            _rcmd.send_command('RecordCmd=SetFileProperty&FileFormat=mp4&TotalFilePath=D:/RecordFile')

        except Exception as error:
            print str(error)
예제 #3
0
 def restart_rtmp_living(self,ip='127.0.0.1',hosttype = 'x86'):
     reload_thread = threading.Timer(3*3600, self.restart_rtmp_living)#3小时重新发起直播
     reload_thread.start()
     try:
         _rcmd = RecordingCommand()
         #info = _rcmd.send_command('RecordCmd=QueryRAllInfo')
         #if 'LivingStart' in info['info']:
         _rcmd.send_command('BroadCastCmd=StopBroadCast')
         time.sleep(3)
         _rcmd.send_command('BroadCastCmd=StartBroadCast')
     except Exception as error:
         print str(error)
예제 #4
0
def start():
    app = make_app()
    app.listen(10006)

    log('recording srv starting, using port 10006',
        project='recording',
        level=3)

    global _rcmd
    _rcmd = RecordingCommand()

    global _utils
    _utils = zkutils()

    start_card_server()

    stype = 'recording'
    reglist = gather_sds('recording', '../common/tokens.json')

    #处理本机
    service_url = r'http://<ip>:10006/recording/0/recording'
    local_service_desc = {}
    local_service_desc['type'] = stype
    local_service_desc['id'] = 'recording'
    local_service_desc['url'] = service_url
    _utils = zkutils()
    mac = _utils.mymac()
    local_service_desc['mac'] = mac
    local_service_desc['ip'] = '127.0.0.1'

    reglist.append(local_service_desc)

    log('mac:%s, ip:%s' % (mac, _utils.myip()), project='recording', level=3)

    global _class_schedule
    _class_schedule = Schedule(None)
    for reg in reglist:
        _class_schedule.analyse_json(reg['ip'], reg['mac'])
    _class_schedule.restart_rtmp_living()
    _class_schedule.set_recording_dir()
    del_dir_schedule()

    global rh
    rh = RegHt(reglist)

    global _ioloop
    _ioloop = IOLoop.instance()
    log('running ...', project='recording', level=3)
    _ioloop.start()
    log('terminated!!!!!', project='recording', level=3)
예제 #5
0
 def _stop_record(self, info):
     '''
     停止录像任务
     '''
     _rcmd = RecordingCommand()
     _rcmd.send_command('RecordCmd=StopRecord', info['_ip'])
예제 #6
0
def StopLiving():
    log('StopLiving called', project = 'recording', level = 3)
    _rcmd = RecordingCommand()
    rc=_rcmd.send_command('BroadCastCmd=StopBroadCast',ip)
    return rc
예제 #7
0
def _rtmp_living(ip, mac, hosttype):
    rc = {}
    rc['result'] = 'ok'
    rc['info'] = ''

    log('_rtmp_living: starting ...., ip=%s, mac=%s, hosttype=%s' % (ip, mac, hosttype), \
            project = 'recording')

    if hosttype == 'x86':
        if not CardLive_Runing():
            log('_rtmp_living: cardlive.exe NOT prepared?', project='recording', level = 2)
            rc['result'] = 'error'
            rc['info'] = 'cardlive.exe is not exit!'
            return rc

    try:
        log('_rtmp_living: try to get relay url', project = 'recording')
        middle_req = urllib2.urlopen(_load_base_url() + 'getServerUrl?type=middle', timeout = 2)
        middle_url = middle_req.read()
    except Exception as e:
        log('_rtmp_living: to get relay url fault! reason=%s' % e, project = 'recording', level = 1)
        rc['result'] = 'error'
        rc['info'] = str(e)
        return rc


    log('_rtmp_living: en, got relay url: %s' % middle_url, project = 'recording')

    try:
        log('_rtmp_living: to call relay of prepublishbatch', project = 'recording')
        req = urllib2.Request(middle_url+'/repeater/prepublishbatch')
        if hosttype == 'x86':
            data = _x86_rtmp_living_data(mac)
        else:
            data = _arm_rtmp_living_data(ip, mac, hosttype)
        data = json.dumps(data)

        response = urllib2.urlopen(req, data)
        content = json.load(response)

        log('_rtmp_living: response_code=%s' % str(content['response_code']), project = 'recording')    

        if content['response_code'] != 0:
            rc = _error_code(content['response_code'],content)
            log('_rtmp_living: err: info=%s' % rc['info'], project = 'recording', level = 1)
            return rc

        urls = []
        urls = content['content']
        movie_url = rtmp_ip = port = app = ''
        infos = []

        for url in urls:
            info = {}
            info['uid'] = str(url['uid'])
            info['rtmp_repeater'] = str(url['rtmp_repeater'])
            if 'teacher' in url['uid']:
                info['card_info'] = 'card0'
            if 'teacher_full' in url['uid']:   
                info['card_info'] = 'card1'
            if 'student' in url['uid']:
                info['card_info'] = 'card2'
            if 'student_full' in url['uid']:               
                info['card_info'] = 'card3'
            if 'vga' in url['uid']: 
                info['card_info'] = 'card4'
            if 'blackboard_writing' in url['uid']:
                info['card_info'] = 'card5'
            if 'movie' in url['uid']:   
                info['card_info'] = 'card6'

            str(info)

            infos.append(info)

            if 'teacher' in url['rtmp_repeater']:
                #movie_url = url['rtmp_repeater']
                #livingS(movie_url)
                url = url['rtmp_repeater']
                url = url[7:]
                rtmp_ip = url.split(':')[0]
                url = url[len(rtmp_ip)+1:]
                port = url.split('/')[0]
                url =url[len(port)+1:]
                app = url.split('/')[0]

        _rcmd = RecordingCommand()
        if hosttype == 'x86':
            ReslivingS(rtmp_ip,port,app)
        else:
            arm_arg = 'BroadCastCmd=RtmpUrlS&'
            for info in infos:
                arm_arg = arm_arg + info['rtmp_repeater'] +'^'
            arm_arg = arm_arg[:-1]
            log_info(arm_arg)
            rc = _rcmd.send_command(arm_arg,ip)
            print rc

        time.sleep(1)
        rc=_rcmd.send_command('BroadCastCmd=StartBroadCast',ip)

        if rc['result'] == 'ok':
            rc['info'] = infos

    except Exception as err:
        rc['result'] = 'error'
        rc['info'] = str(err)
        log('_rtmp_living: exception info=%s' % rc['info'], \
                project = 'recording', level = 1)

    return rc