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

332

被折叠的 条评论
为什么被折叠?



