集成海康威视Sadp SDK实现重置密码

下面将介绍集成SadpSDK的接口调用流程,以及使用到的接口功能说明。如有疑问欢迎留言探讨。

 

 图中橘黄色部分为程序外部操作。

 

  • 判断设备支持的重置方式

           导出导入文件重置密码,设备基本上都支持 重置密码 或者 重置密码方式2 ,由于重置密码方式2方案更安全所以如果支持的话优先选择使用重置密码方式2

                 SADP_DEVICE_INFO结构体中

                          (bySupport & 0x40 ) == 1,表示支持重置密码

                          (bySupport1 & 0x01 ) == 1,表示支持重置密码方式2

 

  • 获取设备码

           获取接口 SADP_GetDeviceConfig, 命令码为SADP_GET_DEVICE_CODE。获取到设备码后将字符串保存到一个本地文件中(例如:Device.xml)。然后将这个文件发送给海康技术支持,他们会返回一个设备重置口令文件给你,该文件中的字符串将作为重置密码接口的一个输入参数

     

     

  • 获取解密串

           获取接口 SADP_GetDeviceConfig, 命令码为 SADP_GET_ENCRYPT_STRING。获取到加密串后将字符串保存到一个本地文件中(例如:Device.xml)。然后将这个文件发送给海康技术支持,他们会返回一个设备重置口令文件给你,该文件中的字符串将作为重置密码接口的一个输入参数

 

  • 重置密码

           重置接口 SADP_ResetPasswd_V40。该接口最重要的就是需要 设备重置口令

 

 

  •  示例代码

 

