1 | 基础模块 | FsObject系列 | 无 | - 提供线程内的内存池及引用计数实现
- 提供多线程的内存池及引用计数实现
- 提供数组链表和排序方法
- 提供字符串,二进制,结构体链表排序
| 必须 |
---|
2 | 可变栈 | 无 | - 提供一个在栈上动态申请空间的方法
- 申请的空间内存无须释放
- 空间自动调整到实际需要的大小
| 可使用malloc和free替换 |
3 | 通用加解密模块 | 无 | md5、sha、crc、base64、摘要认证、3Bit、4Bit等加密解密功能 | 必须 |
4 | EBML | 无 | - 提供储二进制、整数、小数、字符串的嵌套数据结构
- 提供ebml序列化与反序列化
- 提供加密与解密功能
| 必须 |
5 | xml | EBML | - 提供xml序列化与反序列化
- 提供xml同ebml互转的功能
| 可选 |
6 | json | EBML | - 提供json序列化与反序列化
- 提供xml同ebml互转的功能
| 可选 |
7 | DNS | 无 | - 提供异步的DNS请求功能(解决先系统请求dns卡顿的问题)
| 可选 |
8 | Config | | - 提供储二进制、整数、小数、字符串自描述实现
- 提供模板自描述实现
- 提供二进制、整数、小数、字符串的读取功能
- 提供模板的读取功能
- 提供从ebml、xml、json中导入数据功能
- 提供导出ebml、xml、json数据功能
| 兼容性配置需要 |
9 | 异常处理 | 监控模块 | xml | - 提供线程创建顺序跟踪
- 提供线程资源占用统计
- 提供线程死锁诊断
- 提供实时报表功能
- 提供循环标记功能(不打印,在出问题后显示)
| 可选 |
---|
10 | 崩溃反编译模块 | 监控模块 | - 崩溃自动进入调试模式
- 提供调用堆栈、源代码的行号
- 显示崩溃时的线程信息
- 重要的异常内存或结构落盘
| 可选 |
11 | 模块化日志 | 无 | - 为每个模块提供单独的日志级别控制
- 运行时可修改任意模块的日志级别
- 提供异常关注点设置
| 可选 |
12 | 日志捕捉模块 | 无 | - 捕捉程序的标准输出或错误发送给日志服务器
- 记录日志并管理日志大小
| 可选 |
13 | 日志服务器 | 无 | - 收取与缓存日志数据
- 为监控模块提供一个交互接口
- 过滤模块化日志产生的关注点并写入硬盘
- 检测程序的状态,把崩溃时的日志信息写入硬盘
- 日志实时信息查看
- 日志历史信息查看
| 可选 |
14 | 硬件看门狗 | 无 | - 判断系统是否正常
- 在系统正常时通过驱动重置硬件计时器
- 处理父进程变动异常
| 可选 |
15 | 框架相关 | 多端口汇聚 | 无 | - 对收到的数据进行预判断(遍历7层协议库)把连接交响应的应用处理(如80端口上收到http数据让nginx处理,收到php数据让php-fpm数据,收到sip指令交gb28181模块处理)
- 可同时绑定多个端口,数据由哪个模块处理与端口号无关,只与内容相关
| 必须 |
---|
16 | 配置服务中心 | | - 提供配置注册接口(每个模块只声明自己需要的参数)
- 汇聚所有模块的需求生成配置
- 从硬盘上读取历史配置,导入新配置中并处理兼容性问题
- 响应网络请求,导出xml,json配置发送给客户端或接受客户端的配置数据并写入硬盘
- 在配置发生变化(客户端发送新配置,或模块申请新参数)时,自动处理历史配置与新配置结构的差异,并把处理结果通知所有应用模块(有调用注册接口的模块),让模块同步配置
- 提供别名设置,无论逻辑上数据需要中转多少次,执行始终直接操作最终对象
| 必须 |
17 | 接口管理中心 | 配置服务中心 | - 提供本地接口注册(模块间函数通信的一个实现,允许模块乱续启动)
- 提供本地联接接口,调用后直接连接到具体功能的函数指针
- 提供网络接口注册(多模块共享一个端口的实现)
- 自动判断xml和json,转ebml后提交给各模块处理(注册接口的模块)
- 收集模块的ebml处理结果自动转xml或json回执给客户端
- 帮助模块完成需要等待的事项,比如视频合成后把合成地址回执给客户端
| 必须 |
18 | 掩码通信服务 | 无 | - 本服务为一个多对多的开关量实现
- 允许多个模块同时注册同一个掩码也允许多个模块同时联接同一个掩码,在掩码发生改变时(注册的任何一个模块都可能设置掩码值),本模块计算其是否发生0与非0转换,转换时通知所有联接此掩码的对象
- 本模块的典型应用为按需拉流
| 必须 |
19 | 开方分组 | 无 | - 因本框架面向算法设计,需要对对象进行遍历,而在大型流媒体应用中,如16万个相机只有1个在拉流,也需要遍历16万相机,开方分组是把16万个相机分为400组,每组400个相机,把遍历数由16万降为800
| 可选 |
20 | 视频相关 | h264 | FsObject系列 | - 解析h264解构,实现FsObject系列的派生
- 解码h264
| 可选 |
---|
21 | h264编码 | FsObject系列 | | 可选 |
22 | h265 | FsObject系列 | - 解析h265解构,实现FsObject系列的派生
- 解码h265
| 可选 |
23 | h265编码 | FsObject系列 | | 可选 |
24 | mkv | | - 把h264封装为mkv
- 把h265封装为mkv
- 从mkv读取h264
- 从mkv读取h265
| 可选 |
25 | rtsp拉流模块 | | 使用rtsp协议拉取摄像头的视频流 | 可选 |
26 | rtsp推流接收模块 | rtsp拉流模块 | 使用rtsp协议接收其他平台的rtsp推流,输出与rtsp拉流模块相同 | 可选 |
27 | rtsp流分发模块 | FsObject系列 | 使用rtsp协议分发rtsp直播流 | 可选 |
28 | rtsp推流模块 | | 使用rtsp协议推送视频流到支持推流的rtsp服务器 | 可选 |
29 | rtsp回放模块 | | - 根据rtsp协议异步读取mkv中指定部分
- 响应rtsp的跳转
- 自动适配rtsp的网络速率
| 可选 |
30 | rtsp kcp模块 | 无 | - 实现抢占他人网速收发数据(开启时在网络带宽有限时,会导致他人严重卡顿)
- 可降低网络延时40%
| 可选 |
31 | hls流分发模块 | FsObject系列 | | 可选 |
32 | hls回放模块 | | - 根据hls协议异步读取mkv中指定部分
- 响应hls的跳转
- 自动适配hls的网络速率
| 可选 |
33 | rtmp拉流模块 | | 使用rtmp协议拉取摄像头的视频流 | 可选 |
34 | rtmp推流接收模块 | rtmp拉流模块 | 使用rtmp协议接收其他平台的rtmp推流,输出与rtmp拉流模块相同 | 可选 |
35 | rtmp流分发模块 | FsObject系列 | 使用rtmp协议分发rtmp直播流 | 可选 |
36 | rtmp推流模块 | | 使用rtmp协议推送视频流到支持推流的rtmp服务器 | 可选 |
37 | sip服务器 | FsObject系列 | | 可选 |
38 | gb28181拉流模块 | sip服务器 | - 获取其他服务器的流信息
- 使用tcp或udp拉取其他gb28181平台的直播视频流
- 自适应rtcp协议
| 可选 |
39 | gb28181流分发模块 | sip服务器 | - 响应其他平台的取流请求,按要求使用tcp拉、tcp推、udp推方式分发直播流
- 自动判断对端对rtcp的支持情况
- 对端支持rtcp时应发送rtcp指令
| 可选 |
40 | gb28181回放模块 | gb28181流分发模块 | - 根据gb28181协议异步读取mkv中指定部分
- 响应gb28181的跳转
- 自动适配gb28181的网络速率
- 提供储存查询
| 可选 |
41 | Inflray拉流模块 | FsObject系列 | 拉取Inflray视频流 | 可选 |
42 | 文件点播模块 | mkv | - 实现rtsp的文件点播请求
- 实现hls的文件点播请求
| 可选 |
43 | 相机控制级联 | FsObject系列 | - 实现相机控制的抽象
- 提供所有控制接口的网络控制
- 提供所有控制接口的本地联接控制
- 提供所有控制接口的多机级联控制
- 提供外挂控制接口
- 控制协议转换的桥梁(如onvif转gb28181)
| 可选 |
44 | onvif控制模块 | 相机控制级联 | - 实现相机转动
- 实现相机缩放
- 实现相机预置位
- 实现相机图像参数控制
- 实现相机ptz的获取与调取
| 可选 |
45 | 宇视控制模块 | 相机控制级联 | - 实现相机转动
- 实现相机缩放
- 实现相机预置位
- 实现相机图像参数控制
- 实现相机ptz的获取与调取
| 可选 |
46 | gb28181控制模块 | 相机控制级联 | - 实现相机转动
- 实现相机缩放
- 实现相机转动输出(如onvif进gb28181出)
- 实现相机缩放输出(如onvif进gb28181出)
| 可选 |
47 | gb28181控制模块 | 相机控制级联 | - 实现相机转动
- 实现相机缩放
- 实现相机转动输出(如onvif进gb28181出)
- 实现相机缩放输出(如onvif进gb28181出)
| 可选 |
48 | Inflray控制模块 | 相机控制级联 | Inflray全景相机控制 | 可选 |
49 | dib模块 | FsObject系列 | - 实现FsObject系列的派生
- 图像颜色的变换
- 图像缩放
- 图像旋转
- 图像画线
- 输出bmp图片
- 加载bmp图片
| 可选 |
50 | jpg模块 | dib模块 | - 实现FsObject系列的派生
- 解码为dib
- 压缩dib为jpg
- jpg扩展ebml信息
- 从jpg中读取ebml信息
| 可选 |
51 | 点阵写字模块 | dib模块 | - 从矢量字库中生成点阵字
- 缓存点阵字
- 使用and,or,xor等方式把点阵字叠加到dib上
| 可选 |
52 | 本地拉取模块 | | - 可拉取本地一路流,实现图像拷贝、旋转拉伸、插帧、虚拟通道等业务
- 可同时拉取多路视频,进行拼接、旋转拉伸、插帧等业务
| 可选 |
53 | 本地推送模块 | | - 同时推送一路或多路流到此虚拟通道
- 虚拟通道内可进行全景帧拼接业务
- 虚拟通道内可实现基站切换时虚拟通道动态关联业务
| 可选 |
54 | 相机状态检测模块 | | - 轮巡所有相继
- 以能否取到关键帧为标准判定是否在线
- 缓存关键帧
- 提供网络接口,按需解码为jpg或bmp
| 可选 |
55 | 视频转码模块 | | - 自动选择合适的图像变换路线(如同时有h265和h264时转yuv420P,程序自动调用h264解码实现–因为h264解码开销更低)
- 自动评估cpu性能,在串行与并行间自动切换(比如h264转yuv420P需求中,在cpu性能好时应使用单线程解码,在cpu吃力时应对h264自动进行分组后使用多核处理)
- 在相机多,cpu核心少时每个核心应自动轮换处理各相机需要变换的业务,即允许单核处理多相机的业务
| 可选 |
56 | 视频水印模块 | | - 自动选择合适的图像,按配置写响应的信息,如有ycc而没有yuv420P,应直接在ycc上写字,而不强求yuv420P
| 可选 |
57 | 视频记录模块 | | - 把h264或h265写入mkv
- 缓存最近10 min写入硬盘数据的帧地址
- 提供截取短视频业务
- 维护录像记录信息
- 提供录像信息查询功能
- 自动评估硬盘性能,尽量尽早写入硬盘,在性能不足时自动合并写入数据,用大块写入代替碎片写入
- 监听回放业务需求,在有回放读取时,自动暂停写入业务,在读到足够数据后再写入(优化读取)
| 可选 |
58 | 磁盘管理程序 | FsObject系列 | - 一个基于预测的磁盘管理程序–不需要纪录所有文件名及文件的大小实现删除最早数据的实现(因如有1000万条数据,每条100字节,仅记录就需要1G,同时还有数据记录与硬盘数据是否一致的问题(机器掉电会导致其不一致))
- 统计与学习文件系统的变化规律,找到变化快的和变化慢的目录
- 在变化快的目录中发现新文件,目录大小变大
- 在空间不足时删除变化目录慢目录中的数据
| 可选 |
59 | 代理回放管理模块 | | - 一个第三方储存映射到本地的方案实现
- 定义第三方储存的需要实现的接口
- 处理具体的回放类请求,创建回放任务与管理回放任务
- 实现cdn加速回放
- 可为不支持倒放的第三方储存实现倒放功能
| 可选 |
60 | 代理回放任务模块 | 代理回放管理模块 | - 响应具体的回放任务
- 查找硬盘缓存,有缓存直接使用缓存
- 播放位置无缓存或缓存不足时,调用“代理回放管理模块”的抽象接口获取数据补充缓存
- 支持对齐算法,把缓存同线上获取数据边界对齐,自动拼接视频
| 可选 |
61 | 大华SDK代理回放 | 代理回放管理模块 | - 实现“代理回放管理模块”的抽象接口
- 实现大华sdk回放转rtsp回放
- 实现大华sdk回放转hls回放
- 实现大华sdk回放转gb28181回放
| 可选 |
62 | gb28181代理回放 | 代理回放管理模块 | - 实现“代理回放管理模块”的抽象接口
- 实现gb28181回放转rtsp回放
- 实现gb28181回放转hls回放
- 实现gb28181回放进gb28181回放出
| 可选 |
63 | Ais模块 | Ais模块 | FsObject系列 | - 支持串口连接ais
- 支持串口服务器连接ais
- 支持再分发ais
| 可选 |
---|
64 | DDNS服务器 | DDNS服务器 | FsObject系列 | - 同时支持tcp和udp
- 支持动态dns设置
- 支持多线检测以最新的为准,如域名y通过A线先报告a,后通过报告ip为b,则查询域名y的ip恒为b
| 可选 |
---|
65 | 网络代理 | KVPN服务器 | FsObject系列 | 一个可以使用websocket,http,传输任意数据的代理功能,可在受限网络中打通网络中传输数据(如网络只能使用http,那海康sdk的8000端口的数据则无法传输,使用kvpn后海康sdk的8000端口的数据会以http的方式传输) | 可选 | |
---|
66 | KVPN客户端 | FsObject系列 | 可选 | |
67 | 操作系统 | 定制系统 | 无 | - 基于centos裁剪的一个100M左右的基础系统
- 集成ftp、ssh、git、nginx、opencv及视频应用后约230M
- 系统采用双系统设计,重启后除数据盘外的所有操作都会丢失,保证出现异常时重启肯定可以正常启动
- 可定制启动logo
| 可选 |
---|
68 | 打包工具 | 无 | - 把引导、内核、虚根、驱动、库及应用程序打包为一个升级包
- 升级包采用jpg封装,可定制企业专署封面
- 制作升级包时可输入密码,同时会根据密码生成一个系统标识(操作系统应集成此标识),升级包的标识与系统标识必须一致才能升级
- 系统标识通过hash计算,无法通过hash反推密码,制作升级包时使用的密码应严格保密
| 定制系统的组件 | |
---|
69 | 系统升级服务端 | 无 | - 实现双系统,提供不怕掉电的免维护系统
- 校验系统,选择完整系统启动,在有新版本(校验是完整的)时,切换新版本系统启动
- 与客户端升级工具交付,差分升级系统(只上传有差异部分,把有差异部分写入备份系统后重启校验完成升级)
| |
70 | 授权管理系统 | 无 | - 读取硬件信息生成SN
- 使用激活码校验,判断激活码有效后写响应信息授权系统
| 可选 |
71 | 客户端 | 升级工具 | 无 | - 打开升级包,读取升级包信息
- 提取升级包的系统标识与服务端校验,一致后执行差分升级
- 支持多服务器同时升级
- 多服务器同时升级只占用一份内存,如升级包为200M,同时升级1000台主机,也只占用200M内存
- 支持批量导入主机
| demo,仅提供合作客户 | |
---|
72 | 配置工具 | Config | Config数据结构实现的一个图形demo | |
73 | 调试工具 | 接口管理中心 | - 图形渲染注册到“接口管理中心”的所有接口
- 展示所有接口的参数解释、取值范围
- 测试所有接口的效果
- 动态生成所有接口的c语言调用demo源码
| |
74 | 激活工具 | 无 | | |
75 | 播放库 | | - rtsp直播
- rtsp回放
- 视频拖动
- 视频快放
- 视频慢放
- 视频单帧
- 视频倒放
- 视频快速倒放
- 视频单帧倒放
| 可选 |