@startuml
autoactivate on
title 林场项目

skinparam responseMessageBelowArrow true
机场 ->  机场 : 预置飞行航线、预置无人机等操作
林场项目-> 林场项目: 登录

林场项目 -> 机场 : 机场列表
机场 -->  林场项目 :机场列表（1、每个机场里面有一个无人机，2、每个机场有一个机场内视频和机场位置,3、机场的天气信息）

林场项目 -> 机场 : 任务列表
机场 --> 林场项目 : 任务列表（1、飞行里程，2、航线，3、无人机直播流地址（需要在后面获取），4、无人机执行时间）

DSP -> 林场项目: 调用林场回调地址
林场项目 --> DSP: 1、视频分析结束\n2、分析已经关闭

林场项目-> 机场 : 发送飞行命令

机场-> 通道服务 : 请求获取空闲通道
通道服务 --> 机场 : 返回空闲的通道

机场 --> 林场项目  : 返回推流的地址
机场 -> 机场 : 执行飞行任务，机场给刚才申请的通道推流


林场项目-> DSP: 携带通道给DSP，需要DSP基于已携带的通道进行拉流操作
DSP --> 林场项目: 返回分析后的AI推流地址，并返回任务状态以及问题图片


机场 -> 林场项目  : 更新任务状态（任务状态更新为：任务飞行中）
林场项目 --> 机场  : 任务状态更新成功\n1、判断当前状态是否出错\n2、判断任务是否已经完成

机场-> 林场项目 : 坐标信息实时发送
林场项目 -> 机场  : 接受坐标信息并存库

林场项目 -> 林场项目  : 点击查看直播页面，返回当前任务的拉流地址以及AI分析后的视频地址
林场项目 -> 林场项目  : 点击查看轨迹功能，查询当前无人的轨迹页面（可以做成定时的请求，比如一秒一次）

机场-> 林场项目 : 飞行任务已经完成飞机已经回仓（机场发送任务状态给林场系统：飞行任务完成）
林场项目 -> 林场项目 : 场景1：实时版本直接发送请求到DSP \n场景2：离线版本先判断AI分析视屏的状态是否已经结束\n（任务状态更新为：任务已结束）
林场项目 -> 林场项目 : 生成报告接口可点击
林场项目 -> DSP : 关闭AI分析视频，确定任务已经结束
DSP-> 通道服务: 给AI发送消息，提醒需要关闭分析

AI --> DSP : 分析已经关闭

DSP -> 通道服务 : 关闭AI分析的通道服务，状态重置为已释放
通道服务 --> DSP : 状态释放成功

DSP--> 通道服务 : 分析已经关闭
@enduml