AI-NVR 移动应用内部结构#

设备访问#

该移动应用有两个启动入口点。一个用于直接访问 AI-NVR 设备,设备访问将基于 <device ip>:端口,而不是通过云端点。第二个入口点用于通过云远程访问设备。此版本不支持通过云远程访问设备。

../_images/device_access_flow.png

用户登录#

在使用基于云的访问启动应用时,应用做的第一件事是检查是否已登录用户并持有有效令牌。如果是首次启动或令牌过期的情况,将启动如下所述的登录流程。

../_images/user_login_flow.png

授权#

../_images/user_authorization.png

与 AI-NVR 设备的通信#

该应用使用 MVVM 模式。

每个请求都从 UI 类(通常是片段或对话框)发起,同时配置一个 Observer 来接收来自 ViewModel 的响应并处理它。

对 API 的调用通过相应模块的 ViewModel 路由到模块仓库,并使用 Retrofit 执行请求。响应被传递回 ViewModel,ViewModel 使用 LiveData 调用 UI 更新并在 Observer 上触发事件。

视频存储工具包 (VST)#

VST API 负责连接的摄像头、流管理和操作。请参阅以下列表中应用中使用的 VST API。

传感器

  • GET sensor/list:获取传感器/摄像头列表,包含一些详细信息

  • GET sensor/streams:获取传感器流信息列表

  • POST replay/stream/seek:快进 (+10 秒)、快退 (-10 秒)、倒带和快进

  • POST replay/stream/pause:暂停录制流播放

  • POST replay/stream/resume:恢复录制流播放

  • POST replay/stream/stop:停止 WebRTC 流媒体

  • POST replay/stream/swap:将流类型从直播切换到录制

  • POST replay/stream/start:开始 WebRTC 流媒体

  • GET replay/stream/status:获取流错误状态和播放状态,如 PLAYING、PAUSED、NOT PLAYING

  • GET replay/stream/stats:获取流统计信息,如帧率、总编码和解码帧数

  • GET replay/stream/query:获取流上次播放时间戳和相关元数据(如果可用)

以下流程演示了获取已连接摄像头的过程。

../_images/fetch_camera_list.png

从列表中播放/暂停摄像头由 CameraStackAdapter 类中的 setClickListenerState() 触发,该类覆盖了 onRequestStreamState 接口,并最终调用 CameraStackViewModel 类中的一个函数。每个更改 WebRTC 播放器状态(播放/暂停/停止)的媒体播放器请求都从 UI 类(通常是片段或对话框) -> ViewModel -> RtcClient -> Service 类 -> 使用 Retrofit 执行请求的模块 发起。以下流程演示了从 CameraStackAdapter 播放其中一个流。

../_images/play_camera_stream.png

eMDAT API#

eMDAT API 负责管理 gems - FOV(视野)、绊线和 ROI(感兴趣区域)。它还负责从 gem 数据中检索分析数据。请参阅以下列表中应用中使用的 eMDAT API 函数。

FOV (视野)

  • GET metrics/occupancy/fov/histogram:列出摄像头视野内的人数

绊线

  • GET metrics/tripwire/histogram:列出绊线事件计数和警报

  • GET config/tripwire:列出所有绊线配置

  • POST config/tripwire:创建绊线

  • DELETE config/tripwire:删除绊线

  • GET config/tripwire/history:列出历史绊线配置

  • GET config/rule/alerts/tripwire:列出绊线警报规则

  • POST config/rule/alerts/tripwire:创建绊线警报规则

  • DELETE config/rule/alerts/tripwire:删除绊线警报规则

  • GET config/rule/alerts/tripwire/history:列出历史绊线警报规则

ROI (感兴趣区域)

  • GET metrics/occupancy/roi/histogram:列出 ROI 计数和警报

  • GET config/roi:列出所有 ROI 配置

  • POST config/roi:创建 ROI

  • DELETE config/roi:删除 ROI

  • GET config/roi/history:列出历史 ROI 配置

  • GET config/rule/alerts/roi:列出 ROI 警报规则

  • POST config/rule/alerts/roi:创建 ROI 警报规则

  • DELETE config/rule/alerts/roi:删除 ROI 警报规则

  • GET config/rule/alerts/roi/history:列出历史 ROI 警报规则

警报

  • GET alerts:列出所有警报

以下图表演示了选择绊线和获取占用数据的简化流程。

../_images/fetch_gems.png

启用/禁用实时警报#

参考云上的这些 API 负责为 Jetson 移动应用云连接启用和禁用实时警报。

  • POST api/enable-notification:启用实时警报。

  • POST api/disable-notification:禁用实时警报。

以下图表演示了为直接设备和基于云的访问启用/禁用和接收实时警报的简化流程。

../_images/alert_notification.png