首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 視訊監控系列(3):客戶端連線服務端並預覽完整流程

     編輯:關於C#

本文詳述客戶端從環境準備、SDK 初始化、連線參數設定、啟動連線、畫面顯示到關閉連線的完整流程,並解析關鍵 API 呼叫順序與常見坑點。

前置準備

  1. 將 DS40xxSDK.dll、hikclient.dll、HikPlayM4.dll、HikServer.dll 複製至 System32 或專案輸出目錄。
  2. 先用官方 Net Client Demo 驗證伺服器 IP、連接埠、帳密、通道無誤。
  3. 建議安裝 VC++ 6.0 以便對照原始碼除錯(切換至 Win32 Debug 模式)。
  4. 備妥《Hikvision 板卡網絡開發包編程手冊 V4.7.pdf》查閱 API 細節。

核心流程與程式碼

1. SDK 初始化(Form Load)


PcHikClient.MP4_ClientSetNetPort(5050, 6050); // 伺服器/客戶端埠號
PcHikClient.MP4_ClientStartup(PcHikClient.WM_USER + 1, this.Handle);

2. 連線參數設定與啟動


int cs; // 連線代碼,全域保存供後續使用

private void btnConnect_Click(object sender, EventArgs e)
{
    CLIENT_VIDEOINFO info = new CLIENT_VIDEOINFO
    {
        m_bRemoteChannel = 0,           // 伺服端通道號
        m_bSendMode = (byte)SEND_MODE.TCPMODE, // TCP 模式
        m_sIPAddress = "192.168.0.188", // 伺服端 IP
        m_hShowVideo = pVideo.Handle,   // 顯示區域
        m_nImgFormat = 0,               // 主碼流
        m_sUserName = "123",            // 帳號
        m_sUserPassword = "w",          // 密碼
        m_bUserCheck = true             // 啟用驗證
    };

    PcHikClient.MP4_ClientSetTTL(64);
    cs = PcHikClient.MP4_ClientStart(ref info, new ReadDataCallBack(MyRealDataCallBack));

    if (cs == -1)
        MessageBox.Show("連線失敗!");
    else
    {
        // 設定緩衝與延遲(依網路情況調整)
        PcHikClient.MP4_ClientSetBufferNum(cs, 40);
        PcHikClient.MP4_ClientSetPlayDelay(cs, 580);
        // 註冊繪圖回調(可選,用於 OSD 疊加)
        PcHikClient.MP4_ClientRigisterDrawFun(cs, new DrawFun(DrawCallback), 0);
    }
}

private void MyRealDataCallBack(ulong port, byte[] buffer, ulong size)
{
    // 若需自行處理碼流可在這裡實作
}

3. 畫面顯示模式

  • NORMALMODE:多視窗同時顯示,需顯卡支援 Overlay。
  • OVERLAYMODE:單視窗透明色疊加,相容性較好。

本範例使用 TCP 模式 + NORMALMODE,以 Panel 控制項作為顯示區域(pVideo.Handle)。

4. 關閉連線


private void CloseConnection()
{
    PcHikClient.MP4_ClientStop(cs);
    PcHikClient.MP4_ClientStopCapture(cs);
    pVideo.Invalidate(true); // 重繪清空畫面
}

// 表單關閉時務必呼叫
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    CloseConnection();
    PcHikClient.MP4_ClientCleanup();
}

關鍵注意事項

  1. 連線代碼 cs 必須保存:MP4_ClientStart 回傳值,後續所有操作(停止、錄影、音訊、截圖)都需要它。
  2. 顯卡需支援 Overlay:主流 NVIDIA/ATI/Intel 整合顯晶片均支援;不支援會導致畫面全黑或異常。
  3. VC++ 型別對應:HWND → IntPtr,LONG → int,指標 → IntPtr。
  4. 回調委派:ReadDataCallBack、DrawFun 等需聲明為成員變數防 GC。

效能參考

  • PIII 833MHz:軟解 4 路即時畫面。
  • PIV 2GHz:軟解 8~9 路。
  • 搭配硬解碼卡:最多 24 路 + TV Wall 輸出。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved