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

feat: [merger] 合并摄像头本地sd卡视频移动录制计划

上级 494adbbd
...@@ -20,6 +20,9 @@ from isc_video_record.pre_event import PreEvent ...@@ -20,6 +20,9 @@ from isc_video_record.pre_event import PreEvent
from isc_video_record.db.mysql import get_camera_info, insert_video_info from isc_video_record.db.mysql import get_camera_info, insert_video_info
from isc_video_record.utils.excel_utils import gen_excel from isc_video_record.utils.excel_utils import gen_excel
from isc_video_record.utils.aliyun_oss import oss_upload_file from isc_video_record.utils.aliyun_oss import oss_upload_file
from isc_video_record.utils.api_helper import IntelabApiHelper
api_helper = IntelabApiHelper()
TIMEZONE = 'Asia/Shanghai' TIMEZONE = 'Asia/Shanghai'
tz = pytz.timezone(TIMEZONE) tz = pytz.timezone(TIMEZONE)
...@@ -161,8 +164,20 @@ class EventMergerJob: ...@@ -161,8 +164,20 @@ class EventMergerJob:
self.send_mq_message(body) self.send_mq_message(body)
return body.get('ex', 0) return body.get('ex', 0)
def get_local_events(self, last_check_time, now, camera):
"""
查询sd卡上移动侦测视频
"""
events = api_helper.get_cameras_playback_urls(
camera['device_code'],
IntelabApiHelper.iso_format(last_check_time),
IntelabApiHelper.iso_format(now))
return events
def get_new_events(self, last_check_time, now, camera): def get_new_events(self, last_check_time, now, camera):
""" """
摄像头录制计划为全天录制时
查询指定时间段内摄像头是否有移动告警消息并合并成事件 查询指定时间段内摄像头是否有移动告警消息并合并成事件
""" """
pre_event = PreEvent( pre_event = PreEvent(
...@@ -198,7 +213,7 @@ class EventMergerJob: ...@@ -198,7 +213,7 @@ class EventMergerJob:
event_duration = 0 event_duration = 0
for event in self.get_new_events(last_check_time, now, camera): for event in self.get_local_events(last_check_time, now, camera):
insert_video_info( insert_video_info(
camera['db_table'], camera['device_code'], camera['db_table'], camera['device_code'],
event['start_time'].astimezone(pytz.utc), event['start_time'].astimezone(pytz.utc),
...@@ -225,7 +240,7 @@ class EventMergerJob: ...@@ -225,7 +240,7 @@ class EventMergerJob:
try: try:
camera_event_duration = self.process_camera(pipe, camera) camera_event_duration = self.process_camera(pipe, camera)
total_video_duration += camera_event_duration total_video_duration += camera_event_duration
if camera_event_duration > 0: if camera_event_duration > 10:
camera_count += 1 camera_count += 1
except Exception as e: except Exception as e:
......
...@@ -28,12 +28,31 @@ class IntelabApiHelper: ...@@ -28,12 +28,31 @@ class IntelabApiHelper:
res_json = response.json().get('data') or {} res_json = response.json().get('data') or {}
# TODO 数据为空的异常处理 # 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({ pre_events = res_json.get('list') or []
events = []
if len(pre_events) > 0:
events.append({
'start_time': dateutil.parser.parse(pre_events[0]['beginTime']),
'end_time': dateutil.parser.parse(pre_events[0]['endTime']),
'expired_time': expired_time,
'stream_url': {
'url': res_json.get('url'),
'extra_args': 'playBackMode=1',
'protocol': protocol
}
})
for pre_event in pre_events[1:]:
# 合并时间间隔较短的事件
last_end_time = events[-1]['end_time']
start_time = dateutil.parser.parse(pre_events['beginTime'])
end_time = dateutil.parser.parse(pre_events['endTime'])
if start_time - last_end_time <= timedelta(seconds=2):
events[-1]['end_time'] = end_time
else:
events.append({
'start_time': start_time, 'start_time': start_time,
'end_time': end_time, 'end_time': end_time,
'expired_time': expired_time, 'expired_time': expired_time,
...@@ -42,10 +61,9 @@ class IntelabApiHelper: ...@@ -42,10 +61,9 @@ class IntelabApiHelper:
'extra_args': 'playBackMode=1', 'extra_args': 'playBackMode=1',
'protocol': protocol 'protocol': protocol
} }
}) })
return results return events
if __name__ == '__main__': if __name__ == '__main__':
......
...@@ -23,7 +23,7 @@ requires = [ ...@@ -23,7 +23,7 @@ requires = [
setuptools.setup( setuptools.setup(
name='isc-video-record', name='isc-video-record',
version='1.0.0a16', version='1.0.0a17',
description='ISC motion detection playback video stream recording service.', description='ISC motion detection playback video stream recording service.',
long_description=long_description, long_description=long_description,
long_description_content_type='text/markdown', long_description_content_type='text/markdown',
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论