Tange Cloud for Device
 Rev.362
载入中...
搜索中...
未找到
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 - \c data: NULL
26 - \c len:
27 - \c >0: 设备可以进入休眠时,应用在此回调里做清理动作,并与唤醒服务器建立。当这些动作完成后,再返回0
28 - \c ==0: sdk已经下线,设备要立即下电
29
30 本状态当 \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 */
62
63 /** 实时传输监控.
64 * - \c data: TRANSMONITOR *
65 * - \c len: sizeof(TRANSMONITOR)
66 *
67 * <b>返回:</b>\n
68 * 开启自动码流切换(参见 @ref Feature_Resolutions)并且用户请求流为自动时, 返回值有如下功能:
69 * - \c 0 SDK会在丢帧时切换到低分码流
70 * - \c 1 表示固件自己调整了码流, SDK不再处理。
71 * - \c 2 告诉SDK降低当前连接的分辨率.
72 * - \c 3 告诉SDK提高当前连接的分辨率.
73 */
75
76 STATUS_RESOLVE_FAILED = 21, ///< 域名解析错
77
78 STATUS_WRITE_BACKSTORE = 22,
79
80 /** 长连接状态.
81 * - \c data:
82 * - \c NULL: 连接断开
83 * - \c non-NULL: 连接建立
84 */
86
87 /** 获取取注册信息
88 * - \c data: 注册信息
89 * - \c len: 长度
90 */
92
93 /** 事件录像开始和结束通知.
94 * - \c data: EVENTRECORDNOTIFICATION *
95 * - \c len: sizeof(EVENTRECORDNOTIFICATION)
96 */
98
99 /** 云存质量调整通知.
100 * - \c data: CSQADJUSTNOTI *
101 * - \c len: sizeof(CSQADJUSTNOTI)
102 * <b>返回</b>
103 * - 0 SDK自动处理(将录像切换到主码流或辅码流)
104 * - 1 应用层调整了bitrate, SDK不再处理
105 *
106 * 此功能需要调用 TciSetSysOption() 设置 @ref TCOPT_ENABLE_ADJUSTMENT_FOR_CS 后才会开启.
107 */
108 STATUS_CS_QOS = 26
110
111/** @name Wifi 配置获取方式
112 * @{ */
113#define GWM_QRCODE 0x1 ///<二维码
114#define GWM_AP 0x2 ///<AP或蓝牙模式
115/**@}*/
116
117/** @anchor pic_type*/
118/** @name 图片类别指示
119 * @{ */
120#define PIC_USE_THUMBNAIL 0 ///<缩略图。大小不超过320*240
121#define PIC_USE_AI_BD 1 ///<人形检测。图片大小约640*352
122#define PIC_USE_AI_FD 2 ///<人脸检测
123#define PIC_HIGH_RES 3 ///<高清晰度
124/**@}*/
125
126/** 呼叫类型 */
127typedef enum {
129 CALLTYPE_EVENT, ///< ECEVENT_DOORBELL
130
131 CALLTYPE_TANGE, ///< 探鸽p2p
132 CALLTYPE_WEIXIN ///< 微信小程序
134
135/** 通话类型 */
136typedef enum {
137 NONE_CALL = 0,
138 VOICE_CALL, ///< 语音通话
139 VIDEO_CALL, ///< 视频通话
141
142/**@}*///api_const
143
144/** \addtogroup api_structure
145 * @{*/
146/** 呼叫者信息.
147 * 应用通过 on_status() 回调的 STATUS_INCALL2 状态收到本信息。\n
148 * 除 type/user_id/nickname/flavor 外,其它域对应用是透明的 */
149typedef
150struct InCallInfo {
151 int type; ///< 呼叫类型。 @ref CALLTYPE_TANGE 或 CALLTYPE_WEIXIN
152 char *user_id; ///< 呼叫者ID, 可为NULL
153 char *nickname; ///< 呼叫者昵称, 可为NULL
154
155 int flavor; ///< 主叫请求的通话类型(@ref ECALLFLAVOR)。应用在 TciAcceptInCall2()里传入接受的通话类型.
156
157 int state; ///< 0:呼入; 1:用户取消呼叫; 2:超时
158 //以下数据在SDK内部使用并可能变化,应用不要访问
159 union {
160 struct {
161 char *room_id; // 微信呼叫房间号
162 char *server_token; // 纯云下才有
163 char *session_key; //
164 char *app_payload;
165 } wx;
166 struct {
167 int sub_type;
168 void *ptr;
169 } tg;
170 };
171 char data[1];
172} INCALLINFO;
173
174/** 传输监测 */
175typedef struct TRANSMONITOR {
176 /** 发送缓冲区占用百分比.
177 * - >0 当前占比相对之前在增加.
178 * - <0 相比上一次统计在减少.
179 * - 100 出现丢帧.
180 */
182 int channel, vstream;
184
185/** 云存质量调整通知. */
186typedef struct CSQADJUSTNOTI {
187 int stream; ///< 当前录像码流
188 int up_grade; ///< 码流调用方向: 1:提升; 0:降低
190/**@}*/
191
192/** \addtogroup api_const
193 * @{*/
194
195/** 插入到媒体流(实时或回放)或命令通道中的消息类型.
196 * - 插入命令流的是通知类信息,用TciSendRtMsg()发送一个 RTMSG_t 结构
197 * - 插入媒体流的信息用于辅助描述流相关的事件或提供额外信息, 调用 TciSendLiveMessage() 或 TciSendPbMessage(),
198 * 发送的是 RTMSGHEAD_t 结构
199 * 有的消息是设备SDK自动插入,设备应用层不要主动发送.
200 */
201typedef enum {
202 /** 回放: 时间同步帧, 用于告诉播放器下一帧发生时的的UTC时间. 在时间戳中断时(例如自动跳到下一个文件)发送
203 * - data2 = 下一帧发生时的UTC时间;
204 * - data1 = 时间的毫秒部分;
205 * - extra_len = 0;
206 * SDK 提供辅助宏 @ref TciSendPbSyncFrame() 来发送这个帧
207 */
209
210 /** 实时流: 多目摄像机在变焦过程中发生镜头切换,在切换完成后、新镜头的第一个I帧前发送此标志
211 * - data1 = 视频通道号;
212 * - data2 = 码流编号;
213 * - extra_len = 0;
214 *
215 * \n使用辅助宏 @ref TciSendLiveMsg_LensSwitch() (或旧的 TciSendLensSwitchFlag())发送
216 */
218
219 /** 回放: 同 @ref RTM_SYNCTIME, 但在响应 @ref TCI_CMD_RECORD_PLAYCONTROL 命令发生跳转的第一帧前发送
220 * - data1 = 0;
221 * - data2 = 下一帧发生时的UTC时间;
222 * - extra_len = 0;
223 */
225
226 /** 实时: 到达预置位.
227 * 响应APP调用预置位命令, 在转到预置位置时在实时流中发送.用于通知APP更新预置位图片。 \n
228 * 当App端没有预置位缩略图时(分享、换手机、第三方设置了预置位等),依赖此特性自动更新。
229 * - data1: 视频通道号(或摄像头索引)
230 * - data2: 预置位编号(>0)
231 * - extra_len: 0
232 * \n使用辅助宏 @ref TciSendLiveMsg_ReachPsp() 来发送这个消息
233 */
235
236 /** 回放: 缩时录像回放启停标志.
237 * 在sd卡回放时进入和退出缩时录像发送此标志。
238 * - data1: 1:缩时录像回放开始; 0:缩时录像回放结束
239 * - data2: 0 或 倍速
240 * - extra_len: 0
241 * \n使用辅助宏 @ref TciSendPbTimelapseFlag() 发送本消息
242 */
244
245 /** 呼叫结束.
246 * 呼叫事件在设备端超时,或者接听者挂断,向所有(别的)连接发送此通知. \n
247 * 内部事件。目前在实时流里发送
248 * - data1: 状态 @ref ECALLSTATE
249 * - data2: 0
250 * - extra_len: 0
251 */
253
254 /** 实时或命令: 设备休眠通知, APP收到命令后要关闭连接
255 * - data1: 0
256 * - data2: 0
257 * - extra_len: 0
258 */
260
261 /** 回放: 事件结束标志
262 * 事件(单文件)(参见 @ref TCIC_RECORD_PLAY_START)回放模式下,当事件(文件)播放结束时发送此标志。
263 * 支持单文件模式时必需发送
264 * - data1: 0
265 * - data2: 0
266 * - extra_len: 0
267 * \n使用辅助宏 @ref TciSendPbEndOfEvent() 发送本消息
268 */
270
271 /** 命令: 取消呼叫小程序. 这个是发给转发服务器的内部消息 */
273
274 /** 用户自定义的消息 */
275 RTM_USER = 255
277/**@}*/ //group: api_const
278
279/** \addtogroup api_structure
280 * @{*/
281
282/** 服务端定义的事件上报(Server Defined Event Report), 在 on_status() 回调里通过 STATUS_SDER 通知 */
283typedef struct SDER {
284 char event[16]; ///< 事件名。这个值传给 TciUduBegin2() 的evt参数
285 time_t t_start; ///< 录像开始时间
286 int tLen; ///< 录像长度
287 int need_image; ///< 1:上传图片和视频; 2:仅上传图片
288} SDER;
289
290/** 用户自定义数据通知.
291 * 用户自定义数据通过STATUS_USER_DATA 在本结构中传递给应用
292 */
293typedef struct TgUserData {
294 unsigned char *data; ///< 用户数据
295 int len; ///< 用户数据长度
296 char *id; ///< 请求标识
297 unsigned char *resp; ///< 应用返回的数据. 目前忽略
298 int resp_len; ///< 返回数据长度
299} TgUserData;
300
301/** 在媒体流中插入的 消息/数据帧 帧头 (for App Developer).
302 * 本结构与 @ref FRAMEINFO_t 一样有相同的长度,并用 codec_id来区分结构体内容;extra_len 为结构后的数据长度。 \n
303 * 插放器遇到不能识别的 codec_id 时,可以跳过本结构和后面的 extra_len 字节。 \n
304 * 设备端调用 TciSendLiveMessage() 或 TciSendPbMessage() 分别在实时流或回放流中插入消息
305 */
306typedef struct RTMSGHEAD_t
307{
308 unsigned short codec_id; ///< 0: 标志本结构
309 unsigned short type; ///< 消息类型。 @ref RTMTYPE
310
311 unsigned int data1; ///< 消息类型相关数据1
312
313 unsigned int extra_len; ///< Size of frame
314
315 unsigned int data2; ///< 消息类型相关数据2
317
318/**@}*/ //addtogroup api_struct
319
320/** \defgroup error_code 错误码
321 * @{
322 * \name 普通错误码
323 * @{*/
324
325#define TCE_OK 0 ///< 成功
326#define TCE_GENERIC_ERROR -1 ///< 一般性错误
327
328/*一般性错误*/
329#define TCE_INVALID_PARAMETER -10001001 ///<输入参数错
330#define TCE_INVALID_UUID -10001002 ///<无效UUID
331#define TCE_INVALID_AI_UUID -10001003 ///<无效AI UUID
332#define TCE_NOT_ALLOWED -10001004 ///<操作不允许
333#define TCE_IN_PROCESSING -10001005 ///<操作进行中,不要重复启动
334
335/*服务器错误*/
336#define TCE_SERVER_FAILURE -10002001 ///<服务器错误
337#define TCE_SERVER_IS_DOWN -10002002 ///<服务器没有运行
338
339/*用户错误*/
340#define TCE_ALGRTHM_DISABLED -10003001 ///<算法没有开启
341#define TCE_BUFFER_TOO_SMALL -10003002 ///<缓冲区太小
342
343/*其它*/
344#define TCE_NETWORK_BUSY -10004001 ///<网络拥堵
345#define TCE_MD_NOT_MATCH -10004002 ///<下载文件内容校验失败
346#define TCE_SERVICE_UNVAILABLE -10004003 ///<服务不可用
347#define TCE_INCALL_HAS_GONE -10004004 ///<呼入已经无效
348#define TCE_LACK_OF_RESOURCE -10004005 ///<资源(内存)不足
349/**@}*/
350/**@}*///error_code
351
352
353#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_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
获取取注册信息
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 通知
用户自定义数据通知.