不知道标题描述得是否准确。社团里布置好了两个海康威视的监控摄像头,但是没有录像相关的设备,想到了之前二百元在闲鱼上淘到的小主机,于是申请买了一块500G的硬盘。

这个闲鱼上买的小主机,买来的时候是打算做软路由的。性能较差,买来的时候预装的事 Windows XP,我用了不到十分钟,就点了关机,换成了 Debian。原先想用海康威视的 SDK 来写这个工具,毕竟能锻炼下自己C++能力,考虑到录像这玩意催的比较紧,就改用Python写了。

不多说,直接上代码:

import os
import subprocess
from datetime import datetimedevice_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 timerecord_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 = 0if total_size_Room1 + total_size_Room2 > 400:os.remove(files_Room1[i])os.remove(files_Room2[i])time.sleep(1800)

那么,怎么查看录像回放呢?
现在的解决方案是搭建个 Apache,做好访问权限设置和目录浏览,然后在浏览器里看

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

  1. vba 编辑combobox内容_初识Visual Basic编辑器并建立一段简单的代码

    大家好,从今日开始我正式推出"VBA之EXCEL应用"教程,这个教程是面向初学人员的教程,教程一共三册,十七个章节,从简单的录制宏实现一直讲到窗体的搭建,都是我们在利用EXCEL工 ...

  2. 一段简单的代码,解决了数据乱码的问题。?characterEncoding=utf8

    这一段简单的代码解决了读取数据库产生的数据乱码的问题,从数据库读数据和写数据时MySQL的默认编码非UTF8编码,需要设置字符集编码为utf8.如: ?characterEncoding=utf8

  3. 程序员:用一段简单的代码讲述一个悲伤的故事

    程序员的悲伤故事难道不应该是: 别人的老板晚上带他出去耍,你的老板半夜催你改代码: 别的程序员工资高.待遇好,而你只是血压高.心态好-- 擦干眼泪告诉自己:程序员前半生的悲伤都不是事儿,因为后半生你就 ...

  4. python菜鸟教程h-python菜鸟教程,python好玩又简单的代码

    如果是零基础的话推荐你看以下几本书,入门来说都还不错:"笨办法"学Python(第3版)HeadFirstPython(中文版)父与子的编程之旅:与小卡特一起学Python pyt ...

  5. python有趣的代码-python菜鸟教程,python好玩又简单的代码

    如果是零基础的话推荐你看以下几本书,入门来说都还不错:"笨办法"学Python(第3版)HeadFirstPython(中文版)父与子的编程之旅:与小卡特一起学Python pyt ...

  6. Python贪吃蛇简单的代码

    在自学Python的过程中在网上查询资料时发现了一些好玩的东西,python的游戏库模块,它可以自己弄一个小游戏来玩玩,然后我在网上找了一些游戏的代码,,自己改了一些,弄出了一个简单贪吃蛇,代码也是照 ...

  7. 请用一段简单的代码讲述一个悲伤的故事

    擦干眼泪告诉自己:程序员前半生的悲伤都不是事儿,因为.... 后半生你就慢慢习惯了. 1.刚开始学编程的时候,课堂上老师说的话必须尊为圣旨,老师说"写好注释是一个好的工作习惯",所 ...

  8. 通过一段简单的代码,介绍 ABAP 的预定义类型 c

    下面这段代码,稍稍有些编程基础的朋友想必都能够理解: 定义了两个 ABAP 变量,名称分别为 lv_c1 和 lv_c2, 类型为 c,c 是 ABAP 的预定义数据类型(predefined dat ...

  9. 一段简单的代码告诉你什么叫内存溢出

    #include <stdio.h>int FooArray[4] = {1, 1, 1, 1}; int VeryImportantValue = 7;void main() {prin ...

最新文章

  1. 机器学习:数据驱动的科学
  2. 第三周项目4(2)-顺序表应用 将所有奇数移到所有偶数前面
  3. Vue3 高级语法(一)—— h函数、jsx
  4. hive复合数据类型之map
  5. android放微信@功能,Android仿微信语音消息的录制和播放功能
  6. 负载均衡获取客户端IP
  7. Windows server 2019的系统激活码 激活windows server 2012r2系统
  8. 【C补充】指向指针或函数的指针
  9. 一文读懂运放偏置电流和输入失调电流
  10. T检验、卡方检验以及p-value
  11. 国家职业资格:计算机网络管理员
  12. 南京银行之八,风险提示
  13. SAP销售发票会计凭证汇率跟随客户汇率类型
  14. GYM 101350 I. Mirrored String II
  15. 【论文】 Skeletonization of Ribbon-Like Shapes Based on Regularity and Singularity Analyses
  16. java的意思和含义,2022年最新
  17. acwing 4269.校庆(map)
  18. 对于CNN的文献阅读和识别手写数字的复现
  19. Java实现伪造邮件发信人
  20. IDEA HTTP Client (秒懂)

热门文章

  1. [项目管理]-第五章:过程数据库和过程能力基线
  2. 你认为,世界上最无聊的工作是什么?
  3. day17-Z字形变换
  4. 分享一款自带工作流引擎的NodeJS全栈框架,接单快手、创业神器
  5. 程序员:我们为什么要熬夜
  6. 代付和分账的区别在哪?
  7. 【Kruskal】Agri-Net 最短网络
  8. 单菌二三代数据组装神器-Unicycler
  9. Gutenberg(古腾堡): WordPress全新核心编辑器插件
  10. CDMAIS95A/B与cdma20001X对比分析(转)