2020年7月24日 星期五

AndroidCGI



  • 一進ipmotion( ipcam)



**GetBase64.cgi
=>hBase64=YWRtaW46cmQy (admin:rd2)

----------------------------
//ipcam
**GetCameraType.cgi?hBase64=YWRtaW46cmQy
=> 判斷是否ipcam or Dvr or QT or iss or cms(  0xAA<=CameraType & 0x 00FF <=0xB9 )
=> VideoNum // 分割數?
=>AudioNum  //是否有audio?
=>IO_InputNum //是否有alarm
=> Backup // 是否有sd card
=> Resolution1 // 支援解析度?
=> AI_FUNC //是否有 FaceDetection or FaceRecognition
//qt
CameraType==0x00240171 +  NvrType= 0x74AB0001

//fltk
其他(排除ipcam , vedio server , qt ,cms

//vedio server
CameraType==0x00240171

//cms
CameraType==0x00440168

----------------------------

**GetMultimedia.cgi?hBase64=YWRtaW46cmQy

Mode:go mjpeg or h264? or h265?

Video_Size: 大馬流

//QT & fltk &cms
not support

-------------以下 getfirst image---------------
**GetImage.cgi?Size=640x480

-------------以下 MAC---------------
**GetMAC.cgi?hBase64=YWRtaW46cmQy

NodeSite.setMac

-------------以下 ptz---------------
GetPTZ.cgi?hBase64=YWRtaW46cmQy

PTZModel

-------------以下 chatting---------------

Chatting.cgi?Chatting=0&hBase64=YWRtaW46cmQy

-------------以下 日期/time---------------

GetPlayBack.cgi?Show=Date&hBase64=YWRtaW46cmQy

GetPlayBack.cgi?Time=20191110



  • 一進  ipcam live



//是否支持 魚眼
http://admin:rd2@192.168.82.74:80/GetPTZCap.cgi
FishEyeCap

//ai 用
http://admin:rd2@192.168.82.74:80/GetPeopleEvent.cgi


//get first image + stream live
http://192.168.82.74:80/GetImage.cgi?Size=vga
http://192.168.82.74:80/GetStream.cgi?Video=0&Audio=0 (Video=channel)
http://192.168.82.74:80/GetStream.cgi?Audio=0



  • 一進ipmotion (NVR)



GetBase64.cgi
GetCameraType.cgi
GetMultimedia.cgi
GetMAC.cgi?

//ipcam aws server deregister; //fltk 特有?
deregister_device.cgi?os=android&device=19afd09bd4f73e07ad053275e8c0b8a1&

//fltk 特有?
GetFunctionSupport.cgi? (確認是否有cgi) => EXCEPTION_CONNECTION_NOT_FOUND =>isDVRdevice

GetIPCamSupportAll.cgi? => ptz support

//fltk 特有?
GetIPCamSupport.cgi?CH=0
GetIPCamSupport.cgi?CH=1
GetIPCamSupport.cgi?CH=2
GetIPCamSupport.cgi?CH=3

//fltk
GetRecordTime.cgi
=> recordday 那些日期有


  •  一進  DVR live



//ipcam name
http://admin:admin@192.168.82.49:80/GetName.cgi
//rtmp 是否支援?
http://admin:admin@192.168.82.49:80/QCGetUpstream.cgi?hBase64=YWRtaW46YWRtaW4=
//relay 是否支援
http://admin:admin@192.168.82.49:80/QCGetRelayInfo.cgi
//relay box 是否支援
http://admin:admin@192.168.82.49:80/GetRelayBoxSupport.cgi


http://192.168.82.49:80/GetStream.cgi?Video=0&Audio=0
http://admin:admin@192.168.82.49:80/SetCHEnable.cgi?session=0012157208&nDISP=1&nGROUP=0&CH_ENABLE=1111&AUDIO_ENABLE=0

http://admin:admin@192.168.82.49:80/GetAuthor.cgi?user=admin
=>Play_Event 權限


  • ======其他========

  • live stream:


HuntStreamManager::openStream():

videoServer:
                url = mNode.getSite().getVideoServer_StreamApi(mChannel); //videoServer; GetStream.cgi?Video= channel
                audioUrl = mNode.getSite().getVideoServer_AudioStreamApi(mChannel);//; GetStream.cgi?Audio= channel
Camera video:

              url = mNode.getSite().getCameraVideoStreamApi(mChannel); //Camera video; GetStream.cgi?Video=0&Audio=0
                audioUrl = mNode.getSite().getCameraAudioStreamApi(); //Camera audio; GetStream.cgi?Audio=0
NVR:
                url = mNode.getSite().getCameraVideoStreamApi(mChannel); //NVR video+audio ; GetStream.cgi?Video=0&Audio=0
configStream() //SetCHEnable.cgi?session=1025202362&nDISP=1&nGROUP=0&CH_ENABLE=1111000000000000000000000000000000000000000000000000000000000000&AUDIO_ENABLE=0

--------------------------------------
GetStream.cgi


  • playback stream:


同上,但控制為 其他cgi



  • ipcam & dvr first image



NVR:
GetJPG.cgi?CH=1
IPcam:
GetImage.cgi?Size=vga



  • face (參考: NodeConnection:faceDetectionPostCGI)


is support cgi:
//deprecated , 是否支援人臉, 改由 AI_FUNC (GetCameraType.cgi)決定(ipcam)
{"command":"fdr_get"}

//所有人臉人員 資訊
{"command":"namelist"}

//取人臉圖
{"command":"face_images","UUID":"19f46bac-6109-46ba-a610-f46bace6109f", "limit":1}

//移除使用者
{"command":"remove_user","UUID":"19f46bac-6109-46ba-a610-f46bace6109f"}

//註冊 or 更新使用者
{"command":"register_user","UUID":"31180851-612e-4dc7-b4cd-686a1507810d","info":{"name":"zzzqqq","organization":"Unknown","group":"Unknown" },"pictures":["base64_pic"]}

{"command":"update_user","UUID":"31180851-612e-4dc7-b4cd-686a1507810d","info":{"name":"zzzqqq","organization":"Unknown","group":"Unknown" },"pictures":["base64_pic"]}

//人臉事件截圖
{"command":"face_recognition_event_with_face_snapshot","timeslot_start":1573537374000, "timeslot_end":1573623774000,"filter":{"name":"","group":0, "gender":3,"age_min":0, "age_max":100 },"page":{"offset":0,"limit":10 }}

//存在的group 最多10 (用於搜尋,新增)
{"command":"grouplist"}

//存在的org 最多10 (用於搜尋,新增)
{"command":"organizationlist"}





{"command":"face_recognition_event_with_face_snapshot","timeslot_start":1573537374000, "timeslot_end":1573623774000,"filter":{"name":"","group":0, "gender":3,"age_min":0, "age_max":100 },"page":{"offset":0,"limit":10 }}



  • AI people counting,queue counting




GetPeopleEvent.cgi
先檢查事件類型
event_opt  //事件類型 6:Queue Detection  7:People counting ;10:  入侵偵測  Intruder detection; 11: 電子圍籬 Electronic fence
if Queue Detection(event_opt=6) ||  Intruder(event_opt=10)||  Electronic(event_opt=11)
    再檢查偵測框類型
    det_reg0   //0:Rectangle  1:Polygon(Queue Detection)
    if Rectangle(det_reg0=0)
        rect_num0   //表示偵測框有幾個點(Rectangle)
        rect0_0~rect0_7   //根據rect_num的值決定要取到第幾個座標

    if Polygon(det_reg0=1)
        pt_num0   //表示偵測框有幾個點(Polygon)
        pt0_0~pt0_19   //根據pt_num0的值決定要取到第幾個座標

if  People counting(event_opt=7)
    rotate0_0~rotate0_3   //People counting模式取此座標

rect_d0_0~rect_d0_7   //未知



  • thermal cam (temperature)

  • GetThermal.cgi

feverwarning_val=37.50<br> // 警報溫度
feverwarning_en=0<br> // warning 是否送?
fever_alarmsound_en=0<br> //??
fever_degree=0<br>
board_temp=45.36<br> //thermal模組溫度
heater_temp=45.00<br> //??
cpu_temp=64.24<br> //??
highest_temp=31.9<br> //??
tempography=0<br>
profile=7<br> //環境補償參數
status=0<br> //thermal狀態

  • SetThermal.cgi
參數同上,
手機用:
feverwarning_val


  • stream struct 

sizeof 262

typedef struct _FACE_RECOGNITION_BODY
{
    unsigned short x; ,pos:0
    unsigned short y; ,pos:2    
    unsigned short width;,pos:4    
    unsigned short height;   ,pos:6

    unsigned char name_show;  ,pos:8     //ActiveX是否顯示 0/1 OFF/ON
    unsigned char name[64];   ,pos:29     //(商/閱)名字 '\0'/[name] None/Name 最多63個字
    
    unsigned char group_show; ,pos:73     //ActiveX是否顯示 0/1 OFF/ON
    unsigned char group[64];  ,pos:74     //(商/閱)群組 '\0'/[name] None/Group 最多63個字   
    
    unsigned char organization_show; ,pos:138     //ActiveX是否顯示 0/1 OFF/ON
    unsigned char organization[64];  ,pos:139     //(商/閱)組織 '\0'/[name] None/Organization 最多63個字  
    
        //
// +---------------+
// |0|1|2|3|4|5|6|7|
// +-+-------------+
// |s|    value    |
// +-+-------------+
        // show(s): unsigned char 中 第一個 bit (上面 S 的位置) 如果設定為1則ActiveX 會顯示 0則是不會顯示
        //level, age, gender, glasses, mask, race, beard, expression,live 皆是以上結構

  
    unsigned char age;    ,pos:203         //(商/閱)年紀 0~100: None/0~100       

    unsigned char color[3]; ,pos:204       //(商/閱)邊框顏色RGB          
   
    unsigned char size; ,pos:207   //(商/閱)邊框粗細 1/3/5/7/9     

    unsigned char font_size;  ,pos:208      //(商/閱)文字大小 6/8/10/12/14 
    
    unsigned char gender;    ,pos:209      //(商/閱)性別 0/1  : male/female     

    unsigned char glasses;  ,pos:210       //眼鏡 0/1/2 : None/glasses/sunglasses           

    unsigned char mask;     ,pos:211       //面具 0/1 : None/mask              

    unsigned char race;     ,pos:212       //種族 0/1/2 : yellow/black/white    

    unsigned char beard;    ,pos:213       //鬍子 0/1 :None/beard            
 
    unsigned char expression;,pos:214      //表情 0/1/2/3/4 :angry/happy/sad/calm/suprised       
   
    unsigned char stay_time_show;,pos:215  //ActiveX是否顯示 0/1 OFF/ON
    unsigned int stay_time;      ,pos:216        //(商/閱)逗留時間(sec) -1/~ :停留秒數     

    unsigned int thumbnail_size; ,pos:220   //(商/閱)縮圖大小
    
    unsigned int tid;         ,pos:224     //(商/閱)偵測人臉的編號(track id)
    unsigned int db_amount;   ,pos:228     //(商/閱)Database資料數量
    unsigned int db_timestamp;,pos:232     //(商/閱)Database最後更新時間
    unsigned int face_count_num;,pos:236   //人臉計數
    unsigned char live;        ,pos:240    //活體 0/1/2:未知/活體/非活體
    unsigned char roi_area;    ,pos:241    //人臉位於的ROI區塊
    // +---------------+
// |0|1|2|3|4|5|6|7|
// +---------------+
// |      value    |
// +---------------+
// bit0~bit7 分別代表區塊8~區塊1, 0/1:無/位於該區塊
    short yaw;               ,pos:242       //(商/閱)人臉朝向角度
    short pitch;              ,pos:244      //(商/閱)人臉俯仰角度
    short roll;              ,pos:246       //(商/閱)人臉左右傾斜角度


unsigned char temp_show;     ,pos:248
    //
// +---------------+
// |0|1|2|3|4|5|6|7|
// +-+----------------------+
// |s|    value     |
// +-+----------------------+
// show(s): unsigned char 中 第一個 bit (上面 S 的位置) 為ActiveX 是否顯示溫度0/1:顯示/不顯示;bit7: 溫度單位 0/1 dC/dF
    float temp;               ,pos:249      //人臉溫度
unsigned short temp_x; ,pos:253     //溫度標示水平位置
    unsigned short temp_y; ,pos:255 //溫度標示垂直位置  
    unsigned char temp_color[3];,pos:257 //溫度標示顏色 RGB   
unsigned char temp_size;,pos:260 //溫度文字大小 6/8/10/12/14
unsigned char show_style;,pos:261 // 0:顯示溫度靶,1:顯示人臉框
}__attribute__((packed)) FACE_RECOGNITION_BODY;




2020年7月23日 星期四

Header(IPcam,NVR)

Android header 基本順序:
====================以下為IPCAM 基本====================

HuntStreamHeader(DATAHEADER) => HuntSystemHeader =>

以下為實際送: (system frame (uctype=0);
i frame  (uctype=1,4);
p frame(uctype=2,3) ;
faceframe(uctype=41); 
motionFrame(uctype=6);
fisheyeFrame (uctype=39);
AIFrame (uctype=42)
AI_OSD_frame(uctype=32)


====================以下為IPCAM  人臉====================
*uctype=41: //face

預計送法 :  DATAHEADER =>  FACE_RECOGNITION HEADER=> FACE_RECOGNITION BODY=>THUMBNAIL DATA (沒用,影像?)=>FACE_RECOGNITION BODY=>THUMBNAIL DATA




//_FACE_RECOGNITION_HEADER  大小為18
typedef struct _FACE_RECOGNITION_HEADER 
{
unsigned short face_count;  //Total number of faces //偵測到的人臉數量
unsigned short inwidth;     //input width  //目前stream的解析度寬度
unsigned short inheight;    //input height //目前stream的解析度高度
unsigned int   length;      //(sizeof(FACE_RECOGNITION_BODY)* face_count + total_thumbnail_size) 
// +---------------+---------------+---------------+---------------+
// |0|1|2|3|4|5|6|7|0|1|2|3|4|5|6|7|0|1|2|3|4|5|6|7|0|1|2|3|4|5|6|7|
// +---------------+---------------+---------------+---------------+
// |商湯(0x01)     | 版本佔3bytes                                  |
// |閱面(0x02)     |                                               |
// +---------------+---------------+---------------+---------------+
unsigned int   version;     //version
unsigned int   body_size;   //單個body struct size   (sizeof(FACE_RECOGNITION_BODY)) body_size=242

}__attribute__((packed)) FACE_RECOGNITION_HEADER;

FACE_RECOGNITION BODY (有好幾版v1.1 ~v9 ;以FACE_RECOGNITION_HEADER::body_size 區分)

====================以下為IPCAM  Fisheye====================
*uctype=39


size:240 bytes


typedef struct _FISHEYE_HEADER
{
    int Mode;                                               0
    int Display;                                            4
    int x1[FISHEYE_CHANNEL_SIZE][FISHEYE_AREA_SIZE];        8
    int y1[FISHEYE_CHANNEL_SIZE][FISHEYE_AREA_SIZE];        40
    int x2[FISHEYE_CHANNEL_SIZE][FISHEYE_AREA_SIZE];        72
    int y2[FISHEYE_CHANNEL_SIZE][FISHEYE_AREA_SIZE];        104
    int posx[FISHEYE_CHANNEL_SIZE][FISHEYE_AREA_SIZE];      136
    int posy[FISHEYE_CHANNEL_SIZE][FISHEYE_AREA_SIZE];      168
    int channel;                                            200
    int limit_x_min[FISHEYE_CHANNEL_SIZE];                  204
    int limit_x_max[FISHEYE_CHANNEL_SIZE];                  212
    int limit_y_min[FISHEYE_CHANNEL_SIZE];                  220
    int limit_y_max[FISHEYE_CHANNEL_SIZE];                  228
    int speed;                                              236
} __attribute__((packed)) FISHEYE_HEADER;


====================以下為IPCAM  AI====================

uctype=42: // 人形偵測?
isHuntIpcamAIFeature
new HuntAIFeatureHeader


unsigned int obj_num;               0
------依據obj_num數量決定重覆幾次------------ size: 16
    unsigned short left;                4       20
    unsigned short top;                 6       22
    unsigned short width;               8       24
    unsigned short height;              10      26
    unsigned char rect_color_R;         12      28
    unsigned char rect_color_G;         13      29
    unsigned char rect_color_B;         14      30
    unsigned char line_color_R;         15      31
    unsigned char line_color_G;         16      32
    unsigned char line_color_B;         17      33
    unsigned char line_size;            18      34
    char point_num;                     19      35

========================================

uctype=32: // 文字資訊
isHuntIpcamAI_OSD
new HuntAIFeatureOSDHeader

size:167 bytes.


typedef struct _TEXT_PRINT_EXTEND_HEADER
{
    char text[30];              0
    char color;                    30        //文字顏色 0/1/2/3/4/5: Red/White/Blue/Black/Yellow/Green
    char size;                 31        //文字大小 0/1/2: Small/Medium/Big default: 1(Medium)
    char position;             32        //文字出現的位置 0/1/2/3: LeftTop/RightTop/LeftBottom/RightBottom
    char order;                    33        //跟著position設定顯示文字排列順序 (0,1,2,3)
    int time;                  34        //文字閃爍的時間 (-2:clear all, -1:close, 0:always, 1:1s, 2:2s, ...., 120:120s)
    char extend_text[128];      38
    char fixFlag;               166

}TEXT_PRINT_EXTEND_HEADER

========================================
===================以下為NVR 基本(QT)=====================

QT header 順序=> _DATAHEADER , DVRFRAME_HEADER_V2, Image_header_V3 

已知:
iss & fltk : Image_header_V2
android 中 已整 uctype(_DATAHEADER ):

      private final static int HUNT_HEADER_TYPE_SYSTEM_FRAME = 0;
private final static int HUNT_HEADER_TYPE_I_FRAME = 1;
private final static int HUNT_HEADER_TYPE_P_FRAME = 2;
private final static int HUNT_HEADER_TYPE_B_FRAME = 3;
private final static int HUNT_HEADER_TYPE_JPEG_FRAME = 4;
protected final static byte HUNT_HEADER_TYPE_AUDIO = 5;
private final static int HUNT_HEADER_TYPE_MOTION = 6;
protected final static byte HUNT_HEADER_TYPE_CHAT = 11;
private final static int HUNT_HEADER_TYPE_DVR_STREAM = 14;
private final static int HUNT_HEADER_TYPE_HYBRID_STREAM = 19;
private final static int HUNT_HEADER_TYPE_NVR_STREAM = 21;
private final static int HUNT_HEADER_TYPE_NVR_36_STREAM = 24;//qt

private final static int HUNT_HEADER_TYPE_FISHEYE_INFO = 39;
private final static int HUNT_HEADER_TYPE_FACE_STREAM = 41;

private final static int HUNT_HEADER_TYPE_AI_FEATURE = 42;
private final static int HUNT_HEADER_TYPE_AI_OSD = 32;



=============================================

total len:20

typedef struct _DATAHEADER // Audio 或 Video Frame 所需的 header
{
    unsigned char ucID[4];          // 識別碼,請用"3297"              //pos end:4
    unsigned char ucHeaderLen;  // length of _DataHeader, 0xFF 保留供將來擴充用 //5
    unsigned char ucType;           // pos end:6
    
// Mask1~~~Mask3 total 32 bit(4 byte)
    unsigned int Mask1:1;
    unsigned int uiTimeMsec:10; //  time millisecond
    unsigned int uiReserved1:3; //  每個bit都是1
    unsigned int Mask2:1;
    unsigned int uiTimeSecHigh:16;  //  time second
    unsigned int Mask3:1; // pos end:10

    unsigned short usTimeSecLow;    //  time second  //pos end:12

    unsigned int Mask4:1;
    unsigned int uiLength:24;       //  data length (Byte)
    unsigned int uiReserved2:6; //  每個bit都是1
    unsigned int Mask5:1; //pos end:16

    unsigned short usSendCount:15; // send出去的frame,包system,I,P,B,J..... //18
    unsigned short Mask6:1;
    unsigned short usEncoderCount:15; // Encoder出來的frame,encoder只要切換就重算 //20
    unsigned short Mask7:1;

} __attribute__((packed)) DATAHEADER ;


QT重點在:

Dataheader.ucType =0x 3, 0x 2, 0x 9, ox 7 //QT

      Dataheader.ucType    =  (QT: 24 ,)

    Dataheader.uiLength    = sizeof(DVRFRAME_HEADER_V2);//下個frame長

ipcam:

Dataheader.ucType =' 3', '2', '9', '7' // ascii :0x33, 0x 32, 0x 39,ox 37





=============================================

DVRFRAME_HEADER_V2 //QT, hybrid

typedef struct _DVRFRAME_HEADER_V2
{
    unsigned char ucVideoSystem; //NT=1;PAL=2
    unsigned short usHeight; //影像高
    unsigned short usWidth; //影像寬
    unsigned char ucCompress:4;  //0:mpeg4   1:h.264 2.jpeg 3:pcm 4:adpcm
    unsigned char ucFrameType:4; //0:I 1:P 2:B
    unsigned char ucCh;          //Channel index
    unsigned int uiDataLen; //資料長度
    unsigned char ucSerial;           //流水號 0-255
    unsigned char ucPlayback;        //0x80:PB/LIVE  FF:0x40 RF:0x20 PAUSE:0x10
    unsigned char ucArg;              //回放時之速度
    unsigned char ucImageSource;  //0: DVR  1:IPCam   //2: audio

} __attribute__((packed)) DVRFRAME_HEADER_V2;


QT 重點:

    // DVRFRAME_HEADER_V2
    dvrheader.usHeight = 0; //影像高
    dvrheader.usWidth = 0; //影像寬
    dvrheader.ucFrameType = 5;
    dvrheader.ucCh = 0;
    dvrheader.uiDataLen = pImage_header->u32Len+sizeof(struct Image_header_V3);
    dvrheader.ucSerial = 0;
    dvrheader.ucArg = get_speed(pMobileUserClient->nAction,pMobileUserClient->nSpeed);;

    dvrheader.ucPlayback =  0x80;

=============================================

例如v3 header //QT 使用

typedef struct Image_header_V3 
{ 
 unsigned int nStartCode;   //FFFFFFAA
 time_t      tSec;            //時間
 unsigned int tuSec;
 unsigned int nLen;    //Frame 的資料長度
 unsigned long long nRec_ch;   //紀錄錄影當時的頻道
 unsigned short  nChA;          //Channel number
 unsigned short  nChB:4;          // For Video:Reaolution, For Audio:Audio Type
 unsigned short  nFrameType:2;   // 0: MPEG4 , 1: H264 , 2: ALL_AUDIO , 3: MJPEG
 unsigned short  nKeyframe:1;     // 0: P-Frame , 1: I-Frame
 unsigned short  nVideosystem:1; // 0: NTSC , 1: PAL

 unsigned short  Capture:1;   // 0: Analog , 1: IPCAM
 unsigned short  nRes:1;           // 不使用,預設為 0
 unsigned short  field:2;   // 不使用,預設為 3
 unsigned short  Reserver:4;

}__attribute__((packed)) Image_header_V3;

------------------------------------------------

int time_t int int (long long) short short
4      4        4      4         8            2        2     //占的位子大小(單位btye)

最後那個short為2byte,包含
 nchB , nFrameType,nKeyframe,nVideosystem, //總和1byte
Capture,nRes,field,Reserver   //總和1byte

以上是送
---------------------------------------
以下是收

如到因為little ending  所以會反過來,
如果為getshort(26)//26為起始位置

收到順序為Reserver,field,nRes,Capture,
nVideosystem,nKeyframe,nFrameType:2,nchB:4

所以: nFrameType 取為& 00 30 
//30表示 0011(nVideosystem,nKeyframe,nFrameType:2) 
0000(nchB)


=============================================

//fltk, iss 使用
typedef struct Image_Header_V2 {
    unsigned int  nStartCode;        //FFFFFFAA
    /*time_t*/ unsigned int  tSec;   //時間 unsigned int for 64-bit issue
    //unsigned long long tSec;     //時間 unsigned int for 64-bit issue
    unsigned int    tuSec;
    unsigned int    nLen;            //Frame 的資料長度
    unsigned int    nRec_ch;         //
    unsigned short  nChA;            //Channel number
    unsigned short  nChB:4;          // For Video:Reaolution, For Audio:Audio Type
    unsigned short  nFrameType:2;    // 0: MPEG4 , 1: H264 , 2: ALL_AUDIO , 3: MJPEG
    unsigned short  nKeyframe:1;     // 0: P-Frame , 1: I-Frame
    unsigned short  nVideosystem:1;  // 0: NTSC , 1: PAL
    
    unsigned short  Capture:1;       // 0: Analog , 1: IPCAM
    unsigned short  nRes:1;          // 
    unsigned short  field:2;         //
    unsigned short  Reserver:4;
    
} Image_Header_V2;


============以下為NVR Fisheye=============

*uctype=39


size:240 bytes.


typedef struct FisheyeInfo
{
    unsigned int u32Chnn;                                   0
    int u32Mount;                                           4
    int u32Display;                                         8
    int u32Speed;                                           12
    int mainx1[FISHEYE_AREA_SIZE];                          16
    int mainy1[FISHEYE_AREA_SIZE];                          32
    int mainx2[FISHEYE_AREA_SIZE];                          48
    int mainy2[FISHEYE_AREA_SIZE];                          64
    int subx1[FISHEYE_AREA_SIZE];                           80
    int suby1[FISHEYE_AREA_SIZE];                           96
    int subx2[FISHEYE_AREA_SIZE];                           112
    int suby2[FISHEYE_AREA_SIZE];                           128
    int posx[FISHEYE_CHANNEL_SIZE][FISHEYE_AREA_SIZE];      144
    int posy[FISHEYE_CHANNEL_SIZE][FISHEYE_AREA_SIZE];      176
    int limit_x_min[FISHEYE_CHANNEL_SIZE];                  208
    int limit_x_max[FISHEYE_CHANNEL_SIZE];                  216
    int limit_y_min[FISHEYE_CHANNEL_SIZE];                  224
    int limit_y_max[FISHEYE_CHANNEL_SIZE];                  232

} FisheyeInfo;


====================以下為NVR人臉====================

*uctype=41: //face

同IPCAM 人臉

====================以下為IPCAM  AI====================

*uctype=