由于项目要求需要使用海康摄像头 就去官网下了sdk ,但是不知道咋搞啊 又下了demo 解压以后发现java demo 这个欢喜 不用看其他开发语言了,赶紧导入并按知道添加动态库 运行,靠报错 无法加载动态库Exception in thread "main" java.lang.UnsatisfiedLinkError:
Unable to load library 'PlayCtrl': ÕҲ»µ½ָ¶¨当然
sdk也报错Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'HCNetSDK:
ÕҲ»µ½ָ¶然后按官网的方法各种尝试 差点把电脑搞费喽
也没搞好,尼玛,看来还得自己想办法,还好 最后搞定了
最简单有效的方法就是换开发环境 32位,使用32位jdk和eclipse 以后运行 没有任何错误,然后按demo 摘代码 实现预览
//
初始化
initfalse = hcNetSDK.NET_DVR_Init();// 初始化
if (initfalse) {
System.out.println("初始化成功");
}
// 注册设备
HCNetSDK.NET_DVR_DEVICEINFO_V30 strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30();
Unitls.HCNetSDK.NET_DVR_USER_LOGIN_INFO struLoginInfo = new Unitls.HCNetSDK.NET_DVR_USER_LOGIN_INFO();
Unitls.HCNetSDK.NET_DVR_DEVICEINFO_V40 struDeviceInfo = new Unitls.HCNetSDK.NET_DVR_DEVICEINFO_V40();
String sDeviceIP = "192.0.0.64";
String passwordFieldPwd = "1234asdf";
String textFieldUserName = "admin";
int iPort = 8000;
for (int i = 0; i < sDeviceIP.length(); i++) {
struLoginInfo.sDeviceAddress[i] = (byte) sDeviceIP.charAt(i);
}
for (int i = 0; i < passwordFieldPwd.length(); i++) {
struLoginInfo.sPassword[i] = (byte) passwordFieldPwd.charAt(i);
}
for (int i = 0; i < textFieldUserName.length(); i++) {
struLoginInfo.sUserName[i] = (byte) textFieldUserName.charAt(i);
}
struLoginInfo.wPort = (short) iPort;
nlUserID = hcNetSDK.NET_DVR_Login_V40(struLoginInfo, struDeviceInfo);
lUserID = nlUserID.longValue();
if (lUserID >= 0) {
System.out.println("登陆注册成功");
}
strPreviewInfo = new HCNetSDK.NET_DVR_PREVIEWINFO();
strPreviewInfo.lChannel = new NativeLong(1);
HWND hwnd = new HWND(Native.getComponentPointer(this)); // 获取窗口语柄
strPreviewInfo.hPlayWnd = hwnd;
StartPlay(nlUserID, strPreviewInfo);
}
// stop play
public void StopPlay() {
// 停止预览
hcNetSDK.NET_DVR_StopRealPlay(m_lPreviewHandle);
// 注销用户
hcNetSDK.NET_DVR_Logout(nlUserID);
// 释放SDK资源
hcNetSDK.NET_DVR_Cleanup();
this.repaint();
}
// 开始 预览
private <NET_DVR_GetLastError> void StartPlay(NativeLong lUserId, HCNetSDK.NET_DVR_PREVIEWINFO struPreviewInfo) {
// HWND hwnd = new HWND(Native.getComponentPointer(this)); // 获取窗口语柄
// struPreviewInfo.hPlayWnd = hwnd;
m_lPreviewHandle = hcNetSDK.NET_DVR_RealPlay_V40(lUserId, struPreviewInfo, null, null);
// 预览出错 打印错误代码
if (m_lPreviewHandle.longValue() == -1) {
hcNetSDK.NET_DVR_GetLastError();
System.out.println(hcNetSDK.NET_DVR_GetLastError() + "----错误码是啥");
}
}
到此预览成功
还有一点就是获取窗口语柄 一定要注意不要传不显示的控件 我之前用java拼的窗口 预留了jpanel 但是无法显示 最后没办法 只好又写个窗口 想办法与主窗口绑定就可以了 就到这里把
来源:CSDN
作者:yuehua_zhang
链接:https://blog.csdn.net/yuehua_zhang/article/details/77493986