資源簡介
使用opencv調用海康威視網絡攝像頭
代碼片段和文件信息
#include?
#include?
#include?
#include?“Windows.h“
#include?“HCNetSDK.h“
#include?“plaympeg4.h“
#include?
#include?
using?namespace?std;
using?namespace?cv;
LONG?nPort?=?-1;
volatile?int?gbHandling?=?3;
//解碼回調?視頻為YUV數據(YV12),音頻為PCM數據
void?CALLBACK?DecCBFun(long?nPort?char?*?pBuf?long?nSize?frame_INFO?*?pframeInfo?long?nReserved1?long?nReserved2)
{
if?(gbHandling)
{
gbHandling--;
return;
}
long?lframeType?=?pframeInfo->nType;
if?(lframeType?==?T_YV12)
{
Mat?pImg(pframeInfo->nHeight?pframeInfo->nWidth?CV_8UC3);
Mat?src(pframeInfo->nHeight?+?pframeInfo->nHeight?/?2?pframeInfo->nWidth?CV_8UC1?pBuf);
cvtColor(src?pImg?CV_YUV2BGR_YV12);
// Sleep(-1);
imshow(“IPCamera“?pImg);
waitKey(1);
}
gbHandling?=?3;
}
///實時流回調
void?CALLBACK?fRealDataCallBack(LONG?lRealHandle?DWORD?dwDataType?BYTE?*pBuffer?DWORD?dwBufSize?void?*pUser)
{
switch?(dwDataType)
{
case?NET_DVR_SYSHEAD:?//系統頭
if?(!PlayM4_GetPort(&nPort))??//獲取播放庫未使用的通道號
{
break;
}
//m_iPort?=?lPort;?//第一次回調的是系統頭,將獲取的播放庫port號賦值給全局port,下次回調數據時即使用此port號播放
if?(dwBufSize?>?0)
{
if?(!PlayM4_SetStreamOpenMode(nPort?STREAME_REALTIME))??//設置實時流播放模式
{
break;
}
if?(!PlayM4_OpenStream(nPort?pBuffer?dwBufSize?10?*?1024?*?1024))?//打開流接口
{
break;
}
if?(!PlayM4_Play(nPort?NULL))?//播放開始
{
break;
}
if?(!PlayM4_SetDecCallBack(nPort?DecCBFun))
{
break;
}
}
break;
case?NET_DVR_STREAMDATA:???//碼流數據
if?(dwBufSize?>?0?&&?nPort?!=?-1)
{
if?(!PlayM4_InputData(nPort?pBuffer?dwBufSize))
{
cout?<“error“?< break;
}
}
break;
default:?//其他數據
if?(dwBufSize?>?0?&&?nPort?!=?-1)
{
if?(!PlayM4_InputData(nPort?pBuffer?dwBufSize))
{
break;
}
}
break;
}
}
void?
- 上一篇:VTK與Qt整合的
- 下一篇:C++中用數組實現的通訊錄
評論
共有 條評論