Tange Cloud for Device
 Rev.366
载入中...
搜索中...
未找到
TgCloudConst.h
浏览该文件的文档.
1/**
2 * @file TgCloudConst.h
3 * @brief 探鸽云SDK常数定义
4 */
5
6#ifndef __TgCloudConst_h__
7#define __TgCloudConst_h__
8
9#include "ec_const.h"
10
11/** @addtogroup api_const
12 * @{*/
13
14/** status_code TciCB::on_status()回调状态码 */
15typedef enum {
16 STATUS_LOGON = 1, ///< 设备上线. data: NULL.
17 STATUS_LOGOFF = 2, ///< 设备下线. data: NULL.
18 STATUS_DELETED = 3, ///< 设备被删除. data: NULL.
19 STATUS_UPDATE_SERVICE = 4, ///< 更新云服务. data: TCISERVICEINFO *; len: sizeof(TCISERVICEINFO)
20 STATUS_AP_CONNECT = 5, ///< 用户通过ap直连. data:NULL
21 STATUS_STREAMING = 6, ///< 用户打开实时视频. data: int(number of clients); len:0
22 STATUS_START_TELNETD = 7, ///< 请求开启telnetd服务(用于调试). data:NULL
23 STATUS_SDER = 8, ///< 服务器定义事件上传(server defined event record). data: @ref SDER. Return: 0(ok), -1(错误, 无文件等)
24 /** 设备休眠查询.
25 \param data: NULL
26 \param len:
27 - \c >0: 设备可以进入休眠时,应用在此回调里做清理动作,并与唤醒服务器建立。当这些动作完成后,再返回0
28 - \c ==0: sdk已经下线,设备要立即下电
29
30 \return 本状态当 \c len!=0 时, 要求应用返回一个值:
31 - 返回值大于0时,sdk会在返回值(秒)后再次查询.
32 - 返回值<0时,sdk不会再触发本查询
33 - 返回值=0时,sdk执行内部的清理过程。清理完成后会以 `len=0` 再触发一次本事件. 此时设备应给主控下电, 系统进入休眠状态
34 */
36 STATUS_AI = 10, ///< 服务器端AI检测到正的结果. data: struct AiResult *
37 STATUS_SWD_TIMEOUT = 11, ///< soft watchdog timeout. data: name
38 //STATUS_ERROR_SERVICE 10 ///< 服务器或外部网络错
39 STATUS_USER_DATA = 12, ///< 用户数据. data: @ref TgUserData *; len: TgUserData结构长度
40
41 /** 呼入状态通知.
42 *
43 * - \c data != NULL, \c len > 0: \n
44 * 有用户呼入, data 类型为 INCALLINFO *, len为data指向空间的长度。 \n
45 * 固件要显示一个界面展示是谁呼叫,并给用户决定是要接听(TciAcceptInCall2()) \n
46 * 还是拒接(TciRejectInCall2())。不能直接在回调里调用这两个接口。\n
47 * 应用不能阻塞`on_status`调用。\n
48 * 返回: @ref ECALLFLAVOR
49 * - <=0 呼叫被忽略(sdk立即拒接呼叫).
50 * - 1 将由用户在后面通过TciAcceptInCall2()或TciRejectInCall2()接听或拒接.
51 *
52 * - \c data != NULL, \c len == 0: \n
53 * 用户取消呼叫
54 * 返回: 0
55 *
56 * - \c data == NULL, \c len == 0: \n
57 * 通话结束
58 * 返回: 0
59 *
60 * - \c data == NULL, \c len == 1: \n
61 * 长连接上的呼入通知。应用层在这里调用TciSetP2pDown(0) 打开p2p(如果之前关闭了的话). \n
62 * 这种情况下App呼叫设备,应用层会收到两次 STATUS_INCALL2通知。以后sdk可能会优化掉这 \n
63 * 步骤。
64 * 返回: 0
65 *
66 */
68
69 /** 实时传输监控.
70 * - \c data: TRANSMONITOR *
71 * - \c len: sizeof(TRANSMONITOR)
72 *
73 * <b>返回:</b>\n
74 * 开启自动码流切换(参见 @ref Feature_Resolutions)并且用户请求流为自动时, 返回值有如下功能:
75 * - \c 0 SDK会在丢帧时切换到低分码流
76 * - \c 1 表示固件自己调整了码流, SDK不再处理。
77 * - \c 2 告诉SDK降低当前连接的分辨率.
78 * - \c 3 告诉SDK提高当前连接的分辨率.
79 */
81
82 STATUS_RESOLVE_FAILED = 21, ///< 域名解析错
83
84 STATUS_WRITE_BACKSTORE = 22,
85
86 /** 长连接状态.
87 * - \c data:
88 * - \c NULL: 连接断开
89 * - \c non-NULL: 连接建立
90 */
92
93 /** 获取取注册信息
94 * - \c data: 注册信息
95 * - \c len: 长度
96 */
98
99 /** 事件录像开始和结束通知.
100 * - \c data: EVENTRECORDNOTIFICATION *
101 * - \c len: sizeof(EVENTRECORDNOTIFICATION)
102 */
104
105 /** 云存质量调整通知.
106 * \param data CSQADJUSTNOTI *
107 * \param len sizeof(CSQADJUSTNOTI)
108 *
109 * @retval 0 SDK自动处理(将录像切换到主码流或辅码流)
110 * @retval 1 应用层调整了bitrate, SDK不再处理
111 *
112 * @note 此功能需要调用 TciSetSysOption() 设置 @ref TCOPT_ENABLE_ADJUSTMENT_FOR_CS 后才会开启.
113 * \see @ref a45_CsIntegrity
114 */
116
117 /** 事件上报处理结果通知.
118 * - \c data: EVENTREPORTNOTIFICATION *
119 * - \c len: sizeof(EVENTREPORTNOTIFICATION).
120 */
122
123 /** http请求被重定向, 多数是因为路由器开启了EAP, 少数是被截持.
124 * - \c data: char *, 重定向地址
125 * - \c len: 长度
126 */
129
130/** @name Wifi 配置获取方式
131 * @{ */
132#define GWM_QRCODE 0x1 ///<二维码
133#define GWM_AP 0x2 ///<AP或蓝牙模式
134/**@}*/
135
136/** @anchor pic_type*/
137/** @name 图片类别指示
138 * @{ */
139#define PIC_USE_THUMBNAIL 0 ///<缩略图。大小不超过320*240
140#define PIC_USE_AI_BD 1 ///<人形检测。图片大小约640*352
141#define PIC_USE_AI_FD 2 ///<人脸检测
142#define PIC_HIGH_RES 3 ///<高清晰度
143/**@}*/
144
145/** 呼叫类型 */
146typedef enum {
148 CALLTYPE_EVENT, ///< ECEVENT_DOORBELL
149
150 CALLTYPE_TANGE, ///< 探鸽p2p
151 CALLTYPE_WEIXIN ///< 微信小程序
152} ECALLTYPE;
153
154/** 通话类型 */
155typedef enum {
156 NONE_CALL = 0,
157 VOICE_CALL, ///< 语音通话
158 VIDEO_CALL, ///< 视频通话
160
161/**@}*///api_const
162
163/** \addtogroup api_structure
164 * @{*/
165/** 呼叫者信息.
166 * 应用通过 on_status() 回调的 STATUS_INCALL2 状态收到本信息。\n
167 * 除 type/user_id/nickname/flavor 外,其它域对应用是透明的 */
168typedef
169struct InCallInfo {
170 int type; ///< 呼叫类型。 @ref CALLTYPE_TANGE 或 CALLTYPE_WEIXIN
171 char *user_id; ///< 呼叫者ID, 可为NULL
172 char *nickname; ///< 呼叫者昵称, 可为NULL
173
174 int flavor; ///< 主叫请求的通话类型(@ref ECALLFLAVOR)。应用在 TciAcceptInCall2()里传入接受的通话类型.
175
176 int state; ///< 0:呼入; 1:用户取消呼叫; 2:超时
177 //以下数据在SDK内部使用并可能变化,应用不要访问
178 union {
179 struct {
180 char *room_id; // 微信呼叫房间号
181 char *server_token; // 纯云下才有
182 char *session_key; //
183 char *app_payload;
184 } wx;
185 struct {
186 int sub_type;
187 void *ptr;
188 } tg;
189 };
190 char data[1];
191} INCALLINFO;
192
193/** 传输监测 */
194typedef struct TRANSMONITOR {
195 /** 发送缓冲区占用百分比.
196 * - >0 当前占比相对之前在增加.
197 * - <0 相比上一次统计在减少.
198 * - 100 出现丢帧.
199 */
201 int channel, vstream;
203
204/** 云存质量调整通知. */
205typedef struct CSQADJUSTNOTI {
206 int stream; ///< 当前录像码流
207 int up_grade; ///< 码流调用方向: 1:提升; 0:降低
209/**@}*/
210
211/** \addtogroup api_const
212 * @{*/
213
214/** 插入到媒体流(实时或回放)或命令通道中的消息类型.
215 * - 插入命令流的是通知类信息,用TciSendRtMsg()发送一个 RTMSG_t 结构
216 * - 插入媒体流的信息用于辅助描述流相关的事件或提供额外信息, 调用 TciSendLiveMessage() 或 TciSendPbMessage(),
217 * 发送的是 RTMSGHEAD_t 结构
218 * 有的消息是设备SDK自动插入,设备应用层不要主动发送.
219 */
220typedef enum {
221 /** 回放: 时间同步帧, 用于告诉播放器下一帧发生时的的UTC时间. 在时间戳中断时(例如自动跳到下一个文件)发送
222 * - data2 = 下一帧发生时的UTC时间;
223 * - data1 = 时间的毫秒部分;
224 * - extra_len = 0;
225 * SDK 提供辅助宏 @ref TciSendPbSyncFrame() 来发送这个帧
226 */
228
229 /** 实时流: 多目摄像机在变焦过程中发生镜头切换,在切换完成后、新镜头的第一个I帧前发送此标志
230 * - data1 = 视频通道号;
231 * - data2 = 码流编号;
232 * - extra_len = 0;
233 *
234 * \n使用辅助宏 @ref TciSendLiveMsg_LensSwitch() (或旧的 TciSendLensSwitchFlag())发送
235 */
237
238 /** 回放: 同 @ref RTM_SYNCTIME, 但在响应 @ref TCI_CMD_RECORD_PLAYCONTROL 命令发生跳转的第一帧前发送
239 * - data1 = 0;
240 * - data2 = 下一帧发生时的UTC时间;
241 * - extra_len = 0;
242 */
244
245 /** 实时: 到达预置位.
246 * 响应APP调用预置位命令, 在转到预置位置时在实时流中发送.用于通知APP更新预置位图片。 \n
247 * 当App端没有预置位缩略图时(分享、换手机、第三方设置了预置位等),依赖此特性自动更新。
248 * - data1: 视频通道号(或摄像头索引)
249 * - data2: 预置位编号(>0)
250 * - extra_len: 0
251 * \n使用辅助宏 @ref TciSendLiveMsg_ReachPsp() 来发送这个消息
252 */
254
255 /** 回放: 缩时录像回放启停标志.
256 * 在sd卡回放时进入和退出缩时录像发送此标志。
257 * - data1: 1:缩时录像回放开始; 0:缩时录像回放结束
258 * - data2: 0 或 倍速
259 * - extra_len: 0
260 * \n使用辅助宏 @ref TciSendPbTimelapseFlag() 发送本消息
261 */
263
264 /** 呼叫结束.
265 * 呼叫事件在设备端超时,或者接听者挂断,向所有(别的)连接发送此通知. \n
266 * 内部事件。目前在实时流里发送
267 * - data1: 状态 @ref ECALLSTATE
268 * - data2: 0
269 * - extra_len: 0
270 */
272
273 /** 实时或命令: 设备休眠通知, APP收到命令后要关闭连接
274 * - data1: 0
275 * - data2: 0
276 * - extra_len: 0
277 */
279
280 /** 回放: 事件结束标志
281 * 事件(单文件)(参见 @ref TCIC_RECORD_PLAY_START)回放模式下,当事件(文件)播放结束时发送此标志。
282 * 支持单文件模式时必需发送
283 * - data1: 0
284 * - data2: 0
285 * - extra_len: 0
286 * \n使用辅助宏 @ref TciSendPbEndOfEvent() 发送本消息
287 */
289
290 /** 命令: 取消呼叫小程序. 这个是发给转发服务器的内部消息 */
292
293 /** 用户自定义的消息 */
295} RTMTYPE;
296/**@}*/ //group: api_const
297
298/** \addtogroup api_structure
299 * @{*/
300
301/** 服务端定义的事件上报(Server Defined Event Report), 在 on_status() 回调里通过 STATUS_SDER 通知 */
302typedef struct SDER {
303 char event[16]; ///< 事件名。这个值传给 TciUduBegin2() 的evt参数
304 time_t t_start; ///< 录像开始时间
305 int tLen; ///< 录像长度
306 int need_image; ///< 1:上传图片和视频; 2:仅上传图片
307} SDER;
308
309/** 用户自定义数据通知.
310 * 用户自定义数据通过STATUS_USER_DATA 在本结构中传递给应用
311 */
312typedef struct TgUserData {
313 unsigned char *data; ///< 用户数据
314 int len; ///< 用户数据长度
315 char *id; ///< 请求标识
316 unsigned char *resp; ///< 应用返回的数据. 目前忽略
317 int resp_len; ///< 返回数据长度
318} TgUserData;
319
320/** 在媒体流中插入的 消息/数据帧 帧头 (for App Developer).
321 * 本结构与 @ref FRAMEINFO_t 一样有相同的长度,并用 codec_id来区分结构体内容;extra_len 为结构后的数据长度。 \n
322 * 插放器遇到不能识别的 codec_id 时,可以跳过本结构和后面的 extra_len 字节。 \n
323 * 设备端调用 TciSendLiveMessage() 或 TciSendPbMessage() 分别在实时流或回放流中插入消息
324 */
325typedef struct RTMSGHEAD_t
326{
327 unsigned short codec_id; ///< 0: 标志本结构
328 unsigned short type; ///< 消息类型。 @ref RTMTYPE
329
330 unsigned int data1; ///< 消息类型相关数据1
331
332 unsigned int extra_len; ///< Size of frame
333
334 unsigned int data2; ///< 消息类型相关数据2
336
337/**@}*/ //addtogroup api_struct
338
339/** \defgroup error_code 错误码
340 * @{
341 * \name 普通错误码
342 * @{*/
343
344#define TCE_OK 0 ///< 成功
345#define TCE_GENERIC_ERROR -1 ///< 一般性错误
346
347/*一般性错误*/
348#define TCE_INVALID_PARAMETER -10001001 ///<输入参数错
349#define TCE_INVALID_UUID -10001002 ///<无效UUID
350#define TCE_INVALID_AI_UUID -10001003 ///<无效AI UUID
351#define TCE_NOT_ALLOWED -10001004 ///<操作不允许
352#define TCE_IN_PROCESSING -10001005 ///<操作进行中,不要重复启动
353
354/*服务器错误*/
355#define TCE_SERVER_FAILURE -10002001 ///<服务器错误
356#define TCE_SERVER_IS_DOWN -10002002 ///<服务器没有运行
357
358/*用户错误*/
359#define TCE_ALGRTHM_DISABLED -10003001 ///<算法没有开启
360#define TCE_BUFFER_TOO_SMALL -10003002 ///<缓冲区太小
361
362/*其它*/
363#define TCE_NETWORK_BUSY -10004001 ///<网络拥堵
364#define TCE_MD_NOT_MATCH -10004002 ///<下载文件内容校验失败
365#define TCE_SERVICE_UNVAILABLE -10004003 ///<服务不可用
366#define TCE_INCALL_HAS_GONE -10004004 ///<呼入已经无效
367#define TCE_LACK_OF_RESOURCE -10004005 ///<资源(内存)不足
368/**@}*/
369/**@}*///error_code
370
371
372#endif
常数和错误码定义
ECALLFLAVOR
通话类型
ECALLTYPE
呼叫类型
RTMTYPE
插入到媒体流(实时或回放)或命令通道中的消息类型.
ESTATUSCODE
status_code TciCB::on_status()回调状态码
@ VOICE_CALL
语音通话
@ VIDEO_CALL
视频通话
@ CALLTYPE_TANGE
探鸽p2p
@ CALLTYPE_WEIXIN
微信小程序
@ CALLTYPE_EVENT
ECEVENT_DOORBELL
@ CALLTYPE_NONE
no
@ RTM_GOINGTO_SLEEP
实时或命令: 设备休眠通知, APP收到命令后要关闭连接
@ RTM_END_OF_EVENT
回放: 事件结束标志 事件(单文件)(参见 TCIC_RECORD_PLAY_START)回放模式下,当事件(文件)播放结束时发送此标志。 支持单文件模式时必需发送
@ RTM_SYNCTIME_RESPONSE_TO_USER
回放: 同 RTM_SYNCTIME, 但在响应 TCI_CMD_RECORD_PLAYCONTROL 命令发生跳转的第一帧前发送
@ RTM_UPDATE_CALL_STATE
呼叫结束.
@ RTM_LENS_SWITCH
实时流: 多目摄像机在变焦过程中发生镜头切换,在切换完成后、新镜头的第一个I帧前发送此标志
@ RTM_REACH_PSP
实时: 到达预置位.
@ RTM_TIME_LAPSED
回放: 缩时录像回放启停标志.
@ RTM_SYNCTIME
回放: 时间同步帧, 用于告诉播放器下一帧发生时的的UTC时间.
@ RTM_USER
用户自定义的消息
@ RTM_CANCEL_CALL
命令: 取消呼叫小程序.
@ STATUS_STREAMING
用户打开实时视频. data: int(number of clients); len:0
@ STATUS_SDER
服务器定义事件上传(server defined event record). data: SDER. Return: 0(ok), -1(错误, 无文件等)
@ STATUS_TRANSFER_MONITOR
实时传输监控.
@ STATUS_START_TELNETD
请求开启telnetd服务(用于调试). data:NULL
@ STATUS_LOGOFF
设备下线. data: NULL.
@ STATUS_DELETED
设备被删除. data: NULL.
@ STATUS_SWD_TIMEOUT
soft watchdog timeout. data: name
@ STATUS_RESOLVE_FAILED
域名解析错
@ STATUS_UPDATE_SERVICE
更新云服务. data: TCISERVICEINFO *; len: sizeof(TCISERVICEINFO)
@ STATUS_CS_QOS
云存质量调整通知.
@ STATUS_EVENT_RECORD
事件录像开始和结束通知.
@ STATUS_INCALL2
呼入状态通知.
@ STATUS_IDLE
设备休眠查询.
@ STATUS_EVENT_CALLBACK
事件上报处理结果通知.
@ STATUS_WS_CONNECTION
长连接状态.
@ STATUS_AI
服务器端AI检测到正的结果. data: struct AiResult *
@ STATUS_USER_DATA
用户数据. data: TgUserData *; len: TgUserData结构长度
@ STATUS_LOGON
设备上线. data: NULL.
@ STATUS_AP_CONNECT
用户通过ap直连. data:NULL
@ STATUS_GOT_REGINFO
获取取注册信息
@ STATUS_ACCESS_REDIRECTED
http请求被重定向, 多数是因为路由器开启了EAP, 少数是被截持.
int state
0:呼入; 1:用户取消呼叫; 2:超时
int type
呼叫类型。 CALLTYPE_TANGE 或 CALLTYPE_WEIXIN
char * id
请求标识
unsigned char * data
用户数据
unsigned int data2
消息类型相关数据2
int need_image
1:上传图片和视频; 2:仅上传图片
time_t t_start
录像开始时间
int up_grade
码流调用方向: 1:提升; 0:降低
char * user_id
呼叫者ID, 可为NULL
unsigned int extra_len
Size of frame
char * nickname
呼叫者昵称, 可为NULL
int resp_len
返回数据长度
int sndbuf_waterline
发送缓冲区占用百分比.
unsigned short type
消息类型。 RTMTYPE
unsigned short codec_id
0: 标志本结构
int tLen
录像长度
int stream
当前录像码流
int flavor
主叫请求的通话类型(ECALLFLAVOR)。应用在 TciAcceptInCall2()里传入接受的通话类型.
int len
用户数据长度
unsigned int data1
消息类型相关数据1
unsigned char * resp
应用返回的数据. 目前忽略
云存质量调整通知.
呼叫者信息.
在媒体流中插入的 消息/数据帧 帧头 (for App Developer).
服务端定义的事件上报(Server Defined Event Report), 在 on_status() 回调里通过 STATUS_SDER 通知
用户自定义数据通知.