海康摄像头SDK开机启动第一个摄像头不显示问题

使用Qt结合海康摄像头SDK在开机自启动时,遇到第一个摄像头无法显示视频的问题。当软件关闭再打开后,所有摄像头恢复正常。问题与阻塞取流方式有关,非阻塞取流(bBlocked=0)时出现此现象,而采用阻塞取流方式则问题解决。

问题描述:

采用Qt调用海康摄像头SDK显示视频,开机软件自启动后第一个摄像头不显示。

原因分析:

第一个摄像头首次启动的时候,不显示视频。软件关闭然后重新打开,所有摄像头都正常显示。尝试发现采用bBlocked=0非阻塞取流方式有这个现场,采用“1- 阻塞取流”方式,问题消失。播放代码如下。

NET_DVR_PREVIEWINFO struPreviewInfo;
memset(&struPreviewInfo, 0x00, sizeof(NET_DVR_PREVIEWINFO));
struPreviewInfo.lChannel = 1;               // 通道id
WId playWnd=this->winId();
if(playWnd==0)
{
    qDebug() << "获取playWnd失败 playWnd=" << playWnd;
    return ;
}
struPreviewInfo.hPlayWnd = (HWND)playWnd;   //需要 SDK 解码时句柄设为有效值,仅取流不解码时可设为空
struPreviewInfo.dwStreamType = 0;           //0-主码流, 1-子码流, 2-码流 3, 3-码流 4,以此类推
struPreviewInfo.dwLinkMode = 0;             //0- TCP 方式, 1- UDP 方式, 2- 多播方式, 3- RTP 方式, 4-RTP/RTSP, 5-RSTP/HTTP
struPreviewInfo.bBlocked = 1;               //0- 非阻塞取流, 1- 阻塞取流
m_previewHandle = NET_DVR_RealPlay_V40(m_userId, &struPreviewInfo, NULL, NULL);
if(m_previewHandle<0)
{
    qDebug() << "播放失败" << m_previewHandle << NET_DVR_GetErrorMsg();
    return ;
}
else
{
    qDebug() << "m_previewHandle = " << m_previewHandle << NET_DVR_GetErrorMsg();
}

预防改进建议:

海康sdk使用注意

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值