计算机学习笔记4
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
内部文件
海康网络摄像头视频预览测试程序
(2015.8.3——2015.8.7)
<智慧云联信息技术(北京)有限公司>
版本
编制者王琳珂编制日期2015-08-07 审核者审核日期
批准者批准日期
签字日期
2015年08月07日
目录
1. 预览画面叠加字符和图片 (3)
1.1 接口NET_DVR_RigisterDrawFun定义 (3)
1.2 功能实现程序 (3)
2.软解码显示预览 (4)
2.1 播放库SDK (4)
2.2 测试程序 (5)
2.3 实现结果 (6)
3.下一步工作 (7)
1. 预览画面叠加字符和图片
1.1 接口NET_DVR_RigisterDrawFun定义
该接口主要完成注册回调函数,获得当前表面的device context。用户可以在这个DC上画图或写字,就好像在窗口的客户区DC上绘图,但这个DC不是窗口客户区的DC,而是播放器DirectDraw里的Off-Screen表面的DC。
如果调用接口NET_DVR_RealPlay_V30进行预览,参数bBlocked建议置1(TRUE),这样预览接口返回成功即可该调用该接口。如果参数bBlocked置0,预览接口返回成功但图像还未正常显示,该接口会返回失败,获取错误号为12(调用次序错误)。
BOOL NET_DVR_RigisterDrawFun(
LONG lRealHandle,
fDrawFun cbDrawFun,
DWORD dwUser
);
Parameters:
lRealHandle [in] NET_DVR_RealPlay或NET_DVR_RealPlay_V30的返回值
cbDrawFun [in] 画图回调函数
dwUser [in] 用户数据
Callback Function:
typedef void(CALLBACK *fDrawFun)(
LONG lRealHandle,
HDC hDc,
DWORD dwUser
);
Callback Function Parameters:
lRealHandle [out] 当前的预览句柄
hDc [out] 画图DC
dwUser [out] 用户数据
Return Values:
TRUE表示成功,FALSE表示失败。获取错误码调用NET_DVR_GetLastError.
1.2 功能实现程序
//回调函数声明
void CALLBACK g_cbDrawFun(LONG, HDC, DWORD);
//回调函数定义
void CALLBACK g_cbDrawFun(LONG lRealPlayHandle,HDC hDC,DWORD dwUser) {
TextOut(hDC, 400, 400, _T("人脸识别"),4);
Rectangle(hDC,100,200,300,400);
return ;
}
//预览画面叠加字符和图像,实现语句写在启动预览函数RealPlay()中
if(!NET_DVR_RigisterDrawFun(lRealPlayHandle,g_cbDrawFun,NULL))
{
TextOut(hDC, 200, 200, _T("NET_DVR_RigisterDrawFun error"),29);
int i=NET_DVR_GetLastError();
NET_DVR_Logout(lUserID);
NET_DVR_Cleanup();
return ;
}
之前的工作中已有详细的文字和方框图添加步骤。
2.软解码显示预览
通过设置预览接口NET_DVR_RealPlay_V40中预览参数的播放窗口句柄为空值,并通过调用捕获数据的接口,即设置NET_DVR_RealPlay_V40接口中的回调函数,获取码流数据进行后续解码播放处理。用户可以自行处理回调得到的码流数据,下面是软解码显示预览。
2.1 播放库SDK
播放库 SDK是嵌入式网络硬盘录像机、视频服务器、IP 设备的配套产品的播放相关的二次开发包,适用于数据流的解码与播放。
播放库 SDK 主要功能:
主要用于实时码流预览,录像文件回放,播放控制如:暂停、单帧前进、单帧后退;获取码流基本信息,如文件索引、解码帧信息,分辨率、帧率;支持 JPG 和 BMP 两种形式下的播放截图。
使用播放库SDK需要添加头文件plaympeg4.h和静态链接库PlayCtrl.lib
#include"plaympeg4.h"
#pragma comment(lib,"PlayCtrl.lib")
2.2 测试程序
//全局变量声明
LONG lPort; //全局的播放库port号
//回调函数声明
void CALLBACK g_RealDataCallBack_V30(LONG , DWORD, BYTE*,DWORD,void* ); //回调函数实现
void CALLBACK g_RealDataCallBack_V30(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer,DWORD dwBufSize,void* dwUser)
{
switch (dwDataType)
{
case NET_DVR_SYSHEAD: //系统头
if (!PlayM4_GetPort(&lPort)) //获取播放库未使用的通道号
{
break;
}
//m_iPort = lPort; //第一次回调的是系统头,将获取的播放库port号赋值给全局port,下次回调数据时即使用此port号播放
if (dwBufSize > 0)
{
if (!PlayM4_SetStreamOpenMode(lPort, STREAME_REALTIME)) //设置实时流播放模式
{
break;
}
if (!PlayM4_OpenStream(lPort, pBuffer, dwBufSize, 1024*1024)) //打开流接口
{
break;
}
if (!PlayM4_Play(lPort, hWnd)) //播放开始
{
break;
}
}
break;
case NET_DVR_STREAMDATA: //码流数据
if (dwBufSize > 0 && lPort != -1)