視頻監控開發(1)——螢石雲硬盤錄像機SDK使用

大約十年前用過海康的硬盤錄像機和SDK進行過二次開發,多年不用了,現在市場變化很大。近幾年網絡攝像頭大量出現,如海爾、小米等品牌。相比早期海康、大華的監控攝像頭,這些網絡攝像頭使用簡單、方便,不需要單獨的錄像機,可通過手機遠程觀看和雲臺控制。但他們沒有提供開發包,想要二次開發的用戶還是要選擇海康和大華。他們也推出了支持網絡的錄像機和攝像頭。如海康有支持螢石雲的錄像機,支持普通模擬輸入、網絡輸入攝像頭,可通過手機或電腦觀看。還有支持網絡和雲臺的螢石攝像頭,支持智能跟蹤和聽聲辨位,可通過手機遠程觀看和雲臺控制。大華有支持網絡和雲臺的樂橙攝像頭。
我們以海康錄像機NVR DS-7804爲例,接入模擬攝像頭進行開發。主要包括以下內容:

1.硬件準備

先安裝錄像機硬盤,若不安裝,錄像機會一直報警。然後將攝像頭與錄像機連接,並連接攝像頭和錄像機電源。接上錄像機電源後,錄像機會自動開機,開機過程可設置用戶密碼,該密碼在使用錄像機SDK時需要使用。該錄像機默認支持4路模擬輸入和1路網絡輸入,可設置將其中的模擬輸入改爲網絡輸入。網絡輸入需要將攝像頭接入和錄像機所在路由。設置完畢後應該可以看到攝像頭輸出的視頻。
錄像機連接網絡。錄像機只有一個網口,用於連接路由器。若要通過手機觀看,需安裝螢石雲app,註冊登錄,並通過掃描硬盤錄像機的二維碼(錄像機開機設置界面)添加錄像機。爲便於使用SDK,在錄像機網絡連接正常時,需記錄錄像機IP地址(與電腦在同一網段,可在錄像機視頻播放主界面通過點擊鼠標右鍵彈出的主菜單查看)。用於調試程序的電腦也要通過有線接入該路由器。注意是有線接入。若用無線接入,即使接入同一個路由器,IP地址也與錄像機不在同一網段,導致程序的錄像機登錄功能失敗。

2.軟件準備

這裏使用的是Visual Studio 2015,SDK從海康官網下載。下載的文件名爲CH-HCNetSDK(Windows32)V5.3.2.15_build20171122.zip,解壓後打開子文件夾Demo示例,可以看到有MFC、C#、Java三種語言的示例。這裏以實時預覽&抓圖&雲臺控制爲例進行配置。

3.程序調試

海康給的示例使用Visual Studio 2013開發,本機只有Visual Studio 2015,因此使用Visual Studio 2015進行調試。打開sln文件時會提示升級,升級後進行調試,會出現錯誤提示,

“/ZI”和“/Gy-”命令行選項不兼容

可通過如下設置解決。進入“項目”—>“屬性”—>“C/C++”—>“常規”—>“調試信息格式”—>選擇“程序數據庫(/Zi)”或“無”。
另外還需添加頭文件路徑和庫文件路徑,即CH-HCNetSDK(Windows32)V5.3.2.15_build20171122文件夾中的子文件夾“頭文件”和“庫文件”,並將庫文件添加至項目中。方法如下:

  添加頭文件目錄:
  項目-->屬性-->C/C++-->常規-->附加包含目錄, 編輯爲頭文件存放目錄。
  添加lib文件:
  項目-->屬性-->鏈接器-->輸入-->附加依賴項,填入庫名(HCNetSDK.lib)。
  否則編譯時會提示:fatal error LNK1104: 無法打開文件“×××.lib”。
  添加庫文件路徑:  
  項目-->屬性-->鏈接器-->常規-->附加目錄 ,編輯庫文件所在的路徑即可。
  添加庫文件到工程中(不是必須):
  在解決方案資源管理器視圖中,右鍵點擊項目—>添加—>現有項,選擇庫文件,確定。

配置完成後,項目應該能生成可執行文件RealPlay.exe,點擊Login按鈕,若登陸成功,左側出現攝像頭列表,選擇其中一個,進行播放,如圖所示
視頻監控開發(1)——螢石雲硬盤錄像機SDK使用
登陸按鈕響應函數爲:

void CRealPlayDlg::OnButtonLogin() 
{   
    if(!m_bIsLogin)    //login
    {
        if(!DoLogin())
            return;
        DoGetDeviceResoureCfg();  //獲取設備資源信息    
        CreateDeviceTree();        //創建通道樹
        GetDecoderCfg();                           //獲取雲臺×××信息
        InitDecoderReferCtrl();         //初始化×××相關控件      
        GetDlgItem(IDC_BUTTON_LOGIN)->SetWindowText("Logout");
        m_bIsLogin = TRUE;      
    }
    else      //logout
    {           
        if(m_bIsPlaying|| m_bIsRecording)
        {
            MessageBox("Stop Play or record first!");
            return;
        }
        NET_DVR_Logout_V30(m_struDeviceInfo.lLoginID); 
        GetDlgItem(IDC_BUTTON_LOGIN)->SetWindowText("Login");
        m_ctrlTreeChan.DeleteAllItems();
        m_struDeviceInfo.lLoginID = -1;
        m_bIsLogin = FALSE;
    }
}

若登陸界面的用戶信息與初始化信息不符,會登錄失敗並提示錯誤。登陸界面的Dev IP爲前面記錄的錄像機IP,Password爲錄像機開機界面設置的用戶密碼。這兩個信息還需要在程序初始化過程設置。
錄像機IP在初始化函數中設置。

BOOL CRealPlayDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    // Add "About..." menu item to system menu.

    // IDM_ABOUTBOX must be in the system command range.
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);
    CMenu* pSysMenu = GetSystemMenu(FALSE); 
    // Set the icon for this dialog.  The framework does this automatically
    //  when the application's main window is not a dialog
    SetIcon(m_hIcon, TRUE);         // Set big icon
    SetIcon(m_hIcon, FALSE);        // Set small icon   
    // TODO: Add extra initialization here
    //默認IP
    m_ctrlDevIp.SetAddress(192,168,0,107);
    }

用戶密碼在對話框類構造函數中。

CRealPlayDlg::CRealPlayDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CRealPlayDlg::IDD, pParent)
{
    //{{AFX_DATA_INIT(CRealPlayDlg)
        // NOTE: the ClassWizard will add member initialization here
    //}}AFX_DATA_INIT
    // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
    m_nDevPort = 8000;
    m_csUser = _T("admin");
    m_csPWD = _T("114030ww");
    m_bIsLogin = FALSE;
    //m_lLoginID = -1;;
    m_bIsPlaying = FALSE;
    m_bIsRecording = FALSE;
    m_iCurChanIndex = -1;
    m_lPlayHandle = -1;
    m_bIsOnCruise = FALSE;
    m_bTrackRun = FALSE;
    m_bAutoOn = FALSE;
    m_bLightOn = FALSE;
    m_bWiperOn= FALSE;
    m_bFanOn= FALSE;
    m_bHeaterOn= FALSE;
    m_bAuxOn1= FALSE;
    m_bAuxOn2= FALSE;
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

登陸信息中的端口號8000和用戶名admin不需要修改。用戶名在錄像機開機設置時也無法修改。
完成上述工作後,該程序應該就可以正常運行了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章