IP Cam Monitor

Futures:

  1. Connected to the IPCam or Webcam Service
  2. Support zoom in and zoom out

ipcam

ipcam2

//---------------------------------------------------------------------------

#include <vcl.h>
#include <windows.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <urlmon.h>
#include <winsock2.h>
#include <jpeg.hpp>
#pragma hdrstop

#include "main.h"
#include "ImageDlg.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SHDocVw_OCX"
#pragma resource "*.dfm"
TForm1 *Form1;

TInitCommonControlsEx ICC;
HWND hIpEdit_ServerIP,hIpEdit_CamIP;
int nServerIP,nCamIP;
AnsiString     ServerIP,CamIP;
char NewServerIPStr[64],NewCamIPStr[64];

bool isLogin = false;
bool isOpen[5] = {false};

//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    ICC.dwSize = sizeof(TInitCommonControlsEx);
    ICC.dwICC = ICC_INTERNET_CLASSES;
    if(!InitCommonControlsEx(&ICC))
        return;

    hIpEdit_ServerIP =CreateWindow(WC_IPADDRESS,NULL,WS_CHILD|WS_VISIBLE,95,13,140,20,Panel_Network->Handle,0,HInstance,NULL);
    nServerIP=ntohl(inet_addr("homeip"));
    SendMessage(hIpEdit_ServerIP,IPM_SETADDRESS,0,nServerIP);

    hIpEdit_CamIP =CreateWindow(WC_IPADDRESS,NULL,WS_CHILD|WS_VISIBLE,95,13,140,20,Panel_IPCam->Handle,0,HInstance,NULL);
    nCamIP=ntohl(inet_addr("homeip"));
    SendMessage(hIpEdit_CamIP,IPM_SETADDRESS,0,nCamIP);

    InitialImage(Image_Home_CH1);
    InitialImage(Image_Home_CH2);
    InitialImage(Image_Home_CH3);
    InitialImage(Image_Home_CH4);
    InitialImage(Image_Display);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::InitialImage(TImage *img)
{
    img->Canvas->Brush->Color = clBlack;
    img->Canvas->Rectangle(0,0,200,200);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn_LoginClick(TObject *Sender)
{
    BYTE FIRST_IPADDRESS,SECOND_IPADDRESS,THIRD_IPADDRESS,FOURTH_IPADDRESS;
    IPAddr NewIP;

    NewServerIPStr[0] = '\0';
    SendMessage(hIpEdit_ServerIP, IPM_GETADDRESS, 0, (LPARAM) & FIRST_IPADDRESS);
    SendMessage(hIpEdit_ServerIP, IPM_GETADDRESS, 0, (LPARAM) & SECOND_IPADDRESS);
    SendMessage(hIpEdit_ServerIP, IPM_GETADDRESS, 0, (LPARAM) & THIRD_IPADDRESS);
    SendMessage(hIpEdit_ServerIP, IPM_GETADDRESS, 0, (LPARAM) & FOURTH_IPADDRESS);
    ServerIP=AnsiString((FIRST_IPADDRESS))+"."+BYTE(SECOND_IPADDRESS)+"."+BYTE(THIRD_IPADDRESS)+"."+BYTE(FOURTH_IPADDRESS);
    strcpy(NewServerIPStr, ServerIP.c_str());


    NewCamIPStr[0] = '\0';
    SendMessage(hIpEdit_CamIP, IPM_GETADDRESS, 0, (LPARAM) & FIRST_IPADDRESS);
    SendMessage(hIpEdit_CamIP, IPM_GETADDRESS, 0, (LPARAM) & SECOND_IPADDRESS);
    SendMessage(hIpEdit_CamIP, IPM_GETADDRESS, 0, (LPARAM) & THIRD_IPADDRESS);
    SendMessage(hIpEdit_CamIP, IPM_GETADDRESS, 0, (LPARAM) & FOURTH_IPADDRESS);
    CamIP=AnsiString((FIRST_IPADDRESS))+"."+BYTE(SECOND_IPADDRESS)+"."+BYTE(THIRD_IPADDRESS)+"."+BYTE(FOURTH_IPADDRESS);
    strcpy(NewCamIPStr, CamIP.c_str());

    if(CB_Home->Checked)
    {
        TMemoryStream *ms=new TMemoryStream;
        TJPEGImage *jpg=new TJPEGImage;
        if(!isLogin)
        {
            IdHTTP_IPCam->Request->Username = Edit_Username->Text;
            IdHTTP_IPCam->Request->Password = Edit_Password->Text;
            IdHTTP_IPCam->Request->BasicAuthentication = true;
            try
            {
                Application->ProcessMessages();
                IdHTTP_IPCam->Get("http://homeip:9999/cam_1.jpg", ms);
                ms->Position=0;
                jpg->LoadFromStream(ms);
                Image_Display->Stretch=true;
                Image_Display->Picture->Assign(jpg);
                isLogin = true;
                delete ms;
                delete jpg;
            }
            catch(...)
            {
                ShowMessage("Invalid ID or password!");
            }
        }
        else
        {
            try
            {
                Application->ProcessMessages();
                IdHTTP_IPCam->Get("http://homeip:9999/cam_1.jpg", ms);
                ms->Position=0;
                jpg->LoadFromStream(ms);
                Image_Display->Stretch=true;
                Image_Display->Picture->Assign(jpg);
                delete ms;
                delete jpg;
            }
            catch(...)
            {
                isLogin = false;
            }
        }
    }

    if(CB_CH1->Checked)
        GetHomeDVR(1,Image_Home_CH1);
    if(CB_CH2->Checked)
        GetHomeDVR(2,Image_Home_CH2);
    if(CB_CH3->Checked)
        GetHomeDVR(3,Image_Home_CH3);
    if(CB_CH4->Checked)
        GetHomeDVR(4,Image_Home_CH4);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::GetHomeDVR(int Channel, TImage *img)
{
    TMemoryStream *ms_ch1=new TMemoryStream;
    TJPEGImage *jpg_ch1=new TJPEGImage;

    IdHTTP_Home_CH->Request->Username = "xxx";
    IdHTTP_Home_CH->Request->Password = "xxxxxx";
    IdHTTP_Home_CH->Request->BasicAuthentication = true;
    Application->ProcessMessages();
    try
    {
        Application->ProcessMessages();
        IdHTTP_Home_CH->Get("http://homeip:8888/snapshot_m.html?ch="+IntToStr(Channel-1), ms_ch1);
        ms_ch1->Position=0;
        jpg_ch1->LoadFromStream(ms_ch1);
        img->Stretch=true;
        img->Picture->Assign(jpg_ch1);

        delete ms_ch1;
        delete jpg_ch1;
    }
    catch(...)
    {
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CppWebBrowser_MainDocumentComplete(TObject *ASender, const IDispatch *pDisp,
                                     OleVariant &URL)
{
    if (FAILED(URLDownloadToFile(NULL, "http://homeip:9999/cam_1.jpg","c:\\tmp.jpg", 0, NULL)))
    {;}
    else
    {
        Image_Display->Picture->LoadFromFile("c:\\tmp.jpg");
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton_IPCamClick(TObject *Sender)
{
    if(RadioButton_IPCam->Checked)
    {
        Panel_IPCam->Enabled = true;
        Panel_Network->Enabled = false;
    }
    else if(RadioButton_Server->Checked)
             {
        Panel_IPCam->Enabled = false;
        Panel_Network->Enabled = true;
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton_ServerClick(TObject *Sender)
{
    if(RadioButton_IPCam->Checked)
    {
        Panel_IPCam->Enabled = true;
        Panel_Network->Enabled = false;
    }
    else if(RadioButton_Server->Checked)
             {
        Panel_IPCam->Enabled = false;
        Panel_Network->Enabled = true;
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    if(ComboBox_Resolution->Text == "640x480")
    {
        Image_Display->Height = 480;
        Image_Display->Width = 640;
    }
    else if(ComboBox_Resolution->Text == "320x240")
    {
        Image_Display->Height = 240;
        Image_Display->Width = 320;
    }
    else if(ComboBox_Resolution->Text == "176x144")
    {
        Image_Display->Height = 144;
        Image_Display->Width = 176;
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn_RefreshClick(TObject *Sender)
{
    Timer_Refresh->Enabled = true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer_RefreshTimer(TObject *Sender)
{
    if(CB_CH1->Checked)
    {
        CB_CH1->Caption = "Connected";
        Timer_Refresh->Enabled = false;
        GetHomeDVR(1,Image_Home_CH1);
        Timer_Refresh->Enabled = true;
    }
    else if(!CB_CH1->Checked)
    {
        CB_CH1->Caption = "Disconnected";
        Image_Home_CH1->Picture = Image_Black->Picture;
    }


    if(CB_CH2->Checked)
    {
        CB_CH2->Caption = "Connected";
        Timer_Refresh->Enabled = false;
        GetHomeDVR(2,Image_Home_CH2);
        Timer_Refresh->Enabled = true;
    }
    else if(!CB_CH2->Checked)
    {
        CB_CH2->Caption = "Disconnected";
        Image_Home_CH2->Picture = Image_Black->Picture;
    }

    if(CB_CH3->Checked)
    {
        CB_CH3->Caption = "Connected";
        Timer_Refresh->Enabled = false;
        GetHomeDVR(3,Image_Home_CH3);
        Timer_Refresh->Enabled = true;
    }
    else if(!CB_CH3->Checked)
    {
        CB_CH3->Caption = "Disconnected";
        Image_Home_CH3->Picture = Image_Black->Picture;
    }

    if(CB_CH4->Checked)
    {
        CB_CH4->Caption = "Connected";
        Timer_Refresh->Enabled = false;
        GetHomeDVR(4,Image_Home_CH4);
        Timer_Refresh->Enabled = true;
    }
    else if(!CB_CH4->Checked)
    {
        CB_CH4->Caption = "Disconnected";
        Image_Home_CH4->Picture = Image_Black->Picture;
    }

    if(CB_Home->Checked)
    {
        CB_Home->Caption = "Connected";
        Timer_Refresh->Enabled = false;
        TMemoryStream *ms=new TMemoryStream;
        TJPEGImage *jpg=new TJPEGImage;
        IdHTTP_IPCam->Request->Username = Edit_Username->Text;
        IdHTTP_IPCam->Request->Password = Edit_Password->Text;
        IdHTTP_IPCam->Request->BasicAuthentication = true;
        try
        {
            Application->ProcessMessages();
            IdHTTP_IPCam->Get("http://homeip:9999/cam_1.jpg", ms);
            ms->Position=0;
            jpg->LoadFromStream(ms);
            Image_Display->Stretch=true;
            Image_Display->Picture->Assign(jpg);
            isLogin = true;
            delete ms;
            delete jpg;
        }
        catch(...)
        {
            ShowMessage("Invalid ID or password!");
        }
        Timer_Refresh->Enabled = true;
    }
    else if(!CB_Home->Checked)
    {
        CB_Home->Caption = "Disconnected";
        Image_Display->Picture = Image_Black->Picture;
    }
}
//---------------------------------------------------------------------------

 

Leave a Reply