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;




沒有留言:

張貼留言