🔥🔥🔥 👉本专栏限时折扣中,当前只需要99.9元,2025年5月31后恢复原价199.9元,各位需要的同学请抓紧订阅。
💡 需要该IPC库源码的大佬们,可扫码关注文章末尾的微信公众号二维码,或搜索微信公众号“希望睿智”。添加关注后,输入消息“IPC库”,即可免费获得源码的下载链接。
专栏特色
1、所有源码严格遵守统一的编码规范。
2、纯C++接口,接口封装严谨,接口功能丰富,应用层调用简单便捷。
3、近二十年行业经验和技术积累打造的高质量商用级代码,架构清晰合理,便于扩展和维护。
4、绝不空谈概念和原理,实打实地进行源码的展示和要点的讲解。专栏一共16篇,已完结。
5、根据功能模块分章节进行详细介绍,每个章节可独立阅读,让你真正吃透每一个功能模块。
6、通过学习本专栏,你可以深入了解GPIO控制、按键处理、SD卡使用、Flash读写、配置读写、狗监控、有线网络配置、Wifi网络配置、网络管理、媒体存储、声音检测等一系列跨芯片方案的专业知识。
7、通过学习本专栏,你可以深入了解IPC开发领域的各种嵌入式知识和行业领域知识,让你从行业小白晋升为安防监控领域的专业人才。
8、通过学习本专栏,你可以超近距离研究行业大牛的架构设计、逻辑思维、编码风格、封装细节等大量宝贵经验,让你从菜鸟跻身技术专家。
概述
一提起架构设计,很多人会觉得有点“高大上”,普通程序员平时接触不到这些东西。还有些人觉得架构设计是个“伪概念”,“假大空”,没什么实际内容,做好程序员“码代码”的本职工作就够了。实际上,架构设计既不是“镜中花,水中月”,也不是“远在天边,遥不可及”。用好了架构设计,可以为我们的编程提供坚实的“地基”和“骨架”,大大方便了后期的维护和扩展工作。
没有万能的架构设计,架构设计是与使用场景、功能需求和目标息息相关的。架构设计是为了在在某个使用场景下,完成所有的功能需求,更好地达成目标。回到本节内容的主题 —— “跨芯片方案的IPC通用库的架构设计”,主题名中其实已经点明了使用场景,也就是在封装跨芯片方案的IPC通用库时,进行相应的架构设计。那么,功能需求呢?下面我们来好好聊一聊。
功能需求
IPC,英文全称为IP Camera,中文意思为网络摄像机,是一种结合传统摄像机与网络技术所产生的新一代摄像机。IPC一般由镜头、图像传感器、声音传感器、信号处理器、A/D转换器、编码芯片、主控芯片、网络及控制接口等部分组成。IPC按使用场景来划分,可分为室外使用和室内使用。
室外使用时,多采用枪机、球机等形态,并且需要支持防水。室外IPC上一般都有网口,用于插入网线以使用有线网络,或者有sim卡的卡槽,用于插入sim卡以使用移动网络。室外IPC还应支持红外夜视和全彩夜视,红外夜视时,需要打开设备的红外灯;全彩夜视时,则需要打开设备的白光灯。室外IPC支持的智能算法主要有移动侦测、区域入侵等。
室内使用时,多采用云台机(又叫摇头机)、球机等形态,并且需要支持转动。室内IPC上一般都有网口,用于插入网线以使用有线网络,或者有wifi模块,用于配置wifi以使用无线网络。室内IPC只有红外灯,没有白光灯。室内IPC通常还有对讲按键,用于主动发起和停止双向语音对讲。室内IPC支持的智能算法主要有人形检测、人形跟踪、声音检测等。
除了上面介绍的这些差异,室外IPC和室内IPC还有很多共同点:
1、都有Led指示灯,用于指示设备的工作状态。
2、都有扬声器和麦克风,用于播放和采集声音。
3、都有Sensor和编码器,用于采集和编码视频。
4、都有SD卡卡槽,用于插入SD卡以存储录像文件和其他数据。
5、都有复位按键,用于恢复出厂设置。
总结上面这些内容,我们可以很容易得出IPC的功能需求大致如下:
1、音视频的采集和编码,用于后续的存储和传输。
2、控制Led指示灯、白光灯、红外灯。
3、支持按键检测,用于应用层进行按键处理。
4、支持昼夜转换时,进行黑白夜视和全彩夜视的处理。
5、支持SD卡的加载、格式化以及录像文件的读写。
6、可保存应用层的配置信息,支持配置信息的读写。
7、支持有线网络、wifi网络的配置,以及网络的切换和管理。
8、支持双向语音对讲,设备端可发起和停止对讲。
9、支持云台的上下左右转动、前往预置位等各种操作。
10、支持Flash的读写,用于存储配置信息、授权认证信息,以及固件升级。
11、支持狗监控,程序崩溃、系统异常时可自动复位重启。
12、支持移动侦测、人形检测、人形跟踪、声音检测、区域入侵等智能算法。
到这里,功能需求已经比较清楚了,那我们封装跨芯片方案的IPC通用库的目标是什么呢?
目标
封装跨芯片方案的IPC通用库的目标主要包括如下几点:
1、只关注与芯片方案无关的功能点,比如:GPIO控制、按键处理、SD卡使用、Flash读写等。与具体的芯片方案(如:海思、君正、联咏、富瀚微)有关的功能点,比如:视频编解码、音频编解码、ISP等,则无需关注。
2、应用层可以很方便地集成跨芯片方案的IPC通用库进行开发,不需要关心硬件和底层的具体实现。
3、接口统一,底层实现的修改不影响接口本身;接口丰富,可以与中国移动的移动看家SDK、中国电信的天翼看家统一SDK等搭配进行敏捷开发。
4、代码规范,逻辑清晰,封装合理,易于维护,易于扩展。
架构设计
了解了跨芯片方案的IPC通用库的使用场景、功能需求和目标后,接下来,我们便可以开始架构设计了。架构设计时,需要从全局来考虑问题,理清楚哪些因素是变化的,哪些因素是不变的。具体到跨芯片方案的IPC通用库,可以发现,Led指示灯、白光灯、按键、Flash、SD卡、网络等与具体的芯片方案无关,属于不变的因素;视频采集、音频采集、音频播放、智能算法等与具体的芯片方案和芯片型号有关,属于变化的因素。
对于不变的因素,可以将对应的源代码放到公共目录下,比如:可以取名叫Common目录。对于变化的因素,可以将对应的源代码放到芯片方案目录下,比如,君正芯片方案的放到Ingenic目录,海思芯片方案的放到Hisi目录,富瀚微芯片方案的放到Fullhan目录。
通常来说,同一个芯片方案商,不同型号的芯片,SDK提供的API接口并不完全相同,有的可能差异巨大。为了屏蔽不同型号的芯片引入的变化因素,我们可以引入一个统一的接口基类,不同型号的芯片的实现类均从该基类派生。以君正芯片方案举例,我们可以在Ingenic目录下新建T31、T40、T41等目录,用于存放对应芯片的派生类源码、SDK库文件和第三方库文件。
下面是跨芯片方案的IPC通用库的目录结构:
其中,Include目录用于存放需要导出的头文件,Src目录用于存放需要实现的C++文件,Build目录用于存放各个芯片方案和芯片型号的编译脚本。本专栏只会介绍Src/Common目录下与芯片方案无关的功能点的封装,特定芯片方案的功能点的封装,可以关注后续其他专栏。
好了,跨芯片方案的IPC通用库的架构设计就先介绍到这里。接下来,我们需要逐个实现跨芯片方案的IPC通用库的功能接口了。万事开头难,让我们从最简单的Led指示灯的封装开始吧。不用担忧,也不用畏惧,跟着本专栏的章节一起学习,你将收获一个更强大的自己。献出下面这首写于2020年1月的拙诗,与大家共勉。
《临子鼠偶感》
大雪纷纷自天游,潜入万物何时休。
寒冬腊月树抖擞,但闻枝头鸟鸣奏。
百年变局未曾有,万里征程方正筹。
待到春日风清幽,滔滔江水复奔流。