Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
I
ils-common-video
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
提交
议题看板
打开侧边栏
OpsTeam
ils-common-video
Commits
6098b492
提交
6098b492
authored
4月 22, 2021
作者:
zw.wang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: 新增dyanconf和接口等等
上级
88fa1ba4
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
151 行增加
和
1 行删除
+151
-1
.env
.env
+2
-0
app.py
app.py
+15
-0
client.py
client.py
+24
-0
settings.toml
settings.toml
+7
-0
setup.py
setup.py
+3
-1
test.py
test.py
+100
-0
没有找到文件。
.env
0 → 100644
浏览文件 @
6098b492
DEFAULT_ENV_FOR_DYNACONF=default
MERGE_ENABLED_FOR_DYNACONF=true
app.py
0 → 100644
浏览文件 @
6098b492
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
)
client.py
浏览文件 @
6098b492
...
@@ -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
settings.toml
0 → 100644
浏览文件 @
6098b492
[default.ISC]
HOST
=
''
PORT
=
''
KEY
=
''
SECRET
=
''
setup.py
浏览文件 @
6098b492
...
@@ -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'
,
)
)
test.py
0 → 100644
浏览文件 @
6098b492
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
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论