其实这个项目结束一两个月了 中间过了个年 就把这事给忘记了
趁现在比较空记录一下
说下概况 项目是基于RK1126平台 硬件配置2个摄像头一个广角一个长焦
需要支持画中画在广角摄像头的画面中 显示长焦摄像头的大概位置
但是由于硬件还是驱动没有搞好 导致了两个摄像头不能同时工作,所以 对于应用程序就用同一个摄像头模拟两个摄像头来实现画中画
主要的功能如下
- 1.支持三路RTSP流 主摄像头高清码流 普通码流 副摄像头码流
- 2.支持视频参数的设置 H264/H265 分辨率 码率 CBR/VBR 等
- 3.支持设置ISP 包括 明度亮度饱和度等
- 4.支持设置摄像头的OSD 多个OSD 多个位置 OSD支持矢量字体替换
- 5.支持实时AI识别 支持多模型的AI 同时支持AI模型文件更新功能 支持设置AI识别帧数间隔并将 结果反馈给平台端
- 6.支持上传JPG图片进行AI识别 同时将识别结果 反馈给平台端
- 7.支持AI模型类别 以及阈值的配置
- 8.支持拍照/录像
- 9.支持文件下载功能,将之前拍下的照片或者录像的文件 发送给平台
- 10.云台控制(硬件未配置 暂未实现)
- 11.使用json格式配置文件对程序进行配置
- 12.支持画中画 并支持实时开启或者关闭
- 13.将平台相关的代码进行分离 实现代码解耦
由于本身没有屏幕
所以所有的操作都通过平台HTTP 方式和平台侧通信
由于手头现在没有设备 放下之前的画面 手一直在动 VBR 比较模糊 画中画功能如下:
看下程序入口
主函数都在上面了 其实没有去整理 将启动部分 和 结束部分的资源清理 放在两个独立的函数里面看会更清晰 但是现在没有硬件板子 调试 就不动他了
启动之后 创建一个程序的结构体 做些初始化工作包括 读取配置文件 视频参数默认值 rtsp的URL路径等等
然后检查AI模型文件的有效性
创建程序主任务队列 以及其他用于 AI识别结果的队列 录像时候的视频流队列等等
然后开启了几个线程 与平台通信的HTTP线程 主任务线程 以及用于将AI结果发给平台的Socket线程
然后去开启camera 然后一个while循环
while循环中 有个 去检查flash剩余空间的函数 如果 不满足多少 就要去删除比较早的录制的视频和照片
后面就是程序结束时候的资源回收
程序和平台交互主要是通过HTTP方式 等待平台下发消息给程序
包括下载文件 上传文件 一起其他录像 设置ISP等消息 其中又包含GET POST两种方式
收到HTTP请求之后程序会将消息做转发 并放到 程序的主任务队列里面
比如下面 画中画开关的消息
然后在主任务队列中取出消息做实际的处理
至于相机部分的配置 AI的识别等等 平台相关的功能 抽象出来放在另一个 类中实现
如下
至于后面的则都是 处理的细节部分了
有业务需求的 可以联系博主