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

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

上级 494adbbd
......@@ -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.utils.excel_utils import gen_excel
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'
tz = pytz.timezone(TIMEZONE)
......@@ -161,8 +164,20 @@ class EventMergerJob:
self.send_mq_message(body)
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):
"""
摄像头录制计划为全天录制时
查询指定时间段内摄像头是否有移动告警消息并合并成事件
"""
pre_event = PreEvent(
......@@ -198,7 +213,7 @@ class EventMergerJob:
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(
camera['db_table'], camera['device_code'],
event['start_time'].astimezone(pytz.utc),
......@@ -225,7 +240,7 @@ class EventMergerJob:
try:
camera_event_duration = self.process_camera(pipe, camera)
total_video_duration += camera_event_duration
if camera_event_duration > 0:
if camera_event_duration > 10:
camera_count += 1
except Exception as e:
......
......@@ -28,24 +28,42 @@ class IntelabApiHelper:
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,
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
}
})
return results
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,
'end_time': end_time,
'expired_time': expired_time,
'stream_url': {
'url': res_json.get('url'),
'extra_args': 'playBackMode=1',
'protocol': protocol
}
})
return events
if __name__ == '__main__':
......
......@@ -23,7 +23,7 @@ requires = [
setuptools.setup(
name='isc-video-record',
version='1.0.0a16',
version='1.0.0a17',
description='ISC motion detection playback video stream recording service.',
long_description=long_description,
long_description_content_type='text/markdown',
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论