Prechádzať zdrojové kódy

CctvCamCtrl - ffmpeg add zenosys protocol

HANTE 1 mesiac pred
rodič
commit
2df037e8f1

+ 226 - 97
CctvCamCtrl - ffmpeg/MAIN/FrmCctvCamCtrlF.cpp

@@ -605,90 +605,248 @@ void __fastcall TFrmCctvCamCtrl::IdHTTP1Authorization(TObject *Sender, TIdAuthen
 }
 //---------------------------------------------------------------------------
 
+void __fastcall TFrmCctvCamCtrl::IdHTTP2Authorization(TObject *Sender, TIdAuthentication *Authentication, bool &Handled)
+{
+    // For ZenoSys
+}
+//---------------------------------------------------------------------------
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+void __fastcall TFrmCctvCamCtrl::Ptz_BtnUpMouseDown(int command, String ptzSpeed)
+{
+    // not apply
+}
+//---------------------------------------------------------------------------
+void __fastcall TFrmCctvCamCtrl::Ptz_BtnUpMouseUp(int command, String ptzSpeed)
+{
+    // not apply
+}
+//---------------------------------------------------------------------------
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+void __fastcall TFrmCctvCamCtrl::Get_Request(String apiUrl)
+{
+    IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions >> hoInProcessAuth;
+    IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions << hoInProcessAuth;
+    String sResult = IdHTTP1->Get(apiUrl);
+    reMsg->Lines->Add(sResult.Trim());
+    IdHTTP1->Disconnect();
+}
+//---------------------------------------------------------------------------
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+void __fastcall TFrmCctvCamCtrl::Truen_BtnUpMouseDown(int command, String ptzSpeed)
+{
+    String sCmdHtml = "";
+    // URL ="/httpapx/SendPTZ?action=sendptz&PTZ_CHANNEL=" + ch + "&PTZ_MOVE=";
+    switch(command)
+    {
+    case  0: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=home,%s&PTZ_TIMEOUT=5000",      FStrmHttp.c_str(), ptzSpeed.c_str()); break;  // HOME
+    case  1: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=up,%s&PTZ_TIMEOUT=5000",        FStrmHttp.c_str(), ptzSpeed.c_str()); break;  // Tilt Up
+    case  2: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=down,%s&PTZ_TIMEOUT=5000",      FStrmHttp.c_str(), ptzSpeed.c_str()); break;  // Tilt Down
+    case  3: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=left,%s&PTZ_TIMEOUT=5000",      FStrmHttp.c_str(), ptzSpeed.c_str()); break;  // Pan left
+    case  4: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=right,%s&PTZ_TIMEOUT=5000",     FStrmHttp.c_str(), ptzSpeed.c_str()); break;  // Pan right
+    case  9: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=zoomin,%s&PTZ_TIMEOUT=5000",    FStrmHttp.c_str(), ptzSpeed.c_str()); break;  // Zoom In
+    case 10: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=zoomout,%s&PTZ_TIMEOUT=5000",   FStrmHttp.c_str(), ptzSpeed.c_str()); break;  // Zoom Out
+    case 12: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=focusnear,%s&PTZ_TIMEOUT=5000", FStrmHttp.c_str(), ptzSpeed.c_str()); break;  // Focus In
+    case 13: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=focusfar,%s&PTZ_TIMEOUT=5000",  FStrmHttp.c_str(), ptzSpeed.c_str()); break;  // Focus Out
+    default: return;
+    }
+
+    Get_Request(sCmdHtml);
+}
+//---------------------------------------------------------------------------
+void __fastcall TFrmCctvCamCtrl::Truen_BtnUpMouseUp(int command, String ptzSpeed)
+{
+    String sCmdHtml = "";
+    //        url ="/httpapx/SendPTZ?action=sendptz&PTZ_CHANNEL=" + ch + "&PTZ_MOVE=";
+    sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=stop,%s&PTZ_TIMEOUT=5000", FStrmHttp.c_str(), ptzSpeed.c_str());    // stop
+
+    Get_Request(sCmdHtml);
+}
+//---------------------------------------------------------------------------
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+void __fastcall TFrmCctvCamCtrl::Pelco_BtnUpMouseDown(int command, String ptzSpeed)
+{
+    // not apply
+}
+//---------------------------------------------------------------------------
+void __fastcall TFrmCctvCamCtrl::Pelco_BtnUpMouseUp(int command, String ptzSpeed)
+{
+    // not apply
+}
+//---------------------------------------------------------------------------
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+void __fastcall TFrmCctvCamCtrl::ZenoSys_BtnUpMouseDown(int command, String ptzSpeed)
+{
+    // command start
+    TBytes cmd;
+    cmd.Length = 8;
+    cmd[0] = 0x10;
+    cmd[1] = 0xFF;
+    cmd[2] = 0x01;
+    cmd[3] = 0x00;
+    cmd[4] = 0x08;
+    cmd[5] = 0x00;
+    cmd[6] = 0x28;
+    cmd[7] = 0x31;
+
+    switch(command)
+    {
+    case  0: return;  // HOME
+    case  1: cmd[4] = 0x08; break;  // Tilt Up
+    case  2: cmd[4] = 0x10; break;  // Tilt Down
+    case  3: cmd[4] = 0x04; break;  // Pan left
+    case  4: cmd[4] = 0x02; break;  // Pan right
+    case  9: cmd[0] = 0x50; cmd[3] = 0x00; cmd[4] = 0x20; cmd[6] = 0xFF; break;  // Zoom In
+    case 10: cmd[0] = 0x50; cmd[3] = 0x00; cmd[4] = 0x08; cmd[6] = 0xFF; break;  // Zoom Out
+    case 12: cmd[0] = 0x50; cmd[3] = 0x00; cmd[4] = 0x80; cmd[6] = 0xFF; break;  // Focus In
+    case 13: cmd[0] = 0x50; cmd[3] = 0x01; cmd[4] = 0x00; cmd[6] = 0xFF; break;  // Focus Out
+    default: return;
+    }
+
+    ZenoSys_Request(cmd);
+}
+//---------------------------------------------------------------------------
+void __fastcall TFrmCctvCamCtrl::ZenoSys_BtnUpMouseUp(int command, String ptzSpeed)
+{
+    // command stop
+    TBytes cmd;
+    cmd.Length = 8;
+    cmd[0] = 0x10;
+    cmd[1] = 0xFF;
+    cmd[2] = 0x01;
+    cmd[3] = 0x00;
+    cmd[4] = 0x00;
+    cmd[5] = 0x00;
+    cmd[6] = 0x00;
+    cmd[7] = 0x01;
+
+    switch(command)
+    {
+    case  0: return;  // HOME
+    case  1: // Tilt Up
+    case  2: // Tilt Down
+    case  3: // Pan left
+    case  4: // Pan right
+        break;
+    case  9: // Zoom In
+    case 10: // Zoom Out
+        cmd[0] = 0x50;
+        cmd[6] = 0xFF;
+        break;
+    case 12: // Focus In
+    case 13: // Focus Out
+        cmd[0] = 0x50;
+        cmd[4] = 0x08;
+        cmd[6] = 0xFF;
+        cmd[7] = 0x31;
+        break;
+    default: return;
+    }
+
+    ZenoSys_Request(cmd);
+}
+//---------------------------------------------------------------------------
+
+#include <IdCoderMIME.hpp>
+void __fastcall TFrmCctvCamCtrl::ZenoSys_Request(TBytes controlData)
+{
+    String apiUrl = "";
+    apiUrl.printf(L"%s/cgi-bin/admin/uartctrl.cgi", FStrmHttp.c_str());
+
+
+    TIdEncoderMIME* encoder = new TIdEncoderMIME(NULL);
+    TMemoryStream* requestStream = NULL;
+    TStringStream* responseStream = NULL;
+
+    try {
+        try {
+            AnsiString auth = encoder->EncodeString(FStrmUser + ":" + FStrmPswd);
+
+            IdHTTP2->Request->Clear();
+            IdHTTP2->ReadTimeout = 5000;
+            IdHTTP2->ConnectTimeout = 5000;
+            IdHTTP2->AllowCookies = false;
+
+            IdHTTP2->Request->CustomHeaders->Clear();
+            IdHTTP2->Request->CustomHeaders->Add("Authorization: Basic " + auth);
+            IdHTTP2->Request->CustomHeaders->Add("Accept-Encoding: identity");
+            //IdHTTP2->Request->CustomHeaders->Add("Content-Length: " + String(controlData.Length));
+
+            IdHTTP2->Request->BasicAuthentication = false;
+            IdHTTP2->Request->ContentType = "application/octet-stream";
+            IdHTTP2->Request->Accept      = "text/html, */*";
+            IdHTTP2->Request->UserAgent   = "Mozilla/3.0";
+
+            // 요청 데이터 준비
+            requestStream = new TMemoryStream();
+            requestStream->WriteBuffer(&controlData[0], controlData.Length);
+
+            // 응답 받을 스트림
+            responseStream = new TStringStream();
+
+            // POST 요청
+            IdHTTP2->Post(apiUrl, requestStream, responseStream);
+        }
+        catch (const Exception& e) {
+            reMsg->Lines->Add(e.Message.Trim());
+        }
+    }
+    __finally {
+        if (encoder != NULL) delete encoder;
+        if (requestStream != NULL) delete requestStream;
+        if (responseStream != NULL) delete responseStream;
+        IdHTTP2->Disconnect();
+    }
+
+#if 0
+    IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions >> hoInProcessAuth;
+    IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions << hoInProcessAuth;
+    String sResult = IdHTTP1->Get(sCmdHtml);
+    reMsg->Lines->Add(sResult.Trim());
+    IdHTTP1->Disconnect();
+#endif
+}
+//---------------------------------------------------------------------------
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
 void __fastcall TFrmCctvCamCtrl::BtnUpMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
 {
-    // PANControl
+    // PTZ Control Start
     if (!FStrmPlay) return;
     if (!FSelCtlr) return;
     if (FSelCtlr->CCTV_CTLR_IP.Trim() == "") return;
 
     String sPTZSpeed = String(PTZSpeed->Position);
+    TImageBtn *pBtn = (TImageBtn*)Sender;
     try
     {
-        String sCmdHtml = "";
-        TImageBtn *pBtn = (TImageBtn*)Sender;
-
-
         int cctvType = FSelCtlr->CCTV_TYPE.Trim().ToIntDef(0);
         switch(cctvType) {
         case 1: // 다기능 제어기
+            Ptz_BtnUpMouseDown(pBtn->Tag, sPTZSpeed);
             break;
         case 2: // Truen
-            // Truen
-            //        url ="/httpapx/SendPTZ?action=sendptz&PTZ_CHANNEL=" + ch + "&PTZ_MOVE=";
-            switch(pBtn->Tag)
-            {
-            case  0: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=home,%s&PTZ_TIMEOUT=5000",      FStrmHttp.c_str(), sPTZSpeed.c_str()); break;  // HOME
-            case  1: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=up,%s&PTZ_TIMEOUT=5000",        FStrmHttp.c_str(), sPTZSpeed.c_str()); break;  // Tilt Up
-            case  2: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=down,%s&PTZ_TIMEOUT=5000",      FStrmHttp.c_str(), sPTZSpeed.c_str()); break;  // Tilt Down
-            case  3: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=left,%s&PTZ_TIMEOUT=5000",      FStrmHttp.c_str(), sPTZSpeed.c_str()); break;  // Pan left
-            case  4: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=right,%s&PTZ_TIMEOUT=5000",     FStrmHttp.c_str(), sPTZSpeed.c_str()); break;  // Pan right
-            case  9: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=zoomin,%s&PTZ_TIMEOUT=5000",    FStrmHttp.c_str(), sPTZSpeed.c_str()); break;  // Zoom In
-            case 10: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=zoomout,%s&PTZ_TIMEOUT=5000",   FStrmHttp.c_str(), sPTZSpeed.c_str()); break;  // Zoom Out
-            case 12: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=focusnear,%s&PTZ_TIMEOUT=5000", FStrmHttp.c_str(), sPTZSpeed.c_str()); break;  // Focus In
-            case 13: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=focusfar,%s&PTZ_TIMEOUT=5000",  FStrmHttp.c_str(), sPTZSpeed.c_str()); break;  // Focus Out
-            default: return;
-            }
+             Truen_BtnUpMouseDown(pBtn->Tag, sPTZSpeed);
             break;
         case 3: //  Pelco
+            Pelco_BtnUpMouseDown(pBtn->Tag, sPTZSpeed);
             break;
         case 4: // 제노시스
+            ZenoSys_BtnUpMouseDown(pBtn->Tag, sPTZSpeed);
             break;
         default:
             break;
         }
-
-#if 0
-        if (FSelCtlr->CCTV_TYPE == 1) {
-            // 다기능제어기
-        }
-        else if (FSelCtlr->CCTV_TYPE == 2)
-        {
-            // Truen
-            //        url ="/httpapx/SendPTZ?action=sendptz&PTZ_CHANNEL=" + ch + "&PTZ_MOVE=";
-            switch(pBtn->Tag)
-            {
-            case  0: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=home,%s&PTZ_TIMEOUT=5000",      FStrmHttp.c_str(), sPTZSpeed.c_str()); break;  // HOME
-            case  1: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=up,%s&PTZ_TIMEOUT=5000",        FStrmHttp.c_str(), sPTZSpeed.c_str()); break;  // Tilt Up
-            case  2: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=down,%s&PTZ_TIMEOUT=5000",      FStrmHttp.c_str(), sPTZSpeed.c_str()); break;  // Tilt Down
-            case  3: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=left,%s&PTZ_TIMEOUT=5000",      FStrmHttp.c_str(), sPTZSpeed.c_str()); break;  // Pan left
-            case  4: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=right,%s&PTZ_TIMEOUT=5000",     FStrmHttp.c_str(), sPTZSpeed.c_str()); break;  // Pan right
-            case  9: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=zoomin,%s&PTZ_TIMEOUT=5000",    FStrmHttp.c_str(), sPTZSpeed.c_str()); break;  // Zoom In
-            case 10: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=zoomout,%s&PTZ_TIMEOUT=5000",   FStrmHttp.c_str(), sPTZSpeed.c_str()); break;  // Zoom Out
-            case 12: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=focusnear,%s&PTZ_TIMEOUT=5000", FStrmHttp.c_str(), sPTZSpeed.c_str()); break;  // Focus In
-            case 13: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=focusfar,%s&PTZ_TIMEOUT=5000",  FStrmHttp.c_str(), sPTZSpeed.c_str()); break;  // Focus Out
-            default: return;
-            }
-        }
-        else
-        if (FSelCtlr->CCTV_TYPE == 3)
-        {
-            // Pelco
-        }
-        else
-        if (FSelCtlr->CCTV_TYPE == 4)
-        {
-            // 제노시스
-        }
-#endif
-
-        if (sCmdHtml == "") return;
-
-        IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions >> hoInProcessAuth;
-        IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions << hoInProcessAuth;
-        String sResult = IdHTTP1->Get(sCmdHtml);
-        reMsg->Lines->Add(sResult.Trim());
-        IdHTTP1->Disconnect();
     }
     catch(...) {}
 }
