SDK连接大华摄像头device is NULL Login device failed, errorcode:9

现场发来的错误信息

device is NULL
Login device failed, errorcode:9!
具体如下:

 排查过程

看日志提示就感觉是设备没有,或者是不在线。日志中是有异常码9,我查看了大华的文档

文档中没找到主连接失败如何处理,网络百度了一下:

  1. IP地址你看对不对,然后检查硬盘录像机端,检查数据接口连接等。
  2. 37777端口映射出来没?

最后现场说是设备重启后没事了,莫名其妙的。

 大华SDK文档下载地址:support

### 大华SDK Python API 文档与使用示例 #### 安装大华SDK并配置环境 为了能够通过Python调用大华SDK,首先需要下载并安装官方提供的SDK包[^1]。该SDK主要由C/C++编写而成,这意味着直接在Python中调用并非易事。为此,通常的做法是利用`ctypes`库作为桥梁,在Python端加载DLL文件,并定义相应的函数原型以便于后续操作。 #### 创建动态链接库(DLL) 考虑到原生的大华SDK是以静态库的形式提供给开发者使用的,所以在实际项目里往往还需要额外创建一个动态链接库(即DLL),用于封装那些计划暴露给Python层面上的方法接口。此过程涉及到了解C++编程以及熟悉Visual Studio这类IDE工具链的知识点[^2]。 #### 登录设备 一旦完成了上述准备工作,则可以着手处理具体的业务逻辑了——比如连接到目标摄像装置上。这里推荐采用更为安全可靠的登录方式`CLIENT_LoginWithHighLevelSecurity()`替代过时版本的API来进行身份验证工作[^3]: ```cpp // C++部分:构建DLL供Python调用 extern "C" __declspec(dllexport) int LoginDevice(const char* ip, const char* username, const char* password){ NET_DVR_USER_LOGIN_INFO struLoginInfo = {0}; strcpy_s(struLoginInfo.sUserName,username); strcpy_s(struLoginInfo.sPassword,password); return NET_DVR_Login_V40(ip,&struLoginInfo,...); // 返回句柄值 } ``` 接着是在Python脚本内部完成相应初始化动作: ```python import ctypes as c # 加载自定义编译好的.dll文件 lib = c.windll.LoadLibrary('path_to_your_dll') def login_device(ip_address, user_name, pass_word): lib.LoginDevice.argtypes = [c.c_char_p, c.c_char_p, c.c_char_p] lib.LoginDevice.restype = c.c_int handle = lib.LoginDevice( bytes(ip_address,'ascii'), bytes(user_name,'ascii'), bytes(pass_word,'ascii') ) return handle ``` #### 实现视频流播放 成功建立会话之后便能进一步尝试获取实时画面数据了。下面给出了一段简单的代码片段用来展示怎样启动预览窗口并将接收到的数据渲染出来: ```cpp // 继续完善之前的.cpp源码... extern "C" __declspec(dllexport) void StartPreview(int device_handle){ HWND hwnd = GetConsoleWindow(); LONG lRealHandle=NET_DVR_RealPlay_V40(device_handle,NULL,hwnd); if(lRealHandle>=0){ printf("Start Preview Success!\n"); } else{ printf("Failed to start preview,error code:%d\n",NET_DVR_GetLastError()); } } // 对应的.py文件内补充如下方法体 from threading import Thread class CameraStream(Thread): def __init__(self, dev_id): super().__init__() self.dev_id = dev_id def run(self): lib.StartPreview(c.c_int(self.dev_id)) if __name__=='__main__': cam_handler = login_device('your_ip','admin','password') streamer = CameraStream(cam_handler) streamer.start() ``` 以上便是有关如何借助Python访问大华安防产品的一些基本指导信息;当然这仅仅是个起点而已,随着需求复杂度增加可能还会涉及到更多高级特性如事件监听、云台控制等方面的内容等待探索学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

knight郭志斌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值