c#-C# 调用海康SDK 预览画面叠加字符和图像(NET_DVR_RigisterDrawFun)问题

问题描述

C# 调用海康SDK 预览画面叠加字符和图像(NET_DVR_RigisterDrawFun)问题

无法进入回调函数DrawFunCallBack,

        public void RealDataCallBack(Int32 lRealHandle, UInt32 dwDataType, ref byte pBuffer, UInt32 dwBufSize, IntPtr pUser)
        {
            //MyDebugInfo AlarmInfo = new MyDebugInfo(DebugInfo);
            switch (dwDataType)
            {
                case CHCNetSDK.NET_DVR_SYSHEAD:     // sys head
                    if (!PlayCtrl.PlayM4_GetPort(ref m_lPort))
                    {
                        MessageBox.Show("Get Port Fail");
                    }

                    if (dwBufSize > 0)
                    {
                        //set as stream mode, real-time stream under preview
                        if (!PlayCtrl.PlayM4_SetStreamOpenMode(m_lPort, PlayCtrl.STREAME_REALTIME))
                        {
                            //this.BeginInvoke(AlarmInfo, "PlayM4_SetStreamOpenMode fail");
                        }

                        //start player
                        if (!PlayCtrl.PlayM4_OpenStream(m_lPort, ref pBuffer, dwBufSize, 1024 * 1024))
                        {
                            m_lPort = -1;
                            //this.BeginInvoke(AlarmInfo, "PlayM4_OpenStream fail");
                            break;
                        }

                        //set soft decode display callback function to capture
                        m_fDisplayFun = new PlayCtrl.DISPLAYCBFUN(RemoteDisplayCBFun);
                        if (!PlayCtrl.PlayM4_SetDisplayCallBack(m_lPort, m_fDisplayFun))
                        {
                            //this.BeginInvoke(AlarmInfo, "PlayM4_SetDisplayCallBack fail");
                        }

                        //start play, set play window
                        //this.BeginInvoke(AlarmInfo, "About to call PlayM4_Play");

                        if (!PlayCtrl.PlayM4_Play(m_lPort, m_ptrRealHandle))
                        {
                            m_lPort = -1;
                            //this.BeginInvoke(AlarmInfo, "PlayM4_Play fail");
                            break;
                        }

                        //set frame buffer number

                        if (!PlayCtrl.PlayM4_SetDisplayBuf(m_lPort, 15))
                        {
                            //this.BeginInvoke(AlarmInfo, "PlayM4_SetDisplayBuf fail");
                        }

                        //set display mode
                        if (!PlayCtrl.PlayM4_SetOverlayMode(m_lPort, 0, 0/* COLORREF(0)*/))//play off screen // todo!!!
                        {
                            //this.BeginInvoke(AlarmInfo, " PlayM4_SetOverlayMode fail");
                        }

                    }

                    break;
                case CHCNetSDK.NET_DVR_STREAMDATA:     // video stream data
                    if (dwBufSize > 0 && m_lPort != -1)
                    {
                        if (!PlayCtrl.PlayM4_InputData(m_lPort, ref pBuffer, dwBufSize))
                        {
                            //this.BeginInvoke(AlarmInfo, " PlayM4_InputData fail");
                        }
                    }
                    break;

                case CHCNetSDK.NET_DVR_AUDIOSTREAMDATA:     //  Audio Stream Data
                    if (dwBufSize > 0 && m_lPort != -1)
                    {
                        if (!PlayCtrl.PlayM4_InputVideoData(m_lPort, ref pBuffer, dwBufSize))
                        {
                            //this.BeginInvoke(AlarmInfo, "PlayM4_InputVideoData Fail");
                        }
                    }

                    break;
                default:
                    break;
            }

        }

         public void DrawFunCallBack(Int32 lRealHandle, IntPtr hDc, uint pUser)
        {
            Graphics g = Graphics.FromHdc(hDc);
            Pen m_pen = new Pen(Color.Blue, 1);
            //设置虚线格式
            m_pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
            g.DrawRectangle(m_pen, Convert.ToInt32(PicX * PicCurrent.Width), Convert.ToInt32(startPoint.Y * PicCurrent.Width), Convert.ToInt32(PicW * PicCurrent.Width), Convert.ToInt32(PicH * PicCurrent.Height));
        }

 private void D()
 {
                    if (m_lRealHandle != -1)
            {
                uint dwUser = 0;
                m_drawFun = new CHCNetSDK.DRAWFUN(DrawFunCallBack);
                CHCNetSDK.NET_DVR_RigisterDrawFun(m_lRealHandle, m_drawFun, dwUser);
            }
}

                        //调用预览
                        lpClientInfo.hPlayWnd = IntPtr.Zero;
                        //lpClientInfo.sMultiCastIP = "";
                        m_ptrRealHandle = PicCurrent.Handle;
                        m_fRealData = new CHCNetSDK.REALDATACALLBACK(RealDataCallBack);
                        m_lRealHandle = CHCNetSDK.NET_DVR_RealPlay_V30(m_lUserID, ref lpClientInfo, m_fRealData, pUser, 1);

                                                //之后调用D()
                                                D()

