aardio调用海康DLL开发包显示摄像头画面的一些问题

By itusers at 2022-12-19 • 0人收藏 • 1942人看过

image.png现在一

设备网络SDK编程指南(IPC).pdf海康开发手册。aardio代码链接如下http://itusers.f3322.org:8080/hk.zip

连接就出现这种错误,海康摄像头我已经放到公网上了全天24小时在线,大哥们帮忙看看代码的错误。

import win.ui;
/*DSG{{*/
mainForm = win.form(text="海康";right=757;bottom=467)
mainForm.add(
button={cls="button";text="连接";left=432;top=408;right=536;bottom=448;z=2};
button2={cls="button";text="断开";left=608;top=408;right=712;bottom=440;z=3};
custom={cls="custom";text="自定义控件";left=24;top=16;right=728;bottom=304;z=1}
)
/*}}*/

import console;
import raw;
import win;
function link(){
	Dll = raw.loadDll("~/res/HCNetSDK.dll");
	 // 初始化
  Dll.NET_DVR_Init();
  //设置连接时间与重连时间
  Dll.NET_DVR_SetConnectTime(2000, 1);
  Dll.NET_DVR_SetReconnect(10000, true);
	HWND = mainForm.custom.hwnd;
	class NET_DVR_DEVICEINFO_V30{
		
	}
	stru = NET_DVR_DEVICEINFO_V30();
	
	lUserID = Dll.NET_DVR_Login_V30("42.230.192.110", 8000, "a", "hk123456", stru);//IP地址,端口,账号,密码,结构体
	if(lUserID != 0){
		win.msgbox("错误:" + Dll.NET_DVR_GetLastError());
		Dll.NET_DVR_Cleanup();
		 return;
	}
	
	NET_DVR_RealPlay_V40 = Dll.api("NET_DVR_RealPlay_V40","void(struct& NET_DVR_PREVIEWINFO)" );
	class NET_DVR_PREVIEWINFO{
		LONG     lChannel = 1;
		DWORD    dwStreamType = 0;
		DWORD    dwLinkMode = 0;
		HWND     hPlayWnd;
		BOOL     bBlocked = 1;
		_struct_aligned = 1;
	}
	struPlayInfo = NET_DVR_PREVIEWINFO();
	
	struPlayInfo.hPlayWnd = HWND;
	//console.varDump(struPlayInfo.hPlayWnd);
	lRealPlayHandle = Dll.NET_DVR_RealPlay_V40(lUserID, struPlayInfo,null ,null );
 if (lRealPlayHandle < 0){
 	win.msgbox("错误:" + Dll.NET_DVR_GetLastError());
 	Dll.NET_DVR_Logout(lUserID);
 	dLL.NET_DVR_Cleanup();
 	return;
 }
	
}
function stop(){
	//关闭预览
 Dll.NET_DVR_StopRealPlay(lRealPlayHandle);
//注销用户
 Dll.NET_DVR_Logout(lUserID);
 //释放 SDK 资源
 Dll.NET_DVR_Cleanup();
 console.varDump(lUserID);
}


mainForm.button.oncommand = function(id,event){
	link();//海康连接函数
}

mainForm.button2.oncommand = function(id,event){
	stop();//海康登陆销毁退出
}

mainForm.show();
return win.loopMessage();


14 个回复 | 最后更新于 2023-11-14
2022-12-19   #1

链接:https://pan.baidu.com/s/13k1nyBPS2pp1u91ep1jWYQ?pwd=velp 

提取码:velp 

那个代码链接有问题重新传到百度网盘上


2022-12-20   #2

回复#1 @itusers :

你这种最好先用C#实现一遍,如果在C#上没问题,再把相同代码转换为aardio。

有问题先在C#上排查,aardio支持C#调用不表示可以用aardio开发C#

2022-12-20   #3

回复#2 @jerryxjr1220 :

按照开发手册这样调用的还是出现报错

2022-12-21   #4

这样写结构体,放到 C# 里只会错得更厉害。

aardio 已经提示你 struct 语法错误了,你这个结构体转换为 aardio 应该是:

class NET_DVR_PREVIEWINFO{
	int lChannel = 1;
	INT dwStreamType;
	INT dwLinkMode;
	addr hPlayWnd;
	int bBlocked = 1; 
 }

aardio 的静态类型比 C++、C# 要简单得多。

例如 int 就是 32 位整数,大写 INT 就表示无符号。

不像 C++ 同一类型有成千上万的别名。


API 编程本来就难,

