近期的一个小项目中又用到海康SDK二次开发的问题,感觉又回到了两年前,两年到现在反而没有太大的进步。想到这里,又想废话一连篇。

主要的几个问题如下:

1.HCNetSDK.lib 是海康IPC的库文件,PlayCtrl.lib是海康视频的解码库,要根据需要来使用。

2.关于回调函数,一般在处理视频码流时都会用到回调函数,这里常见的有两个回调函数的设置函数,如下:

PlayM4_SetDisplayCallBack(lPort,g_DisPlayCBFun) //这个是设置播放时的回调函数,可以用于抓图等操作,但是操作时间不能太长。g_DisPlayCBFun定义可以根据SDK头文件定义。

PlayM4_SetDecCallBack(lPort, g_DecCBFun) //这个是设置解码时的回调函数,这个函数会覆盖掉上一个回调函数的显示部份,包括图像和音频的显示,需要我们自行实现图像和视频的显示。另外这个函数不需要限制操作时间。

回调函数中获取的图像类型有

如果是YUV可以使用如下函数进行转换

[c language=”++”]

void yv12toYUV(char *outYuv, char *inYv12, int width, int height,int widthStep)
{
int col,row;
unsigned int Y,U,V;
int tmp;
int idx;

for (row=0; row<height; row++)
{
idx=row * widthStep;
int rowptr=row*width;

for (col=0; col<width; col++)
{
tmp = (row/2)*(width/2)+(col/2);

Y=(unsigned int) inYv12[row*width+col];
U=(unsigned int) inYv12[width*height+width*height/4+tmp];
V=(unsigned int) inYv12[width*height+tmp];

outYuv[idx+col*3] = Y;
outYuv[idx+col*3+1] = U;
outYuv[idx+col*3+2] = V;
}
}
}
[/c]

其中outYuv是输出结果图像的指针, inYv12输出图像的指针,也就是回调函数的buf, width图像宽度, height图像高度,widthStep是图像每一行的字节数。在与opencv结合使用过程中,1.0版本的widthStep就是IplImage的widthStep,2.0版本的是Mat.step();

另外输出结果Mat或者IplImage需提前定义好才能调用。

3.在二次开发过程中会遇到各种各样的SDK,有的是标准的SDK,有的是其他厂家二次开发的SDK,还有的是国标28181或者浙江省地方的统一SDK,具体要认真阅读说明文档。但综合过去对海康二次开发的经验来看,不管是哪种SDK固定思路,万变不离其宗,掌握其核心思路才是核心要领。

最终吐槽一下,在今年做的多个项目中,遇到和海康平台对接的各种借口拖延问题,最终都是通过甲方施压或者通过甲方与甲方沟通多次才能得以解决,感到万般无奈。

关于海康SDK的几个问题
Tagged on:

One thought on “关于海康SDK的几个问题

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.