海康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
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值