WPF集成海康威视摄像头无法显示直播画面求助
WPF中无法显示海康威视摄像头直播画面的问题解决求助
我有一台海康威视摄像头,希望在WPF应用中获取其画面。官方SDK示例均基于WinForm实现,通过PictureBox的Handle参数绑定画面:
lpPreviewInfo.hPlayWnd = mtbDate.Handle;
我在WPF中通过WindowsFormsHost添加了PictureBox,点击直播按钮后后台内存上涨(推测已接收画面),但画面无法显示。登录功能正常,录像功能也能成功录制并保存到指定路径,但直播画面始终无法显示,且程序从未进入RealDataCallBack函数——而原WinForm代码无需触发该函数即可正常显示画面。
登录功能代码(运行正常)
private void Login(string ipAddress, int port, string username, string password) { CHCNetSDK.NET_DVR_DEVICEINFO_V30 DeviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO_V30(); m_lUserID = CHCNetSDK.NET_DVR_Login_V30(ipAddress, port, username, password, ref DeviceInfo); if (m_lUserID < 0) { iLastErr = CHCNetSDK.NET_DVR_GetLastError(); str = "NET_DVR_Login_V30 failed, error code= " + iLastErr; MessageBox.Show(str); } else { MessageBox.Show("Login Success!"); } }
直播功能代码(无报错但无法显示视频)
private Int32 m_lRealHandle = -1; CHCNetSDK.REALDATACALLBACK RealData = null; private void LiveView() { if (m_lUserID < 0) { MessageBox.Show("Please login the device firstly"); return; } if (m_lRealHandle < 0) { CHCNetSDK.NET_DVR_PREVIEWINFO lpPreviewInfo = new CHCNetSDK.NET_DVR_PREVIEWINFO(); lpPreviewInfo.hPlayWnd = myImage.Handle; lpPreviewInfo.lChannel = 1; lpPreviewInfo.dwStreamType = 0; lpPreviewInfo.dwLinkMode = 0; lpPreviewInfo.bBlocked = true; lpPreviewInfo.dwDisplayBufNum = 1; lpPreviewInfo.byProtoType = 0; lpPreviewInfo.byPreviewMode = 0; if (RealData == null) { RealData = new CHCNetSDK.REALDATACALLBACK(RealDataCallBack); } IntPtr pUser = new IntPtr(); m_lRealHandle = CHCNetSDK.NET_DVR_RealPlay_V40(m_lUserID, ref lpPreviewInfo, null/*RealData*/, pUser); if (m_lRealHandle < 0) { iLastErr = CHCNetSDK.NET_DVR_GetLastError(); str = "NET_DVR_RealPlay_V40 failed, error code= " + iLastErr; MessageBox.Show(str); return; } else { } } return; } public void RealDataCallBack(Int32 lRealHandle, UInt32 dwDataType, IntPtr pBuffer, UInt32 dwBufSize, IntPtr pUser) { if (dwBufSize > 0) { byte[] sData = new byte[dwBufSize]; Marshal.Copy(pBuffer, sData, 0, (Int32)dwBufSize); string str = "实时流数据.ps"; FileStream fs = new FileStream(str, FileMode.Create); int iLen = (int)dwBufSize; fs.Write(sData, 0, iLen); fs.Close(); } }
注:程序从未进入RealDataCallBack函数,原WinForm代码无需触发该函数即可显示画面。
XAML设计代码
<StackPanel> <WindowsFormsHost> <wf:PictureBox x:Name="myImage" Width="500" Height="500" /> </WindowsFormsHost> <Button Content="Login" Click="Login_Click" /> <Button Content="Live View" Click="Live_Click" /> </StackPanel>
录像功能代码(运行正常)
bool m_bRecord = false; private void btnRecord_Click(object sender, EventArgs e) { string sVideoFileName; sVideoFileName = "Record_test.mp4"; if (m_bRecord == false) { int lChannel = 1; CHCNetSDK.NET_DVR_MakeKeyFrame(m_lUserID, lChannel); if (!CHCNetSDK.NET_DVR_SaveRealData(m_lRealHandle, sVideoFileName)) { iLastErr = CHCNetSDK.NET_DVR_GetLastError(); str = "NET_DVR_SaveRealData failed, error code= " + iLastErr; System.Windows.MessageBox.Show(str); return; } else { m_bRecord = true; } } else { if (!CHCNetSDK.NET_DVR_StopSaveRealData(m_lRealHandle)) { iLastErr = CHCNetSDK.NET_DVR_GetLastError(); str = "NET_DVR_StopSaveRealData failed, error code= " + iLastErr; System.Windows.MessageBox.Show(str); return; } else { str = "Successful to stop recording and the saved file is " + sVideoFileName; System.Windows.MessageBox.Show(str); m_bRecord = false; } } return; }
现寻求解决方案,解决WPF中无法显示海康威视摄像头直播画面的问题。
内容的提问来源于stack exchange,提问作者Ozgur Saklanmaz
相关产品推荐
相关产品推荐

