不知道标题描述得是否准确。社团里布置好了两个海康威视的监控摄像头,但是没有录像相关的设备,想到了之前二百元在闲鱼上淘到的小主机,于是申请买了一块500G的硬盘。
这个闲鱼上买的小主机,买来的时候是打算做软路由的。性能较差,买来的时候预装的事 Windows XP,我用了不到十分钟,就点了关机,换成了 Debian。原先想用海康威视的 SDK 来写这个工具,毕竟能锻炼下自己C++能力,考虑到录像这玩意催的比较紧,就改用Python写了。
不多说,直接上代码:
import os
import subprocess
from datetime import datetime
device_addr_list = {
'Room1': 'rtsp://user:password@10.1.160.248/h265/ch1/main/av_stream',
'Room2': 'rtsp://user:password@10.1.160.249/h265/ch1/main/av_stream'
}
def get_current_time_string(format_string: str):
time_now = datetime.now()
return time_now.strftime(format_string)
def record(device_name: str):
while True:
file_name = get_current_time_string(device_name + '/' + '%Y%m%d-%H%M%S.mp4')
command_string = 'openRTSP -4 -b 10000000 -t -d 3600 -t -f 17 {} > "{}"'.format(device_addr_list[device_name], file_name)
subprocess.call([command_string], shell=True)
record('Room1')
最开始用的是 ffmpeg,但是会转码,CPU直接升到100%,无奈换成了openRTSP。我也就没研究他们的参数了。
还需要一个定时删除录像文件的代码:
import os
import time
record_path = \
{
'Room1': '/home/camera/Room1/',
'Room2': '/home/camera/Room2/'
}
while True:
# 原先使用获取磁盘剩余空间的办法来做
# 但是发现磁盘剩余空间的数据更新不太及时
# stat = os.statvfs('/home')
# if stat is None:
# print('Error occurs while calling os.statvfs()')
# time.sleep(10)
# continue
#
# 如果剩余字节数小于大约20G的磁盘容量
# if stat.f_bavail*stat.f_bsize < 20*1024*1024*1024:
'''
统计所有录像文件的大小
'''
files_Room1 = sorted([record_path['Room1'] + filename for filename in os.listdir(record_path['Room1'])])
files_Room2 = sorted([record_path['Room2'] + filename for filename in os.listdir(record_path['Room2'])])
print('共计{} + {} = {}个录像文件, '.format(
len(files_Room1), len(files_Room2), len(files_Room1)+len(files_Room2)), end='')
# 统计大小
total_size_Room1 = sum([(os.path.getsize(file)/(1024**3)) for file in files_Room1])
total_size_Room2 = sum([(os.path.getsize(file)/(1024**3)) for file in files_Room2])
print('总大小 {} GB'.format(total_size_Room1 + total_size_Room2))
i = 0
if total_size_Room1 + total_size_Room2 > 400:
os.remove(files_Room1[i])
os.remove(files_Room2[i])
time.sleep(1800)
那么,怎么查看录像回放呢?
现在的解决方案是搭建个 Apache,做好访问权限设置和目录浏览,然后在浏览器里看
有空就做一个简单的页面来查看监控录像,并整合实时监控功能。