计算机学习笔记3.docx
《计算机学习笔记3.docx》由会员分享,可在线阅读,更多相关《计算机学习笔记3.docx(10页珍藏版)》请在冰点文库上搜索。
![计算机学习笔记3.docx](https://file1.bingdoc.com/fileroot1/2023-5/26/bc492a6a-4c98-4b9d-aa43-6473010b8722/bc492a6a-4c98-4b9d-aa43-6473010b87221.gif)
计算机学习笔记3
内部文件
海康网络摄像头视频预览测试程序(2015.7.27——2015.7.31)
<智慧云联信息技术(北京)有限公司>
版本
编制者
王琳珂
编制日期
2015-07-31
审核者
审核日期
批准者
批准日期
签字日期
2015年07月31日
目录
1.准备工作3
2.实现视频预览功能的详细步骤4
2.1创建工程并添加所需库目录4
2.2添加头文件及创建菜单6
2.3启动预览和结束预览函数的功能实现7
3.测试程序运行结果9
1.准备工作
本次工作需要用到的Windows下设备网络SDK:
说明:
HCNetSDK.dll、HCCore.dll必须加载,其他组件,用户可以根据需要选择其中的一部分或者全部。
更新SDK时,HCNetSDK.dll、HCCore.dll以及HCNetSDKCom文件夹下的功能组件库文件都需要更新加载,且HCNetSDKCom文件夹名不能修改。
预览和与预览相关的模块流程图:
图中虚线框部分的模块是与预览模块相关,必须在启动预览后才能调用,这些模块之间是并列的关系,各自完成相应的功能。
2.实现视频预览功能的详细步骤
2.1创建工程并添加所需库目录
新建win32项目,工程名为“Haikang”,路径设置为:
D:
\ProgramFiles(x86)\MicrosoftVisualStudio11.0\Projects\。
新建工程完成之后首先运行一下,这样可以产生一个含有exe文件的Debug目录。
拷贝头文件和库文件:
将目录\海康摄像头光盘\ROOT\DevelopmentTools\ClientSDK\HCNetSDKV5.0.3.20_build20150318_win32_CN\incCn中的头文件HCNetSDK.h加到工程目录下面,即D:
\ProgramFiles(x86)\MicrosoftVisualStudio11.0\Projects\Haikang.
将目录\海康摄像头光盘\ROOT\DevelopmentTools\ClientSDK\HCNetSDKV5.0.3.20_build20150318_win32_CN\lib中的库文件(.lib,.dll)添加到工程目录下。
添加之后如下图:
总结:
lib文件夹下的头文件(.h)和静态链接库(.lib)放在工程目录下面,动态链接库(.dll)放在exe文件所在的Debug目录下面,此外,lib文件夹下的HCNetSDKCom直接copy到exe文件所在的Debug目录中。
工程Haikang右击属性——配置属性——C/C++——常规——附加目录包含,添加目录D:
\ProgramFiles(x86)\MicrosoftVisualStudio11.0\Projects\Haikang,即HCNetSDK.h所在的目录。
工程Haikang右击属性——配置属性——链接器——常规——附加库目录,添加目录D:
\ProgramFiles(x86)\MicrosoftVisualStudio11.0\Projects\Haikang,D:
\ProgramFiles(x86)\MicrosoftVisualStudio11.0\Projects\Haikang\Debug即.lib和.dll文件所在的目录。
注意以下所有程序均写在源文件Haikang.cpp中。
2.2添加头文件及创建菜单
添加外部接口头文件
#include"HCNetSDK.h"
引入静态链接库HCNetSDK.lib:
#pragmacomment(lib,"HCNetSDK.lib")
在资源视图中添加菜单“启动预览(&P)”“停止预览(&S)”
声明上述两个菜单所对应的函数:
voidRealPlay();
voidEndPlay();
在主窗口消息处理函数LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam){}分析菜单中加入
caseID_32771:
RealPlay();
break;
caseID_32772:
EndPlay();
break;
其中ID_32771和ID_32772分别是启动预览和停止预览的ID号。
2.3启动预览和结束预览函数的功能实现
将初始化函数BOOLInitInstance(HINSTANCEhInstance,intnCmdShow){}中的HWNDhWnd设置为全局变量,即写到函数外面,并定义全局变量HDChDC=0;然后在函数InitInstance中对hDC赋值:
hDC=GetWindowDC(hWnd);
启动预览函数RealPlay()的功能实现:
voidRealPlay()
{
//初始化
NET_DVR_Init();
//设置连接时间与重连时间
NET_DVR_SetConnectTime(2000,1);
NET_DVR_SetReconnect(10000,true);
//注册设备
//LONGlUserID;(全局变量)
NET_DVR_DEVICEINFO_V30struDeviceInfo;
lUserID=NET_DVR_Login_V30("192.168.1.64",8000,"admin","zhylxxjs201412",&struDeviceInfo);
if(lUserID<0)
{
//在窗口上输出错误提示
TextOut(hDC,200,200,_T("Loginerror"),11);
//通过变量error查看错误信息
interror=NET_DVR_GetLastError();
NET_DVR_Cleanup();
return;
}
/*NET_DVR_Login_V30
用户注册设备。
LONGNET_DVR_Login_V30(
char*sDVRIP,
WORDwDVRPort,
char*sUserName,
char*sPassword,
LPNET_DVR_DEVICEINFO_V30lpDeviceInfo
);
Parameters
sDVRIP[in]设备IP地址或是静态域名,字符数不大于128个
wServerPort[in]设备端口号
sUserName[in]登录的用户名
sPassword[in]用户密码
lpDeviceInfo[out]设备信息
ReturnValues
-1表示失败,其他值表示返回的用户ID值。
该用户ID具有唯一性,后续对设备的操作都需要通过此ID实现。
获取错误码调用NET_DVR_GetLastError*/
//启动预览并设置回调数据流
//LONGlRealPlayHandle;(全局变量)
NET_DVR_PREVIEWINFOstruPlayInfo={0};
//需要SDK解码时句柄设为有效值,仅取流不解码时可设为空
struPlayInfo.hPlayWnd=hWnd;
struPlayInfo.lChannel=1;//预览通道号
//0-主码流,1-子码流,2-码流3,3-码流4,以此类推
struPlayInfo.dwStreamType=0;
//0-TCP方式,1-UDP方式,2-多播方式,3-RTP方式,4-RTP/RTSP,5-RSTP/HTTP
struPlayInfo.dwLinkMode=0;
lRealPlayHandle=NET_DVR_RealPlay_V40(lUserID,&struPlayInfo,NULL,NULL);
if(lRealPlayHandle<0)
{
TextOut(hDC,200,200,_T("NET_DVR_RealPlay_V40error"),26);
interror=NET_DVR_GetLastError();
NET_DVR_Logout(lUserID);
NET_DVR_Cleanup();
return;
}
/*NET_DVR_RealPlay_V40
实时预览(支持多码流)。
LONGNET_DVR_RealPlay_V40(
LONGlUserID,
LPNET_DVR_PREVIEWINFOlpPreviewInfo,
REALDATACALLBACKfRealDataCallBack_V30,
void*pUser
);
Parameters
lUserID[in]NET_DVR_Login或NET_DVR_Login_V30的返回值
lpPreviewInfo[in]预览参数
fRealDataCallBack_V30[in]码流数据回调函数
pUser[in]用户数据
ReturnValues
-1表示失败,其他值作为NET_DVR_StopRealPlay等函数的句柄参数。
获取错误码调用NET_DVR_GetLastError*/
}
结束预览函数EndPlay()的功能实现:
voidEndPlay()
{
//关闭预览
NET_DVR_StopRealPlay(lRealPlayHandle);
//注销用户
NET_DVR_Logout(lUserID);
//释放SDK资源
NET_DVR_Cleanup();
return;
}
3.测试程序运行结果
运行程序,文件——启动预览
点击结束预览时,视频会停在预览的最后一帧图片上。