更新记录

1.0.2(2023-04-13)

1、增加ios支持

1.0.1(2023-03-08)

  1. 发布大华NetSDK插件

平台兼容性

Android Android CPU类型 iOS
适用版本区间:5.0 - 12.0 armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 适用版本区间:11 - 16

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


大华NetSDK

特别注意:大华官方的sdk写的很垃圾,这就导致我们很难封装,初始化账户的时候最好俩个接口一起调用,不然有可能初始化账户失败,ios版本不提供错误信息,提供的是错误码,自己去大华demo里面找对应的错误信息,大华如此垃圾,我是真没耐心一个一个错误码对应

提供方法

所有接口都是跟大华的一样,只是做成了uniapp插件

  1. LoadLibrarys 加载库,是自动加载的,这个可以不用,但是也有可能出现未加载完成,建议手动加载
  2. Init 初始化,全局只用初始化一次即可
  3. GetSDKVersion 获取版本号,大华这个接口有问题,基本没用
  4. SetAutoReconnect 设置断线重连回调,会触发 device_reconnect 事件
  5. SetConnectTime 设置连接设备超时时间和尝试次数
  6. SetNetworkParam 设置网络登录参数,参数中包含登录设备超时时间和尝试次数
  7. Cleanup 释放 SDK 资源。SDK 功能使用完后才能调用该接口
  8. StartSearchDevices 异步搜索同网段内 IPC、NVS 等设备,会触发 find_device 事件
  9. StopSearchDevices 停止异步搜索同网段内 IPC、NVS 等设备
  10. InitDevAccount 初始化账户(组播初始化接口)
  11. InitDevAccountByIP 根据设备 IP 初始化账户(单播初始化接口)
  12. StartSearchIPCWifi 软AP无线配网

回调事件

  1. find_device 搜索到设备以后,回传设备信息
  2. device_reconnect 设备断线重连以后,回传设备信息
  3. device_offline 设备离线以后,回传离线设备信息

LoadLibrarys (ios可以不调用)

let daHuaPlugin = uni.requireNativePlugin('leruge-dahua')
daHuaPlugin.LoadLibrarys(res => {
    // 返回code、msg、data,0是失败,1是成功,msg是对应提示信息,data都是空,不用理会
})

Init

let daHuaPlugin = uni.requireNativePlugin('leruge-dahua')
daHuaPlugin.Init(res => {
    // 返回code、msg、data,0是失败,1是成功,msg是对应提示信息,data都是空,不用理会
})

GetSDKVersion

let daHuaPlugin = uni.requireNativePlugin('leruge-dahua')
daHuaPlugin.GetSDKVersion(res => {
    // 返回code、msg、data,0是失败,1是成功,msg是对应提示信息,data中的version是版本号
})

SetAutoReconnect

let daHuaPlugin = uni.requireNativePlugin('leruge-dahua')
daHuaPlugin.SetAutoReconnect(res => {
    // 返回code、msg、data,0是失败,1是成功,msg是对应提示信息,data都是空,不用理会
})

SetConnectTime

let daHuaPlugin = uni.requireNativePlugin('leruge-dahua')
daHuaPlugin.SetConnectTime({
    wait_time: 10, // 毫秒级
    try_time: 10 // 链接次数
}, res => {
    // 返回code、msg、data,0是失败,1是成功,msg是对应提示信息,data都是空,不用理会
})

SetNetworkParam

