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

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

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();


8 个回复 | 最后更新于 2022-12-21
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 内存怎么工作。

登录后方可回帖

登 录
信息栏
公 告:

专注分享

谢绝纯提问

谢谢合作!
本站域名:HtmLayout.Cn
aardio可以快速开发上位机,本站主要记录了学习过程中遇到的问题和解决办法及aardio代码分享

这里主要专注于aardio学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.

Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
本 站 主 站:Stm32cube中文网
Sciter中文在线文档Sciter在线学习文档
空间赞助:才仁机械
打赏本站
Loading...