@@ -696,62 +854,33 @@ void __fastcall TFrmCctvCamCtrl::BtnUpMouseDown(TObject *Sender, TMouseButton Bu
 
 void __fastcall TFrmCctvCamCtrl::BtnUpMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
 {
-    // PANControl Stop
+    // PTZ Control Stop
     if (!FStrmPlay) return;
     if (!FSelCtlr) return;
     if (FSelCtlr->CCTV_CTLR_IP.Trim() == "") return;
 
     String sPTZSpeed = String(PTZSpeed->Position);
+    TImageBtn *pBtn = (TImageBtn*)Sender;
     try
     {
-        String sCmdHtml = "";
-        TImageBtn *pBtn = (TImageBtn*)Sender;
-
         int cctvType = FSelCtlr->CCTV_TYPE.Trim().ToIntDef(0);
         switch(cctvType) {
         case 1: // 다기능 제어기
+            Ptz_BtnUpMouseUp(pBtn->Tag, sPTZSpeed);
             break;
         case 2: // Truen
             // Truen
-            //        url ="/httpapx/SendPTZ?action=sendptz&PTZ_CHANNEL=" + ch + "&PTZ_MOVE=";
-            sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=stop,%s&PTZ_TIMEOUT=5000", FStrmHttp.c_str(), sPTZSpeed.c_str());    // stop
+            Truen_BtnUpMouseUp(pBtn->Tag, sPTZSpeed);
             break;
         case 3: //  Pelco
+            Pelco_BtnUpMouseUp(pBtn->Tag, sPTZSpeed);
             break;
         case 4: // 제노시스
+            ZenoSys_BtnUpMouseUp(pBtn->Tag, sPTZSpeed);
             break;
         default:
             break;
         }
-
-#if 0
-        if (FSelCtlr->CCTV_TYPE == 1) {
-            // 다기능제어기
-        }
-        else if (FSelCtlr->CCTV_TYPE == 2)
-        {
-            // Truen
-            sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=stop,%s&PTZ_TIMEOUT=5000", FStrmHttp.c_str(), sPTZSpeed.c_str());    // stop
-        }
-        else
-        if (FSelCtlr->CCTV_TYPE == 3)
-        {
-            // Pelco
-        }
-        else
-        if (FSelCtlr->CCTV_TYPE == 4)
-        {
-            // 제노시스
-        }
-#endif
-
-        if (sCmdHtml == "") return;
-
-        IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions >> hoInProcessAuth;
-        IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions << hoInProcessAuth;
-        String sResult = IdHTTP1->Get(sCmdHtml);
-        reMsg->Lines->Add(sResult.Trim());
-        IdHTTP1->Disconnect();
     }
     catch(...) {}
 }

+ 19 - 6
CctvCamCtrl - ffmpeg/MAIN/FrmCctvCamCtrlF.dfm

@@ -10865,8 +10865,8 @@ object FrmCctvCamCtrl: TFrmCctvCamCtrl
     Enabled = False
     Interval = 500
     OnTimer = TmrShowTimer
-    Left = 556
-    Top = 92
+    Left = 580
+    Top = 164
   end
   object ImageList1: TImageList
     DrawingStyle = dsTransparent
@@ -11028,8 +11028,8 @@ object FrmCctvCamCtrl: TFrmCctvCamCtrl
   object dxSkinController1: TdxSkinController
     NativeStyle = False
     SkinName = 'Blue'
-    Left = 388
-    Top = 196
+    Left = 604
+    Top = 228
   end
   object ApplicationEvents1: TApplicationEvents
     Left = 144
@@ -11039,8 +11039,8 @@ object FrmCctvCamCtrl: TFrmCctvCamCtrl
     Enabled = False
     Interval = 60000
     OnTimer = TmrRefreshTimer
-    Left = 492
-    Top = 308
+    Left = 660
+    Top = 300
   end
   object IdHTTP1: TIdHTTP
     AllowCookies = False
@@ -11055,4 +11055,17 @@ object FrmCctvCamCtrl: TFrmCctvCamCtrl
     Left = 664
     Top = 64
   end
+  object IdHTTP2: TIdHTTP
+    AllowCookies = False
+    ProxyParams.BasicAuthentication = False
+    ProxyParams.ProxyPort = 0
+    Request.ContentLength = -1
+    Request.Accept = 'text/html, */*'
+    Request.BasicAuthentication = False
+    Request.UserAgent = 'Mozilla/3.0 (compatible; Indy Library)'
+    HTTPOptions = [hoForceEncodeParams]
+    OnAuthorization = IdHTTP2Authorization
+    Left = 792
+    Top = 64
+  end
 end

+ 17 - 0
CctvCamCtrl - ffmpeg/MAIN/FrmCctvCamCtrlF.h

@@ -151,6 +151,7 @@ __published:	// IDE-managed Components
     TcxMaskEdit *EdCtlrIp;
     TcxSpinEdit *Se_CCTV_CTLR_PORT;
     TcxTextEdit *EdTypeNm;
+    TIdHTTP *IdHTTP2;
     void __fastcall FormShow(TObject *Sender);
     void __fastcall TmrShowTimer(TObject *Sender);
     void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
@@ -171,6 +172,7 @@ __published:	// IDE-managed Components
     void __fastcall EdPresetNameKeyPress(TObject *Sender, wchar_t &Key);
     void __fastcall FRAMECctvStateList1TvList2CellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
           TMouseButton AButton, TShiftState AShift, bool &AHandled);
