調用 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);
}
}
}
PlayM4_GetPort + PlayM4_InputData 解碼顯示。