You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 18:45:53