更新记录

1.0.6(2024-11-12)

  1. 增加云台控制
  2. 修复IOS无法开启录音问题

1.0.4(2024-11-01)

增加透传命令

1.0.3(2024-07-05)

增加ios支持

查看更多

平台兼容性

Android Android CPU类型 iOS
适用版本区间:11.0 - 14.0 armeabi-v7a:支持,arm64-v8a:支持,x86:未测试 适用版本区间:15 - 17

原生插件通用使用流程:

  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原生插件配置”->”云端插件“列表中删除该插件重新选择


大华sdk

提供方法

  1. LoadLibrarys 加载库
  2. Init 初始化,会触发断线回调 device_offline
  3. StartSearchDevices 搜索设备,返回 search_id ,触发搜索回调 find_device
  4. StopSearchDevices 停止搜索
  5. InitDevAccount (经常性失败,建议使用ip)初始化设备,参数 szMac szUserName szPwd szCellPhone szMail
  6. InitDevAccountByIP 初始化设备,通过ip,参数 szIp szMac szUserName szPwd szCellPhone szMail
  7. LoginWithHighLevelSecurity 登录,参数 szIP nPort szUserName szPassword,返回 login_id
  8. Logout 登出
  9. setIP 设置IP,参数 szMac szIP szSubmask szGateway szUserName szPassWord

依赖登录的方法

  1. StartSearchIPCWifi wifi配网,依赖登录,参数 szSSID szKeys
  2. QueryRecordFile 查询本地录像列表,参数 nRecordFileType stTimeStart stTimeEnd ,返回 list ,内容 ch filename size starttime endtime driveno startcluster nRecordFileType bImportantRecID bHint bRecType framenum
  3. SetTimezone 设置时区,参数 szTimeZone 默认13,中国时区
  4. SetupRecord 开关录像,参数 status 设置,开始、关闭录像, 0-关闭录像,1-手动录像,2-自动录像
  5. GetRecordState 查看录像开关,参返回值 status 0-关闭录像,1-手动录像,2-自动录像
  6. ptzControl 云台控制,参数 ptz 0上;1下;2左;3右;4变倍+;5变倍-;6变焦+;7变焦-;8光圈+;9光圈-; speed 速度1-8 is_stop 布尔值开始还是停止
  7. setTime 设置时间,参数 timestamp 秒级时间戳
  8. getWifiList 获取wifi列表,返回值 list ,包含 szSSID szMacAddr byApConnected byLinkMode nRSSIQuality unApMaxBitRate byAuthMode byEncrAlgr byLinkQuality byWifiType
  9. TransmitInfoForWeb web透传,参数 cmd 透传命令,返回值 info 命令对应的结果

全局回调事件

  1. device_offline 回调包括 login_id 登录 id ip port
  2. find_device 回调包括 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

安卓权限

  1. android.permission.ACCESS_NETWORK_STATE
  2. android.permission.ACCESS_WIFI_STATE
  3. android.permission.CHANGE_WIFI_STATE

IOS权限

  1. com.apple.developer.networking.wifi-info
  2. com.apple.developer.networking.multicast

例子

<template>
    <view class="content">
        <button @click="LoginWithHighLevelSecurity()">LoginWithHighLevelSecurity</button>
        <button @click="TransmitInfoForWeb()">TransmitInfoForWeb</button>
        <input type="number" v-model="ptz" placeholder="操作">
        <button @click="ptzControl()">操作</button>
        <button @click="setIP()">设置ip</button>
        <button @click="setTime()">设置时间</button>
        <button @click="GetWifiList()">GetWifiList</button>
        <button @click="LoadLibrarys()">LoadLibrarys</button>
        <button @click="Init()">Init</button>
        <button @click="Cleanup()">Cleanup</button>
        <button @click="StartSearchDevices()">StartSearchDevices</button>
        <button @click="StopSearchDevices()">StopSearchDevices</button>
        <button @click="InitDevAccount()">InitDevAccount</button>
        <button @click="InitDevAccountByIP()">InitDevAccountByIP</button>
        <button @click="Logout()">Logout</button>
        <button @click="StartSearchIPCWifi()">StartSearchIPCWifi</button>
        <button @click="QueryRecordFile()">QueryRecordFile</button>
        <button @click="SetTimezone()">SetTimezone</button>
        <button @click="SetupRecord()">SetupRecord</button>
        <button @click="GetRecordState()">GetRecordState</button>
    </view>
</template>

