Skip to content

AKStream的组成部分与运作原理

chatop2020 edited this page Jan 6, 2021 · 15 revisions

AKStream的组成(根据代码结构)

  • AKStreamWeb
  • AKStreamKeeper
  • LibCommon
  • LibGB28181SipServer
  • LibLogger
  • LibSystemInfo
  • LibZLMediaKitMediaServer
  • SIPSorcery

AKStreamWeb

  • AKStreamWeb是AKStream的总控制中心,是全局的流媒体管理API服务,包含了所有流媒体功能的控制,如摄像头注册,录制计划,rtp推流,ptz控制等。
  • AKStreamWeb在一个集群中只运行一份,负责收集来源于AKStreamKeeper的流媒体服务信息,并进行流媒体服务的管理
  • 集成Sip网关相关功能,向GB28181设备提供如注册、目录获取、推流请求、历史录像查询、PTZ控制等功能
  • 集成操作系统性能信息收集功能,提供如CPU,内存,磁盘等相关情况
  • 集成数据库操作功能,对系统运行过程中所产生的数据进行数据库持久化保存
  • 集成ZLMediaKit的集群控制功能,统一管理、调度各ZLMediaKit流媒体服务器
  • 集成非GB28181设备的拉流功能,实现除GB28181 Rtp流以外的其他流类型的拉取与转换
  • 集成Swagger调试环境,提供Web形式的接口调试功能
  • 集成WebApi,提供第三方应用的全功能接入
  • AKStreamWeb引用包含了LibCommon、LibLogger、LibSystemInfo、LibGB28181SipServer、LibZLMediaKitMediaServer、SIPSorcery六个内部类库

AKStreamKeeper

  • AKStreamKeeper是ZLMediaKit的治理程序,它用于流媒体服务器(ZLMediaKit)的相关控制,如控制流媒体服务器的启动,停止,重启,获取某个录制文件是否存在,裁剪与合并任务的执行等。
  • 此服务针对于流媒体服务器进行部署,每一个流媒体服务(ZLMediaKit)都需要部署一个对应的AKStreamKeeper,此服务与AKStreamWeb通过WebApi进行通讯。
  • AKStreamKeeper启动时,将自己的状态以心跳的方式汇报给AKStreamWeb,并帮助AKStreamWeb服务控制流媒体服务器(ZLMediaKit).
  • AKStreamKeeper引用包含了LibCommon、LibLogger、LibSystemInfo三个内部类库

LibCommon

  • LibCommon以.net类库形式存在的内部类库
  • LibCommon主要提供的是系统中用到的各种枚举、结构、通用工具方法、数据库中间件等功能

LibGB28181SipServer

  • LibGB28181SipServer以.net类库形式存在的内部类库
  • 它是一个完整的GB28181 Sip信令网关,是一个自治理的全功能类库,关于GB28181 Sip信令服务的所有功能都在此类库中集成
  • 提供设备注册、设备注销、设备目录获取、设备状态获取、设备信息获取、设备推流请求、设备终止流请求、设备历史录制文件列表获取、设备历史录制文件推流、设备历史文件终止推流请求等Sip信令通讯功能
  • 提供GB28181设备及其音视频通道的管理,向外提供各种事件的触发,如有设备注册事件、有设备注销事件、有设备就绪事件、有设备心跳事件等等

LibLogger

  • LibLogger是基于log4net的日志记录框架

LibSystemInfo

  • 全平台的操作系统性能参数获取类库
  • 可惜的是Windows平台下网络流量获取功能因.net core3.1的bug无法完美兼容支持,因此原因AKStream暂时无法正常在Windows操作系统上运行

LibZLMediaKitMediaServer

  • 管理流媒体服务器的类
  • 集成提供流媒体服务器(ZLMediaKit)所有WebApi调用功能
  • 集成提供AKStreamKeeper所有WebApi调用功能

SIPSorcery

  • Sip信令协议栈

第三方库的引用

  • FreeSql,数据库连接、操作所用的库,几乎支持所有关系型数据库
  • Newtonsoft.Json,AKStream所有Json序列化与反序列化工作由此库完成
  • ini-parser-netstandard,用于解析ini文件,主要用于读取和修改ZLMediaKit的config文件
  • Swagger,用于提供WebApi接口的Web可视化调试

Clone this wiki locally