aardio 虽然不用像 C++、C# 那样需要几年的学习才能干活。

但至少先了解一下基础数据类型吧?看你都在这里等别人帮忙等了好几天了,去看下基础数据类型就几分钟的事。

2022-12-21   #5

hk.png


代码很简单:

import win.ui;
var winform = win.form(text="调用海康 DLL");
winform.show();

var hk = raw.loadDll("\hk\HCNetSDK.dll");
hk.NET_DVR_Init();  

var lUserID = hk.NET_DVR_Login_V30("42.230.192.110", 8000, "a", "hk123456", null);//IP地址,端口,账号,密码,结构体
 
var previewInfo = {
	int lChannel = 1;
	INT dwStreamType;
	INT dwLinkMode;
	addr hPlayWnd = winform.hwnd;
	int bBlocked = 1;
	int bPassbackRecord;
	BYTE byPreviewMode;
	BYTE byStreamID[32];
	BYTE byProtoType;
	BYTE byRes1;
	BYTE byVideoCodingType;
	INT dwDisplayBufNum;
	BYTE byRes[216];
}  
hk.NET_DVR_RealPlay_V40(lUserID, previewInfo,null,null);
win.loopMessage();

NET_DVR_Login_V30 可以省略,
需要的话可以用 “ 工具 / 转换工具 / API 转换工具” 转换一下:

class NET_DVR_DEVICEINFO_V30{
	BYTE sSerialNumber[48];
	BYTE byAlarmInPortNum;
	BYTE byAlarmOutPortNum;
	BYTE byDiskNum;
	BYTE byDVRType;
	BYTE byChanNum;
	BYTE byStartChan;
	BYTE byAudioChanNum;
	BYTE byIPChanNum;
	BYTE byZeroChanNum;
	BYTE byMainProto;
	BYTE bySubProto;
	BYTE bySupport;
	BYTE bySupport1;
	BYTE bySupport2;
	WORD wDevType;
	BYTE bySupport3;
	BYTE byMultiStreamProto;
	BYTE byStartDChan;
	BYTE byStartDTalkChan;
	BYTE byHighDChanNum;
	BYTE bySupport4;
	BYTE byLanguageType;
	BYTE byVoiceInChanNum;
	BYTE byStartVoiceInChanNo;
	BYTE byRes3[2];
	BYTE byMirrorChanNum;
	WORD wStartMirrorChanNo;
	BYTE byRes2[2];
}


2022-12-21   #6

回复#5 @excel :感谢大佬指导,我明白了。还有一个问题就是连接摄像头画面出来了之后,打开任务管理器发现那个aardio程序内存占用一直在上升,怎么解决

2022-12-21   #7

回复#5 @excel :test.jpg

2022-12-21   #8

回复#7 @itusers :


汗啊,以后不敢回贴子了,
我才学 aardio 几天,上面的代码是用 aardio 自带的工具转换的。

你的摄像头程序占用内存跟 aardio 应当没关系。

aardio 只是给海康摄像头程序指定了一个显示窗口句柄,并没有运行占内存的程序。


而且你 个所谓的一直上升才 80 MB, 

你的一个看网页的 Chrome 进程都 130 MB,再多看几个网页随便就能过 GB。

你这是摄像头,是视频,你舍不得几十 MB 内存怎么工作。

2023-11-13   #9

HCNetSDK.dll 一直找不到合适,报错Cannot load library "-/hk/HCNetsDK.dll , 请问去哪里能下载到,谢谢

2023-11-14   #10

回复#9 @uolian :

海康DLL开发包

去海康威视官方下载sdk

2023-11-14   #11

image.png海康威视官方下载了sdk,还是报这个错误, hk文件夹底下有这个文件,也在c:/Windows/system32下有了!

2023-11-14   #12

回复#11 @uolian :

有可能要安装c++的运行环境, 你电脑有吗? 可以下载个vc运行库大全安装

另外aardio调用的是32位dll, 切记

2023-11-14   #13

1:确定安装c++的运行环境; 2:也下载个vc运行库大全,安装成功了; 3: aardio调用的是确定是32位dll,但是还是不成功 ;  是不是得用老版本的dll, 谢谢!image.png

2023-11-14   #14

找到原因了,目录下只有HCNetSDK.DLL一个文件不行,还需要其他dll文件,把库文件整个拷贝进去就解决了! 还有一点"端口"是摄像机的服务端口,不是http端口. 感谢@admin,@itusers ,@excel,@stzz的无私奉献!

登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...