+    void __fastcall IdHTTP2Authorization(TObject *Sender, TIdAuthentication *Authentication, bool &Handled);
 
 private:	// User declarations
     void __fastcall CommClose();
@@ -215,6 +217,21 @@ public:		// User declarations
 
     void __fastcall OnMainFormMessage(TMessage &Msg);
     void __fastcall OnCctvStateRefreshMessage(TMessage &Msg);
+
+    void __fastcall Ptz_BtnUpMouseDown(int command, String ptzSpeed);
+    void __fastcall Ptz_BtnUpMouseUp(int command, String ptzSpeed);
+
+    void __fastcall Truen_BtnUpMouseDown(int command, String ptzSpeed);
+    void __fastcall Truen_BtnUpMouseUp(int command, String ptzSpeed);
+
+    void __fastcall Pelco_BtnUpMouseDown(int command, String ptzSpeed);
+    void __fastcall Pelco_BtnUpMouseUp(int command, String ptzSpeed);
+
+    void __fastcall ZenoSys_BtnUpMouseDown(int command, String ptzSpeed);
+    void __fastcall ZenoSys_BtnUpMouseUp(int command, String ptzSpeed);
+    void __fastcall ZenoSys_Request(TBytes controlData);
+    void __fastcall Get_Request(String apiUrl);
+
 	BEGIN_MESSAGE_MAP
         MESSAGE_HANDLER(WM_MAINFORM,          TMessage, OnMainFormMessage)
         MESSAGE_HANDLER(WM_VMS_STATE_REFRESH, TMessage, OnCctvStateRefreshMessage)