提交 502889c5 authored 作者: zw.wang's avatar zw.wang

feat: 对接api服务

上级 dec1c218
...@@ -12,7 +12,7 @@ from intelab_python_sdk.logger import log_init, log ...@@ -12,7 +12,7 @@ from intelab_python_sdk.logger import log_init, log
from intelab_python_sdk.ffmpeg.ffmpeg_concat import concat from intelab_python_sdk.ffmpeg.ffmpeg_concat import concat
from hikvision_isc_client.db import rabbitmq_connect from hikvision_isc_client.db import rabbitmq_connect
from hikvision_isc_client.client import HikVisionClient from hikvision_isc_client.utils.api_helper import IntelabApiHelper
from hikvision_isc_client.utils import aliyun_oss from hikvision_isc_client.utils import aliyun_oss
from hikvision_isc_client.utils.record_utils import record_thread, get_video_duration, time_to_seconds from hikvision_isc_client.utils.record_utils import record_thread, get_video_duration, time_to_seconds
from hikvision_isc_client.db.mysql import insert_video_info from hikvision_isc_client.db.mysql import insert_video_info
...@@ -21,9 +21,7 @@ tz = pytz.timezone('Asia/Shanghai') ...@@ -21,9 +21,7 @@ tz = pytz.timezone('Asia/Shanghai')
video_path = '/data/videos/isc-record' video_path = '/data/videos/isc-record'
os.makedirs(video_path, exist_ok=True) os.makedirs(video_path, exist_ok=True)
config = dynaconf.settings.get('ISC') api_helper = IntelabApiHelper()
client = HikVisionClient(config.get('KEY'), config.get('SECRET'),
config.get('HOST'), config.get('PORT'))
class StreamRecorder: class StreamRecorder:
...@@ -54,7 +52,11 @@ class StreamRecorder: ...@@ -54,7 +52,11 @@ class StreamRecorder:
thread_id = threading.get_ident() thread_id = threading.get_ident()
log.info('Thread id: %s Delivery tag: %s Message body: %s', thread_id, log.info('Thread id: %s Delivery tag: %s Message body: %s', thread_id,
delivery_tag, body) delivery_tag, body)
try:
# TODO 异常报错时不需要ack掉消息
self.process_message(body) self.process_message(body)
except Exception as e:
log.exception(e)
cb = functools.partial(ack_message, ch, delivery_tag) cb = functools.partial(ack_message, ch, delivery_tag)
conn.add_callback_threadsafe(cb) conn.add_callback_threadsafe(cb)
...@@ -92,10 +94,9 @@ class StreamRecorder: ...@@ -92,10 +94,9 @@ class StreamRecorder:
def process_message(self, body): def process_message(self, body):
t1 = time.time() t1 = time.time()
record_result = self.recorder( record_result = self.recorder(
body['camera_index'], body['camera_code'],
datetime.strptime(body['start_time'], '%Y-%m-%dT%H:%M:%S').astimezone(tz), datetime.strptime(body['start_time'], '%Y-%m-%dT%H:%M:%S').astimezone(tz),
datetime.strptime(body['end_time'], '%Y-%m-%dT%H:%M:%S').astimezone(tz), datetime.strptime(body['end_time'], '%Y-%m-%dT%H:%M:%S').astimezone(tz),
body['camera_code']
) )
t2 = time.time() t2 = time.time()
...@@ -119,17 +120,16 @@ class StreamRecorder: ...@@ -119,17 +120,16 @@ class StreamRecorder:
return True return True
@staticmethod @staticmethod
def recorder(camera_index, start_time, end_time, camera_code): def recorder(camera_code, start_time, end_time):
""" """
:param camera_index: :param camera_code: 摄像头序列号
:param start_time: 开始时间,上海时区 :param start_time: 开始时间,上海时区
:param end_time: 结束时间,上海时区 :param end_time: 结束时间,上海时区
:param camera_code: 摄像头序列号
""" """
playback_urls = client.get_cameras_playback_urls( playback_urls = api_helper.get_cameras_playback_urls(
camera_index, camera_code,
HikVisionClient.iso_format(start_time), IntelabApiHelper.iso_format(start_time),
HikVisionClient.iso_format(end_time) IntelabApiHelper.iso_format(end_time)
) )
log.info('playback: %s', playback_urls) log.info('playback: %s', playback_urls)
file_name = os.path.join(video_path, 'ISC_{}_{}_{}.mp4'.format( file_name = os.path.join(video_path, 'ISC_{}_{}_{}.mp4'.format(
......
import json
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')
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'))
from dynaconf import settings from dynaconf import settings
from hikvision_isc_client.client import HikVisionClient from hikvision_isc_client.utils.isc_client import HikVisionClient
config = settings.get('ISC') config = settings.get('ISC')
client = HikVisionClient(config.get('KEY'), config.get('SECRET'), client = HikVisionClient(config.get('KEY'), config.get('SECRET'),
......
...@@ -4,7 +4,7 @@ from datetime import datetime ...@@ -4,7 +4,7 @@ from datetime import datetime
from intelab_python_sdk.logger import log_init from intelab_python_sdk.logger import log_init
from dynaconf import settings from dynaconf import settings
from hikvision_isc_client.client import HikVisionClient from hikvision_isc_client.utils.isc_client import HikVisionClient
from hikvision_isc_client.recorder import StreamRecorder from hikvision_isc_client.recorder import StreamRecorder
......
from dynaconf import settings from dynaconf import settings
from hikvision_isc_client.client import HikVisionClient from hikvision_isc_client.utils.isc_client import HikVisionClient
config = settings.get('ISC') config = settings.get('ISC')
client = HikVisionClient(config.get('KEY'), config.get('SECRET'), client = HikVisionClient(config.get('KEY'), config.get('SECRET'),
......
from dynaconf import settings from dynaconf import settings
from hikvision_isc_client.client import HikVisionClient from hikvision_isc_client.utils.isc_client import HikVisionClient
config = settings.get('ISC') config = settings.get('ISC')
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论