let daHuaPlugin = uni.requireNativePlugin('leruge-dahua')
daHuaPlugin.SetNetworkParam({
    // 不是必选,需要那个传那个
    wait_time: 5000, // 等待超时时间(毫秒为单位)
    try_time: 1, // 连接尝试次数
    connect_time: 1500, // 连接超时时间(毫秒为单位)
    sub_connect_space_time: 10, // 子连接之间的等待时间(毫秒为单位)
    get_dev_info_time: 1000, // 子连接之间的等待时间(毫秒为单位)
    get_dev_info_time: 1000, // 获取设备信息超时时间
    connect_buf_size: 250*1024, // 每个连接接收数据缓冲大小(字节为单位)
    get_conn_info_time: 1000, // 获取子连接信息超时时间(毫秒为单位)
    search_record_time: 3000, // 按时间查询录像文件的超时时间(毫秒为单位)
    sub_disconnect_time: 60000, // 检测子链接断线等待时间(毫秒为单位)
    by_net_type: 1, // 网络类型, 0-LAN, 1-WAN
    by_play_back_buf_size: 4, // 回放数据接收缓冲大小(M为单位)
    detect_disconnect_time: 60, // 心跳包发送间隔(单位为秒),默认为10s,最小间隔为2s
    pic_buf_size: 2*1024*1024, // 实时图片接收缓冲大小(字节为单位)
}, res => {
    // 返回code、msg、data,0是失败,1是成功,msg是对应提示信息,data都是空,不用理会
})

Cleanup

let daHuaPlugin = uni.requireNativePlugin('leruge-dahua')
daHuaPlugin.Cleanup(res => {
    // 返回code、msg、data,0是失败,1是成功,msg是对应提示信息,data都是空,不用理会
})

StartSearchDevices

let daHuaPlugin = uni.requireNativePlugin('leruge-dahua')
daHuaPlugin.StartSearchDevices(res => {
    // 返回code、msg、data,0是失败,1是成功,msg是对应提示信息,data都是空,不用理会
})

StopSearchDevices

let daHuaPlugin = uni.requireNativePlugin('leruge-dahua')
daHuaPlugin.StartSearchDevices(res => {
    // 返回code、msg、data,0是失败,1是成功,msg是对应提示信息,data都是空,不用理会
})

InitDevAccount

let daHuaPlugin = uni.requireNativePlugin('leruge-dahua')
daHuaPlugin.InitDevAccount({
    mac: 'e4:24:6c:f6:c1:88',
    username: 'admin',
    password: 'ai900213',
    phone: '17080050266',
    email: 'leruge@163.com'
}, res => {
    // 返回code、msg、data,0是失败,1是成功,msg是对应提示信息,data都是空,不用理会
})

InitDevAccountByIP

let daHuaPlugin = uni.requireNativePlugin('leruge-dahua')
daHuaPlugin.InitDevAccountByIP({
    mac: 'e4:24:6c:f6:bf:f8',
    username: 'admin',
    password: 'ai900213',
    ip: '192.168.0.108',
    phone: '17080050266',
    email: 'leruge@163.com'
}, res => {
    // 返回code、msg、data,0是失败,1是成功,msg是对应提示信息,data都是空,不用理会
})

StartSearchIPCWifi

let daHuaPlugin = uni.requireNativePlugin('leruge-dahua')
daHuaPlugin.StartSearchIPCWifi({
    ip: '192.168.0.108',
    port: '37777',
    username: 'admin',
    password: 'ai900213',
    ssid: 'TP-LINK_6318',
    pwd: '12345678'
}, res => {
    // 返回code、msg、data,0是失败,1是成功,msg是对应提示信息,data都是空,不用理会
})

find_device

// 搜索到设备
plus.globalEvent.addEventListener('find_device', res => {
    // init_status:0是不支持初始化;1是未初始化;2是已经初始化,已经初始化的设备不能再次初始化,需要重置
    // res包括 version、ip、port、sub_mask、gateway、mac、device_type、manu、definition、is_dhcp、verify_data、serial_no、dev_soft_version、detail_type、vendor、dev_name、username、password、http_port、video_input_ch、remote_video_input_ch、video_output_ch、alarm_input_ch、alarm_output_ch、is_new_word_len、new_password、init_status、pwd_reset_way、special_ability、new_detail_type、is_new_username、new_username、pwd_find_version、un_login_func_mask、device_id、country_code、machine_group、ip_version_from
})

device_reconnect

// 设备离线事件
plus.globalEvent.addEventListener('device_offline', res => {
    // res包括 login_id、ip、port
})

device_reconnect

// 断线重连事件
plus.globalEvent.addEventListener('device_reconnect', res => {
    // res包括 login_id、ip、port
})

隐私、权限声明

1. 本插件需要申请的系统权限列表:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.VIBRATE" />

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问