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

feat: 新增dyanconf和接口等等

上级 88fa1ba4
DEFAULT_ENV_FOR_DYNACONF=default
MERGE_ENABLED_FOR_DYNACONF=true
from flask import Flask, jsonify, request
app = Flask('eventRcv')
@app.route('/event/rcv')
def event_rcv():
print(request.json())
return jsonify({
'code': 200
})
app.run(host='0.0.0.0', port=5001)
...@@ -135,3 +135,27 @@ class HikVisionClient(object): ...@@ -135,3 +135,27 @@ class HikVisionClient(object):
}) })
return results return results
def event_subscription(self, callback):
""" 事件订阅接口
:param callback: 指定事件接收的地址,采用restful回调模式,支持http和https
"""
uri = '/artemis/api/eventService/v1/eventSubscriptionByEventTypes'
body = {
'eventTypes': [131331], # 移动侦测
'eventDest': callback
}
res = self._request(uri, body)
return res
def event_unsubscription(self):
""" 指定事件类型取消订阅
"""
uri = '/artemis/api/eventService/v1/eventUnSubscriptionByEventTypes'
body = {
'eventTypes': [131331]
}
res = self._request(uri, body)
return res
[default.ISC]
HOST = ''
PORT = ''
KEY = ''
SECRET = ''
...@@ -22,7 +22,9 @@ setuptools.setup( ...@@ -22,7 +22,9 @@ setuptools.setup(
'requests', 'requests',
'python-dateutil', 'python-dateutil',
'pytz', 'pytz',
'intelab-python-sdk' 'intelab-python-sdk',
'flask',
'dynaconf'
], ],
python_requires='>=3.6', python_requires='>=3.6',
) )
import os
import shutil
import pytz
from datetime import datetime, timedelta
from intelab_python_sdk.logger import log_init, log
from dynaconf import settings
from client import HikVisionClient
from record import record_thread, get_video_duration, time_to_seconds
tz = pytz.timezone('Asia/Shanghai')
log_init(__name__, True, './log')
video_path = '/data/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'))
event_start_time = datetime(2021, 4, 16, 13, 30)
event_end_time = datetime(2021, 4, 16, 14, 10)
# playback_urls = client.get_cameras_playback_urls(
# 'c440c77c2a344799bd92948dc67ba805',
# HikVisionClient.iso_format(event_start_time),
# HikVisionClient.iso_format(event_end_time),
# )
# print(playback_urls)
# print(client.get_camera_preview_url('c440c77c2a344799bd92948dc67ba805', protocol='hls'))
for camera in client.get_cameras():
print(camera)
url = client.get_camera_preview_url(camera['cameraIndexCode'], protocol='rtmp')
print('摄像头{}的直播地址为{}'.format(camera['cameraIndexCode'], url.get('url')))
#
# playback_urls = client.get_cameras_playback_urls(
# camera['cameraIndexCode'],
# '2021-04-15T16:30:00.000+08:00', '2021-04-14T17:30:00.000+08:00'
# # HikVisionClient.iso_format(event_start_time),
# # HikVisionClient.iso_format(event_end_time),
# )
# print(playback_urls)
def main():
playback_urls = client.get_cameras_playback_urls(
'282f614f6a4b403f8a0083126ee9b6c1',
HikVisionClient.iso_format(event_start_time),
HikVisionClient.iso_format(event_end_time)
)
for playback_stream in playback_urls:
log.info(playback_stream)
start_time = playback_stream['start_time']
print(start_time, event_start_time.astimezone(tz))
if start_time < event_start_time.astimezone(tz):
start_time = event_start_time.astimezone(tz)
end_time = playback_stream['end_time']
part_num = 1
while True:
complete_duration = (end_time - start_time).total_seconds()
file_info, _ = stream_record(playback_stream['stream_url'], start_time, end_time)
file_duration = time_to_seconds(file_info['duration'])
print(complete_duration, file_duration, file_info)
if not os.path.isfile(file_info['file_name']):
continue
if file_duration < complete_duration - 1:
# 视频文件时长小于完整时长
new_start_time = start_time + timedelta(seconds=file_duration)
part_file_name = 'rtmp_{}_{}_{}.mp4'.format(start_time.strftime('%Y%m%dT%H%M%S'),
new_start_time.strftime('%Y%m%dT%H%M%S'),
part_num)
shutil.move(file_info['file_name'], part_file_name)
start_time = new_start_time
part_num += 1
else:
break
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 = 'rtmp_{}_{}.mp4'.format(start_time, end_time)
record_thread(stream_url, file_name)
return get_video_duration(file_name)
# if __name__ == '__main__':
# main()
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论