本文詳述客戶端從環境準備、SDK 初始化、連線參數設定、啟動連線、畫面顯示到關閉連線的完整流程,並解析關鍵 API 呼叫順序與常見坑點。
DS40xxSDK.dll、hikclient.dll、HikPlayM4.dll、HikServer.dll 複製至 System32 或專案輸出目錄。Net Client Demo 驗證伺服器 IP、連接埠、帳密、通道無誤。
PcHikClient.MP4_ClientSetNetPort(5050, 6050); // 伺服器/客戶端埠號
PcHikClient.MP4_ClientStartup(PcHikClient.WM_USER + 1, this.Handle);
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)
{
// 若需自行處理碼流可在這裡實作
}
NORMALMODE:多視窗同時顯示,需顯卡支援 Overlay。OVERLAYMODE:單視窗透明色疊加,相容性較好。本範例使用 TCP 模式 + NORMALMODE,以 Panel 控制項作為顯示區域(pVideo.Handle)。
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();
}
cs 必須保存:MP4_ClientStart 回傳值,後續所有操作(停止、錄影、音訊、截圖)都需要它。HWND → IntPtr,LONG → int,指標 → IntPtr。ReadDataCallBack、DrawFun 等需聲明為成員變數防 GC。