说明:
会话连接诊断,用于远端设备诊断与指定现场设备会话连接的情况。当与现场设备会话连接出现问题时,可通过该功能定位会话链路问题。
诊断流程
注意:
诊断前,需要先对目标设备发起会话连接,然后再对目标设备进行诊断,最后从诊断回调接口中获取诊断报告。诊断时间约为10秒。
步骤1:发起设备会话连接
调用远端设备 SDK 的 connect 接口,对指定现场设备视频进行会话连接。
/** @name : TRRO_connect* @brief : 发起视频连接,可多次调用连接不同流,异步模式,根据 onState 状态回调确认视频连接成功* @input : gwid 目标连接的现场设备 ID* record_config:* 优先使用录制配置,当默认录制配置命名规则无法满足需求时使用,json 字符串,需要对每一路进行配置 eg:"{\\"file_names\\": [{\\"file\\":\\"test\\", \\"duration\\":15}, {\\"file\\":\\"test01\\", \\"duration\\":15}]}" ps:file 文件名 duration 分片时长单位秒* streams_num 要拉取现场设备视频流的个数, 与conn_fds和streams_num数组长度匹配, 值的范围 1 到 现场设备支持的device_streams数量* streams_id 现场设备视频流的 ID 数组, 现场设备视频流 ID 从0开始, 最大值为现场设备支持的 device_streams数量 -1* conn_fds conn_fd数组,conn_fd为接收视频流的句柄标识,自行编号,取值从0开始,最大值为 max_streams -1,max_streams在远端设备配置文件配置* @return : 成功 1 失败 <= 0*/int TRRO_connect(const char* gwid, const char* record_config, int streams_num, int* streams_id, int* conn_fds);
步骤2:注册诊断回调接口
/** 回调注册函数* context 上下文指针,回调时会返回注册时传入的该指针,* callback 注册的回调函数,回调函数实现中请勿在回调线程长时间阻塞,若需要长时间处理建议转移到其他线程处理*/extern "C" TRRO_EXPORT void TRRO_registerOnDiagReport(void* context, TRRO_OnDiagReport * callback);
回调函数
/** #name : TRRO_OnDiagReport* @brief : 诊断信息回调* @input : context 回调上下文指针, 返回注册回调函数时传入的 context* gwid 发起诊断的目标现场设备 ID* type 1 成功 , < 0 相关错误信息* json 回调诊断详细信息 json 格式* @return : void*/typedef void STD_CALL TRRO_OnDiagReport(void* context, const char* gwid, int type, const char* json);
步骤3:对设备会话进行诊断
调用 TRRO_connect 接口后,保持视频会话连接,通过调用诊断接口,等待从诊断回调函数中获取诊断报告。诊断时间为10秒左右。
/** @name : TRRO_DiagRequest* @brief : 需要主动出发,诊断网关、控制端当前状态输出报告* @input : gwid 目标设备 ID* @return : 成功1 失败 <= 0*/extern "C" TRRO_EXPORT int TRRO_diagRequest(const char* gwid);
参数 | 含义 |
gwid | 目标现场设备 ID |
诊断说明
诊断输出报告为 json 格式字符串,包含现场设备和远端设备的 mqtt 服务状态、信令服务连接状态和媒体服务连接状态以及媒体链路状态等信息。
JSON 字段 | 含义 | 正常值 | 异常值可能原因 |
remote_mqtt_connect | 远端设备 mqtt 状态 | ok | 与 mqtt 服务网络或端口不通 同名设备登录被阻塞 |
diag_error | 诊断错误状态 | ok | 现场设备 mqtt 服务连接异常 远端设备 mqtt 服务连接异常 |
device_id | 现场设备 ID | — | — |
remote_mode | 远端设备模式 | 与现场设备模式相同 | 现场设备与远端设备配置模式不一致 |
result | 诊断详情 | JSON 数组,按视频流号排列 | 诊断失败,无法获取详情 |
result / stream_id | 现场设备视频流 ID | — | — |
result / conn_fd | 远端设备接收句柄 ID | — | — |
result / field | 现场设备详情 | JSON 字符串 | 获取现场设备诊断信息失败 |
result / field / signal_connect | 现场设备信令连接 | ok | 与信令服务网络或端口不通 |
result / field / media_connect | 现场设备媒体连接 | ok | 媒体服务网络或端口不通 现场设备未推流 |
result / field / video_capture | 现场设备视频采集 | ok | 相机采集异常 没有输入视频数据 使用外部编码流输入 |
result / field / video_encode | 现场设备视频解码 | ok | 编码失败 编码器没有输入视频数据 |
result / field / video_transfer | 现场设备视频发送 | ok | 没有进行推流 媒体服务或信令服务连接出错 |
result / field / lost | 现场设备视频发送丢包 | <1 | 现场设备网络发送有丢包 |
result / field / fps | 现场设备视频发送帧率 | 与配置帧率相近 | 网络受限导致降帧 cpu 或编码器处理能力不足 相机或输入帧率不足 |
result / field / bps | 现场设备视频发送码率 | 与配置码率范围相近 | 网络受限导致发送码率不足 编码器没有输出或输出码率不足 |
result / field / rtt | 现场设备网络延迟 | <100ms | 现场设备网络延迟过大 |
result / remote | 远端设备详情 | JSON字符串 | — |
result / remote / signal_connect | 远端设备信令连接 | ok | 与信令服务网络或端口不通 |
result / remote / media_connect | 远端设备媒体连接 | ok | 媒体服务网络或端口不通 现场设备未推流 |
result / remote / video_transfer | 远端设备视频接收 | ok | 现场设备没有推流数据 |
result / remote / video_decode | 远端设备视频解码 | ok | 没有解码数据 解码失败 |
result / remote / latency | 远端设备视频延迟 | 30 - 150 | 视频延迟异常 |
result / remote / lost | 远端设备视频接收丢包 | <1 | 远端设备视频网络接收有丢包 |
result / remote / fps | 远端设备视频接收帧率 | 与现场设备配置帧率相近 | 网络受限导致接收帧率不足 现场设备实际发送帧率不足 |
result / remote / bps | 远端设备视频接收码率 | 与现场设备发送码率相近 | 网络受限导致接收码率不足 |
result / remote / rtt | 远端设备网络延迟 | <100ms | 远端设备网络延迟过大 |