首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 調用海康威視 SDK 實現預覽畫面疊加繪製的正確姿勢

     編輯:程式設計綜合問答

問題

調用 NET_DVR_RigisterDrawFun 註冊繪製回調 DrawFunCallBack,但回調從未進入。

原因

NET_DVR_RealPlay_V30 的回調參數傳入了 RealDataCallBack,SDK 內部可能優先使用該回調處理視頻幀,導致繪製回調不被觸發。

修正

// 1. 打開預覽時回調傳 null
IntPtr pUser = IntPtr.Zero;
m_fRealData = null; // 不設置碼流回調
m_lRealHandle = CHCNetSDK.NET_DVR_RealPlay_V40(m_lUserID, ref lpPreviewInfo, null, pUser);

// 2. 單獨註冊繪製回調
m_drawFun = new CHCNetSDK.DRAWFUN(DrawFunCallBack);
CHCNetSDK.NET_DVR_RigisterDrawFun(m_lRealHandle, m_drawFun, 0);

回調實現

private void DrawFunCallBack(int lRealHandle, IntPtr hDc, uint pUser) {
    using (Graphics g = Graphics.FromHdc(hDc)) {
        using (Pen pen = new Pen(Color.Red, 2)) {
            g.DrawString("OSD 文字", new Font("微軟雅黑", 12), Brushes.White, 10, 10);
            g.DrawRectangle(pen, 100, 100, 200, 150);
        }
    }
}

注意

  • 繪製回調在 SDK 內部渲染線程調用,**不可執行耗時操作**,僅做 GDI 繪製。
  • 若需碼流數據,另開線程 PlayM4_GetPort + PlayM4_InputData 解碼顯示。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved