[Python] 一段简单的代码调用 openRTSP 实现 RTSP 流录像工具

不知道标题描述得是否准确。社团里布置好了两个海康威视的监控摄像头,但是没有录像相关的设备,想到了之前二百元在闲鱼上淘到的小主机,于是申请买了一块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,做好访问权限设置和目录浏览,然后在浏览器里看 😄
有空就做一个简单的页面来查看监控录像,并整合实时监控功能。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值