解决方案

打开预览时的函数传入的参数中,回调函数应该设置为null,
m_lRealHandle = CHCNetSDK.NET_DVR_RealPlay_V40(m_lUserID, ref lpPreviewInfo, null/*RealData*/, pUser);
m_drawFun = new CHCNetSDK.DRAWFUN(DrawFunCallBack);

解决方案二:

无法进入回调函数DrawFunCallBack提示什么错误?

解决方案三:

应该是你的回调函数没有设置正确给sdk,所以反过来sdk没有调用你的callback

时间: 2024-11-02 12:11:16

c#-C# 调用海康SDK 预览画面叠加字符和图像(NET_DVR_RigisterDrawFun)问题的相关文章

JAVA WEB项目集成海康SDK

问题描述 JAVA WEB项目集成海康SDK JAVA WEB项目中如何在JSP页面中回放.下载远程服务器上的海康的历史监控视频?哪位大侠有做过啊,最好能直接通过JS调用相关插件的方法就可以实现的,如果有示例代码就最好了,或者有已封装好的SDK也可以.跪谢.....注:是杭州海康威视的 解决方案 http://wenku.baidu.com/link?url=pWQbROcXrpDc6BJjugglypiHwzYfmc0a394gHE2okQUqUoL5FEPcXwkMg4cS2nlSi9uo7

海康SDK二次开发回放问题【急】

问题描述 if(lUser==-1){MessageBox.Show("请先登录DVR");return;}elseif(listfile.Count==0){MessageBox.Show("没有找到录像文件");return;}intlplayHandle=-1;CHCNetSDK.NET_DVR_TIMEstartTime=listfile[0].struStartTime;CHCNetSDK.NET_DVR_TIMEstopTime=listfile[0].

soap-如何通过php调用java webservice方式调用海康监控云控制?

问题描述 如何通过php调用java webservice方式调用海康监控云控制? 因项目需要在页面通过webservice调用云控制接口,而我使用php语言和nusoap库,通过soap调用,但问题是无法控制监控画面上下左右转动,请大师们赐教下小弟!

Android编程中调用Camera时预览画面有旋转问题的解决方法_Android

本文实例讲述了Android编程中调用Camera时预览画面有旋转问题的解决方法.分享给大家供大家参考,具体如下: 在调用Camera写应用的时候,前后摄像头的情况有时候是不一样的.有时候,明明后摄像头没有问题,而调用到前摄像头时,却倒转了180°,或者其他角度,百思不得其解.在查看了Android源码之后,发现它的解决办法很是好,接下来贴个源码,以备日后查看. public static int getDisplayRotation(Activity activity) { int rotat

Android编程中调用Camera时预览画面有旋转问题的解决方法

本文实例讲述了Android编程中调用Camera时预览画面有旋转问题的解决方法.分享给大家供大家参考,具体如下: 在调用Camera写应用的时候,前后摄像头的情况有时候是不一样的.有时候,明明后摄像头没有问题,而调用到前摄像头时,却倒转了180°,或者其他角度,百思不得其解.在查看了Android源码之后,发现它的解决办法很是好,接下来贴个源码,以备日后查看. public static int getDisplayRotation(Activity activity) { int rotat

android海康sdk的使用-Android海康威视SDK的使用·

问题描述 Android海康威视SDK的使用· 海康威视SDK获取通道号的方法在哪里?这是说这些通道号是从哪个方法获取的.

微软发布Windows 10 SDK build 14965预览

继上周召开了面向开发者的Connect()大会之后,微软现在又放出了一个全新的Windows 10 SDK预览.令人好奇的是,博客中将之描述为"一个全新的Windows 10周年SDK预览",而不是说它"必须在Windows 10 Insider Preview Build 14965或更新版本中使用".Build 14965是Redstone 2开发分支的一部分(现称之为Windows 10 Creators Update),而周年更新SDK则基于build 14

微软发布Win10 SDK build 14965预览

继上周召开了面向开发者的Connect()大会之后,微软现在又放出了一个全新的Windows 10 SDK预览.令人好奇的是,博客中将之描述为"一个全新的Windows 10周年SDK预览",而不是说它"必须在Windows 10 Insider Preview Build 14965或更新版本中使用".Build 14965是Redstone 2开发分支的一部分(现称之为Windows 10 Creators Update),而周年更新SDK则基于build 14

tplink海康NVR添加IPC时提示“未知错误”?

海康NVR(网络硬盘录像机)的IP通道管理中,添加TP-LINK IPC(网络摄像机)后,IPC状态变为黄色三角叹号,预览画面均无法显示.点击黄色三角叹号,会出现提示"未知错误".     请按照以下步骤排查:   1.确认IPC是否有激活机制   我司IPC较早版本的软件有激活机制,也就是需要给IPC设置管理密码后才能添加到NVR,如果不预先激活,在第三方NVR上就会添加失败.所以请尝试以下方法:   方法一.请您登录到IPC的管理界面,点击信息,查看IPC的型号和软件版本.然后在官