#include <stdio.h>
#include <windows.h>
#include "Sadp.h"
 
 
//设备信息回调函数 void CALLBACK SadpDataCallBack(const SADP_DEVICE_INFO_V40 *lpDeviceInfoV40, void* pUserData)
{
     printf("\r\n----------------------------------------\r\n");
     printf("      IP    %s\r\n", lpDeviceInfoV40->struSadpDeviceInfo.szIPv4Address); //设备ip
     printf("     Mac    %s\r\n", lpDeviceInfoV40->struSadpDeviceInfo.szMAC);         //设备Mac地址
     printf("SerialNO    %s\r\n", lpDeviceInfoV40->struSadpDeviceInfo.szSerialNO);    //设备序列号
     printf("  Result    %d\r\n", lpDeviceInfoV40->struSadpDeviceInfo.iResult);       //消息类型: 1.设备上线, 2.设备更新, 3.设备下线
     printf("\r\n----------------------------------------\r\n");
}
 
 
//导出导入文件重置密码
int main(void)
{
     //开启sadp日志  3(打印所以日志) "C:\\SadpLog"(日志目录) false(保留所有日志文件)
     SADP_SetLogToFile(3, "C:\\SadpLog", false);
 
 
    //开启sadp服务
     int iRet = SADP_Start_V40(SadpDataCallBack);
     if (iRet == 0)
     {
         //开启失败,获取错误码
         int iError = SADP_GetLastError();
         printf("SADP_Start_V40 Failed!  Err(%d)\r\n", iError);
     }
 
 
    //等待一会,修改网络参数前需要SDK搜索到被修改设备才行
     Sleep(10000);
 
 
    //这里以重置密码方式2为例
     SADP_ENCRYPT_STRING struEncryptString;
     iRet = SADP_GetDeviceConfig("DS-2CD2622FWD-IZS20180312BBWR681619114", SADP_GET_ENCRYPT_STRING, NULL, 0, &struEncryptString, sizeof(struEncryptString));
     if (iRet == 0)
     {
         int iError = SADP_GetLastError();
         char szTemp[100] = { 0 };
         if (iError == SADP_NOT_ACTIVATED)
         {
             printf("设备未激活!");
         }
         else if (iError == SADP_TIMEOUT)
         {
             printf("获取超时!");
         }
         else if (iError == SADP_DEVICE_DENY)
         {
             printf("设备拒绝处理!");
         }
         else
         {
             printf("Get device code failed, Error code%d", iError);
         }
        //释放资源
         SADP_Stop();
         return 0;
     }
     printf("Get device code succ, [%s]", struEncryptString.szEncryptString);
 
 
    //将加密串写入本地文件
     FILE *pFile = fopen("C:\\Device.xml", "wb");
     if (NULL == pFile)
     {
         printf("Open File failed");
         //释放资源
         SADP_Stop();
         return 0;
     }
     int iWriteLen = fwrite(struEncryptString.szEncryptString, sizeof(BYTE), strlen(struEncryptString.szEncryptString), pFile);
     if (0 == iWriteLen)
     {
         printf("Write 0 Byte Data");
         //释放资源
         SADP_Stop();
         return 0;
     }
     else
     {
         if (NULL != pFile)
         {
             fclose(pFile);
             pFile = NULL;
         }
     }
  
  
//----------------------------------------------------------------------------------------------------------------------------------------
//待拿到设备重置口令后,执行下面代码流程
//----------------------------------------------------------------------------------------------------------------------------------------
          
     SADP_RESET_PARAM_V40 struResetParamV40 = { 0 };
     struResetParamV40.dwSize = sizeof(struResetParamV40);
     struResetParamV40.byResetType = 2; //导出导入文件方式
     strcpy(struResetParamV40.szPassword, "hik12345");
     strcpy(struResetParamV40.szAuthFile, "C:\\Encrypt_681619114_o2.xml"); //设备重置口令文件
     SADP_RET_RESET_PARAM_V40 struRetResetParamV40 = { 0 };
     //导出导入文件重置密码   参数1:设备序列号   参数2:重置密码参数结构体   参数3:锁定信息结构体
     iRet = SADP_ResetPasswd_V40("DS-2CD2622FWD-IZS20180312BBWR681619114", &struResetParamV40, &struRetResetParamV40);
     if (iRet == 0)
     {
         //开启失败,获取错误码
         int iError = SADP_GetLastError();
         printf("SADP_ResetPasswd_V40 Failed!  Err(%d)\r\n", iError);
         if (iError == SADP_LOCKED)
         {
             printf("设备已锁定,锁定时间:%d 分钟.", struRetResetParamV40.bySurplusLockTime);
         }
         else if (iError == SADP_PASSWORD_ERROR)
         {
             printf("密码错误,剩余尝试修改次数:%d 次.", struRetResetParamV40.byRetryGUIDTime);
         }
         else if (iError == SADP_NOT_ACTIVATED)
         {
             printf("设备未激活");
         }
     }
     else
     {
         printf("SADP_ResetPasswd_V40 Succ!\r\n");
     }
 
     //释放资源
     SADP_Stop();
} 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Java是一种广泛应用的编程语言,而海康威视是一家知名的视听设备生产厂商,其提供的SDK包含了海康威视所生产的视频监控设备通信协议以及数据处理方案。基于海康威视SDK进行Java的二次开发可以使开发者在海康威视设备的基础上构建出更加灵活、高效的应用程序,提高了开发效率和安全性。 使用Java的特性来实现海康威视设备的二次开发,主要包括以下几个方面: 1. 处理设备的通信协议:使用Java的网络编程技术,基于海康威视SDK中所提供的设备通信协议进行二次开发,可以实现设备之间的数据交互。 2. 实现设备数据的解析:使用Java的数据处理技术,对从设备中获取的数据进行解析和处理,将数据转换成开发者想要的格式,以便进行进一步的数据处理。 3. 开发可视化界面:通过Java的图形用户界面(GUI)开发技术,基于海康威视SDK提供的数据处理方案,开发出用户友好的界面,实现设备的远程控制和监控。 通过基于海康威视SDK进行Java的二次开发,开发者可以轻松地实现海康威视设备的控制和监控,从而扩展了设备的功能和优化了用户体验。 ### 回答2: Java语言是当前应用非常广泛的编程语言之一,而海康威视则是国内领先的视频监控设备和解决方案的供应商之一,其SDK(软件开发工具包)提供了视频监控设备接口、流媒体接口等丰富的接口,使得设备厂商和软件开发者可以基于这些接口进行二次开发,实现更加专业化和个性化的应用。 如何通过Java语言来实现基于海康威视SDK的二次开发呢?首先我们需要在Java开发环境中添加海康威视SDK的jar包,然后根据SDK提供的接口进行编程。一般来说,SDK的使用大致可以分为以下几个步骤: 1. 初始化SDK环境:调用SDK提供的初始化接口完成SDK环境的初始化工作,包括设备搜索、连接、登录等工作。此外,还可以设置获取日志信息、设置报警回调等操作。 2. 获取设备信息:通过SDK提供的接口,可以获取监控设备的相关信息,包括设备类型、通道数、分辨率、帧率等,这些信息可以用于后续的开发工作。 3. 获取实时视频流:通过SDK提供的接口,可以获取监控设备传输的视频流数据,包括码流类型、码率、分辨率等,将视频数据解码后可以进行实时展示或者录制等操作。 4. 控制设备操作:通过SDK提供的接口,可以对监控设备进行各种控制操作,包括云台控制、预置点设置、图像参数调节等。 以上是基于海康威视SDK进行Java开发的一些常用操作,具体实现方式还需要根据不同的业务需求进行具体的编码工作。在实际开发过程中,我们还需要根据SDK提供的文档和示例代码进行参考和学习,以便更好地掌握SDK的使用技巧和开发经验。同时,我们还需要考虑安全、稳定性等因素,在保证功能实现的前提下,尽可能地减少软件系统的风险和漏洞。 ### 回答3: Java 是一种广泛使用的编程语言,在现代软件开发中非常流行。而海康威视是一家全球领先的视频监控解决方案提供商,其SDK具有一定的开放性和可定制性,可以用于二次开发。因此,Java 基于海康威视SDK实现二次开发是可行的。 首先,使用Java开发需要具备基本的Java编程知识、IDE开发环境和海康威视SDK技术文档。开发者可以通过访问海康威视的开发者网站,获取SDK的开发包和相关说明文档,从而开始二次开发。 其次,海康威视SDK提供了丰富的接口和工具,便于Java开发者调用和使用。通过SDK中提供的API,我们可以实现视频监控的实时预览、录像回放、设备管理等功能。同时,SDK还提供了多种编程语言和操作系统的支持,使得Java程序可以在不同平台上进行开发和运行。 最后,Java开发者可以结合SDK提供的示例代码和测试工具,对开发的程序进行测试和调试,确保其功能和性能能够满足要求。同时,Java开发者还应该遵循海康威视SDK的开发规范,尽可能地避免出现错误和异常。 总之,Java基于海康威视SDK实现二次开发是一项有挑战性的任务,需要具备Java编程技能和视频监控领域的相关经验。但是,通过充分利用SDK的开放性和可定制性,开发者可以实现更加灵活和高效的视频监控解决方案,为客户提供更好的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值