`
tcspecial
  • 浏览: 895922 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

海康SDK截图

阅读更多

     最近使用海康硬盘录像机录像截图,看了其官方使用文档及提供的SDK,不愧是上市公司,使用文档描述很详细,SDK采用C语言描述; SDK没有演示如何通过实时视频流截图,下面是自己通过多次测试后成功截图的代码:

 

/**
 *@brief 初始化Playctrl库
 */
void InitRealStream()
{
	// 显示组件,在使用过程中发现必须先调用play()方法才能正常截图,而播放必须传入一窗口句柄(myVideo->winId());此时无须显示视频,隐藏界面即可
	QWidget *myVideo=new QWidget;

	// 分配播放端口
	PlayM4_GetPort(&pPlayPort);
	
	// 获得文件头长度;
	quint32 nLength= PlayM4_GetFileHeadLength();
	char *pFileHead=new char[nLength];
	
	// 设置流模式
	PlayM4_SetStreamOpenMode(pPlayPort,STREAME_REALTIME);
	
	// 打开流接口
	if(!PlayM4_OpenStream(pPlayPort,pFileHead,nLength,1024*100))
	{
		qDebug("错误:PlayM4_OpenStream: %d", PlayM4_GetLastError(pPlayPort));
		qApp->quit();
	}
	
	// 设置显示缓冲区大小
	PlayM4_SetDisplayBuf(pPlayPort,15);

	// 播放
	PlayM4_Play(pPlayPort,myVideo->winId());
}

/**
 *@brief 输入实时视频流,调用前需先调用InitRealStream()
 */
void InputStream()
{
	QByteArray pFrameData;
	
	// 接收UDP视频帧,填充缓冲区pFrameData, 省略 ....
	
	// 输入实时视频流
	PlayM4_InputData(pPlayPort,(unsigned char*)pFrameData.data(),pFrameData.size());
}

/**
 *@brief 调用PlayM4_GetJPEG()截取jpg
 */
void GetPhoto()
{
	// 图片大小,最好设置为height*width*3/2即可
	int nLen=PHOTO_HEIGHT*PHOTO_WIDTH*3/2;
	char *pByte=new char[nLen];
	DWORD pRealSize;  // 实际尺寸

	if(!PlayM4_GetJPEG(pPlayPort,(unsigned char*)pByte,nLen,&pRealSize))
	{
		qDebug("错误:抓取图片失败[%d]",PlayM4_GetLastError(pPlayPort));
	}else
	{
		qDebug("信息:截图成功");

		// 将图片写入文件
		QFile pFile("d:/test.jpg");
		pFile.open(QFile::WriteOnly|QFile::Truncate);
		pFile.write(pByte,nLen);
		pFile.close();
	}
	
	// 清理内存
	delete []pByte;
	pByte=NULL;
}

 

 

分享到:
评论
1 楼 gamesliang 2016-02-17  
   

相关推荐

Global site tag (gtag.js) - Google Analytics