import os import pytz from datetime import datetime from intelab_python_sdk.logger import log_init from dynaconf import settings from ils_common_video.utils.isc_client import HikVisionClient from ils_common_video.utils.record_utils import record_thread, get_video_duration from ils_common_video.utils.api_helper import PlaybackUrlException from ils_common_video.isc_video.pre_event import PreEvent tz = pytz.timezone('Asia/Shanghai') log_init(__name__, True, './log') video_path = '/tmp/videos/isc-record' os.makedirs(video_path, exist_ok=True) config = settings.get('ISC') client = HikVisionClient(config.get('KEY'), config.get('SECRET'), config.get('HOST'), config.get('PORT')) def main(): start_time = datetime(2021, 7, 22, 10, 0, 0).astimezone(tz) # start_time = datetime(2021, 5, 28, 9, 10, 59).astimezone(tz) end_time = datetime(2021, 7, 22, 10, 5, 0).astimezone(tz) camera_index = 'a3cafffd4114438eb197f48af1e19293' results = [] try: res = client.get_cameras_playback_urls( camera_index, client.iso_format(start_time), client.iso_format(end_time) ) results.extend(res) except PlaybackUrlException as e: if 'Internal Error' in e.msg: pre_events = PreEvent(start_time.astimezone(pytz.utc).strftime('%Y-%m-%d %H:%M:%S'), end_time.astimezone(pytz.utc).strftime('%Y-%m-%d %H:%M:%S')) unverified_events = pre_events.merge_alarm_to_event(pre_events.get_alarm_list(camera_index)) for event in unverified_events: try: res = client.get_cameras_playback_urls( camera_index, client.iso_format(event['start_time']), client.iso_format(event['end_time']) ) results.extend(res) except Exception as e: print('ERROR:', e) else: print(res) print(results) for event in results: cur_start_time = max(event['start_time'], start_time) cur_end_time = min(event['end_time'], end_time) print(cur_start_time, cur_end_time) # print(event) file_info, error_log = stream_record(event['stream_url'], cur_start_time, cur_end_time) print(file_info) def stream_record(stream, start_time, end_time): start_time = start_time.strftime('%Y%m%dT%H%M%S') end_time = end_time.strftime('%Y%m%dT%H%M%S') if stream['protocol'] == 'rtsp': stream_url = stream['url'] else: stream_url = '{}?beginTime={}&endTime={}&{}'.format(stream['url'], start_time, end_time, stream['extra_args']) file_name = os.path.join( video_path, 'rtmp_{}_{}_{}.mp4'.format('y', start_time, end_time)) # TODO 多进程处理 print(stream_url, start_time, end_time) # record_thread(stream_url, file_name, thread_name='y', protocol=stream['protocol']) return get_video_duration(file_name) if __name__ == '__main__': main()