import requests import dynaconf import dateutil.parser from datetime import datetime, timedelta class IntelabApiHelper: def __init__(self): config = dynaconf.settings.get('COMMON') self.host = config.get('HOST') @staticmethod def iso_format(t): return '{}+08:00'.format(t.strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3]) def get_cameras_playback_urls(self, camera_code, start_time, end_time, protocol='rtmp'): streamform = 'ps' if protocol == 'rtmp' else 'rtp' params = { 'beginTime': start_time, 'endTime': end_time, 'protocol': protocol, 'streamform': streamform } uri = '/python/api/v1/secure/camera/playback/urls/{}'.format(camera_code) expired_time = datetime.now() + timedelta(minutes=5) response = requests.get(self.host + uri, params=params, timeout=30) response.raise_for_status() res_json = response.json().get('data') or {} # TODO 数据为空的异常处理 results = [] for f in res_json.get('list') or []: start_time = dateutil.parser.parse(f['beginTime']) end_time = dateutil.parser.parse(f['endTime']) results.append({ 'start_time': start_time, 'end_time': end_time, 'expired_time': expired_time, 'stream_url': { 'url': res_json.get('url'), 'extra_args': 'playBackMode=1', 'protocol': protocol } }) return results if __name__ == '__main__': api_helper = IntelabApiHelper() print(api_helper.get_cameras_playback_urls('D86639983', '2021-05-06T10:14:35.000+08:00', '2021-05-06T10:15:41.000+08:00'))