<script>
    const dahuaNative = uni.requireNativePlugin('leruge-native-dahua')
    export default {
        data() {
            return {
                ptz: 0,
            }
        },
        onLoad() {
            plus.globalEvent.addEventListener('device_offline', res => {
                uni.showToast({
                    title: JSON.stringify(res),
                    icon: 'none'
                })
            })
            plus.globalEvent.addEventListener('find_device', res => {
                uni.showToast({
                    title: JSON.stringify(res),
                    icon: 'none'
                })
            })
        },
        methods: {
            // web透传
            TransmitInfoForWeb() {
                const res = dahuaNative.TransmitInfoForWeb({
                    cmd: '{"method":"configManager.getConfig","params":{"name":"Network"}}'
                })
                uni.showToast({
                    title: JSON.stringify(res),
                    icon: 'none'
                })
            },
            // 设置时间
            setTime() {
                const res = dahuaNative.setTime({
                    timestamp: 1730064888, // 秒级时间戳
                })
                uni.showToast({
                    title: JSON.stringify(res),
                    icon: 'none'
                })
            },
            // 设置ip
            setIP() {
                const res = dahuaNative.setIP({
                    szMac: 'd4:43:0e:c3:8b:40',
                    szIP: '192.168.0.103',
                    szSubmask: '255.255.255.0',
                    szGateway: '192.168.0.1',
                    szUserName: 'admin',
                    szPassWord: 'hsb12345678'
                })
                uni.showToast({
                    title: JSON.stringify(res),
                    icon: 'none'
                })
            },
            // 方向控制
            ptzControl() {
                const res = dahuaNative.ptzControl({
                    ptz: this.ptz, // 操作:0上;1下;2左;3右;4变倍+;5变倍-;6变焦+;7变焦-;8光圈+;9光圈-;
                    speed: 5, // 速度
                    is_stop: false, // 是否停止
                })
                uni.showToast({
                    title: JSON.stringify(res),
                    icon: 'none'
                })
            },
            GetWifiList() {
                const res = dahuaNative.getWifiList({search_time: 5000})
                uni.showToast({
                    title: JSON.stringify(res),
                    icon: 'none'
                })
            },
            LoadLibrarys() {
                const res = dahuaNative.LoadLibrarys()
                uni.showToast({
                    title: JSON.stringify(res),
                    icon: 'none'
                })
            },
            test() {
                const res = dahuaNative.test()
                uni.showToast({
                    title: JSON.stringify(res),
                    icon: 'none'
                })
            },
            Init() {
                const res = dahuaNative.Init()
                uni.showToast({
                    title: JSON.stringify(res),
                    icon: 'none'
                })
            },
            Cleanup() {
                const res = dahuaNative.Cleanup()
                uni.showToast({
                    title: JSON.stringify(res),
                    icon: 'none'
                })
            },
            StartSearchDevices() {
                const res = dahuaNative.StartSearchDevices()
                uni.showToast({
                    title: JSON.stringify(res),
                    icon: 'none'
                })
            },
            StopSearchDevices() {
                const res = dahuaNative.StopSearchDevices()
                uni.showToast({
                    title: JSON.stringify(res),
                    icon: 'none'
                })
            },
            InitDevAccount() {
                const res = dahuaNative.InitDevAccount({
                    szMac: 'd4:43:0e:c3:8b:40',
                    szUserName: 'admin',
                    szPwd: 'hsb12345678',
                    szCellPhone: '',
                    szMail: 'leruge@163.com'
                })
                uni.showToast({
                    title: JSON.stringify(res),
                    icon: 'none'
                })
            },
            InitDevAccountByIP() {
                const res = dahuaNative.InitDevAccountByIP({
                    szMac: 'd4:43:0e:c3:8b:40',
                    szUserName: 'admin',
                    szPwd: 'hsb12345678',
                    szCellPhone: '',
                    szMail: 'leruge@163.com',
                    szIp: '192.168.0.103'
                })
                uni.showToast({
                    title: JSON.stringify(res),
                    icon: 'none'
                })
            },
            StartSearchIPCWifi() {
                const res = dahuaNative.StartSearchIPCWifi({
                    szSSID: 'TP-LINK_6318',
                    szKeys: '12345678'
                })
                uni.showToast({
                    title: JSON.stringify(res),
                    icon: 'none'
                })
            },
            LoginWithHighLevelSecurity() {
                const res = dahuaNative.LoginWithHighLevelSecurity({
                    szUserName: 'admin',
                    szPassword: 'hsb12345678',
                    szIP: '192.168.0.103',
                    nPort: '37777',
                })
                uni.showToast({
                    title: JSON.stringify(res),
                    icon: 'none'
                })
            },
            Logout() {
                const res = dahuaNative.Logout()
                uni.showToast({
                    title: JSON.stringify(res),
                    icon: 'none'
                })
            },
            QueryRecordFile() {
                const res = dahuaNative.QueryRecordFile({
                    nRecordFileType: 0,
                    stTimeStart: '2024-06-09 00:00:00',
                    stTimeEnd: '2024-06-09 23:59:59',
                })
                uni.showToast({
                    title: JSON.stringify(res),
                    icon: 'none'
                })
            },
            SetTimezone() {
                const res = dahuaNative.SetTimezone({
                    szTimeZone: 24
                })
                uni.showToast({
                    title: JSON.stringify(res),
                    icon: 'none'
                })
            },
            SetupRecord() {
                const res = dahuaNative.SetupRecord({
                    status: 2
                })
                uni.showToast({
                    title: JSON.stringify(res),
                    icon: 'none'
                })
            },
            GetRecordState() {
                const res = dahuaNative.GetRecordState()
                uni.showToast({
                    title: JSON.stringify(res),
                    icon: 'none'
                })
            },
        }
    }
</script>

<style></style>

隐私、权限声明

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

安卓权限:+"android.permission.ACCESS_NETWORK_STATE", "android.permission.ACCESS_WIFI_STATE", "android.permission.CHANGE_WIFI_STATE" iOS权限:com.apple.developer.networking.wifi-info和com.apple.developer.networking.multicast

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

插件不采集任何数据

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

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