海康云眸 IoT API
  1. 移动端SDK
海康云眸 IoT API
  • 产品介绍
  • 能力概览
  • 错误码表
  • 报警类型表
  • 常见问题
  • 示例DEMO
  • 快速入门
    • 接口调用说明
    • 生成授权凭证
      POST
  • 基础服务能力
    • 设备分组管理
      • 新增组
      • 删除组
      • 更新组
      • 获得单个组详情
      • 查询所有节点列表
      • 查找组的下级节点
    • 设备管理
      • 注册设备
      • 注销设备
      • 修改设备名称
      • 获得单个设备信息
      • 获得设备列表
      • 获取设备总数
      • 查询设备状态
    • 设备确权
      • 确权流程说明
      • 下线确认
      • 上线确认
    • 通道管理
      • 查询设备下通道列表
      • 同步设备下通道
      • 修改通道名称
    • 人员管理
      • 添加人员
      • 更新人员信息
      • 删除人员信息
      • 获得单个人员详情
      • 人脸评分标准配置接口
      • 人员人脸更新
      • 人员人脸删除
  • 报警能力管理
    • 获取报警能力列表
    • 修改报警能力状态
  • 视频服务能力
    • 视频对接指南
    • 视频参数配置
      • 视频设备码流参数配置指南
      • 接口配置
        • 获取音视频单通道编码能力
        • 获取音视频单通道编码配置
        • 设置音视频单通道编码配置
    • 视频集成方案
      • web视频控件
      • UIKIT
      • 微信小程序
      • 移动端SDK
        • Android
        • IOS
        • 错误码对照表
      • 标准流预览
        • 开通标准流预览功能
        • 获取标准流预览地址
        • 获取预览/回放地址
      • 互动直播间
        • 创建直播间
        • 编辑直播间
        • 删除直播间
        • 查询直播间列表
        • 设置直播间状态
        • 账号充值
    • 设备视频加密
      • 关闭设备视频加密
      • 开启设备视频加密
    • 云台控制
      • 开始云台控制
      • 停止云台控制
      • 3D放大
    • 预置点操作
      • 添加预置点
      • 更新预置点
      • 清除预置点
      • 调用预置点
      • 加载预置点
    • 取流认证
      GET
    • 远程抓图
      POST
  • 门禁服务能力
    • 门禁对接指南
    • 卡片操作
      • 新增卡片
      • 删除卡片
      • 根据人员编号删除卡片
    • 门禁计划
      • 计划模板管理
        • 周计划模板添加/更新
        • 周计划模板获取
        • 周计划模板删除
        • 假日计划模板添加/更新
        • 假日计划模板获取
        • 假日计划模板删除
      • 门禁计划管理
        • 周计划配置
        • 周计划获取
        • 假日计划配置
        • 假日计划获取
        • 假日组计划配置
        • 假日组计划获取
        • 门禁计划配置
        • 门禁计划聚合配置
        • 门禁计划获取
        • 清空门禁计划
    • 权限分组
      • 权限组新增
      • 权限组更新
      • 权限组删除
      • 获取权限组列表
      • 权限组绑定人员
      • 权限组解绑人员
      • 权限组获取人员编号列表
      • 权限组绑定设备
      • 权限组解绑设备
      • 权限组获取设备序列号列表
      • 人员权限信息查询
    • 权限下发
      • 根据权限组下发权限
      • 查询下发失败记录
      • 下发所有失败人员
      • 清空设备本地权限
      • 获取设备能力集
      • 人员权限信息更新
    • 远程控门
      • 远程控门
      • 远程呼梯
    • 可视对讲
      • 设置可视对讲通知地址
      • 可视对讲交互事件通知
      • 获取可视对讲通知地址
    • 人员信息采集
      • 远程采集方式
        • 规则配置
        • 获取规则配置
        • 采集身份证信息
        • 采集卡信息
        • 采集指纹信息
        • 采集人脸信息
        • 获取人脸采集进度
      • 本地采集方式
        • 规则配置
        • 获取规则配置
        • 录入人员信息
        • 查询采集数据
        • 获取采集状态信息
        • 删除全部采集数据
        • 根据人员编号删除采集数据
    • 多重认证
      • 获取群组配置
      • 群组配置
      • 清除群组配置
      • 获取多重认证配置
      • 设置多重认证配置
    • 访客二维码生成
    • 设备本地事件查询
  • 边缘人脸服务能力
    • 边缘人脸对接指南
    • 人脸库管理
      • 创建人脸库
      • 删除全部人脸库
      • 删除单个人脸库
      • 获取所有人脸库基本参数
      • 批量设置人脸库基本参数
      • 获取单个人脸库基本参数
      • 设置单个人脸库基本参数
      • 查询人脸库剩余人脸数及磁盘容量
    • 人脸库人脸管理
      • 查询单个人脸库中人脸信息
      • 删除单个人脸库中人脸
    • 人脸下发入库
      • 人脸批量异步下发
      • 查询人脸异步下发任务状态
      • 查询人脸异步下发所有任务状态
      • 人脸下发底图入库状态查询
      • 人脸异步下发任务删除
    • 设置人脸比对参数配置
      • 设置人脸比对参数配置
      • 获取人脸比对参数配置
      • 设置人脸比对/陌生人比对联动配置
    • 客流统计
      • 客流统计参数配置
      • 客流统计参数配置获取
      • 查询客流数据
  • 消息通道
    • 对接指南
    • 消息类型定义
    • 消息通道API
      • 创建消费者
      • 消费消息
      • 提交偏移量
  • 其他设备能力
    • 萤石探测器
      • 获取探测器列表
      • 关联探测器
      • 设置探测器状态
      • 删除探测器
      • 获取可关联的IPC列表
      • 获取已关联的IPC列表
      • 设置探测器与IPC的关联关系
      • 修改探测器名称
      • 一键消警
    • 区域热度
      • 获取区域关注度配置
      • 区域关注度配置
      • 生成热度图
      • 获取热度图
      • 获取热度图配置
      • 设置热度图配置
    • 设备校时
      • 获取设备校时配置
      • 配置设备校时
      • 获取NTP服务器配置
      • 配置NTP服务器
      • 获取指定NTP服务器配置
      • 配置指定NTP服务器参数
    • 萤石云储存
      • 设备开通云存储
      • 开启/关闭云存储
      • 获取设备云存储信息
    • 视频安全帽
      • 设备本地开关权限控制
      • 设备录像开关
      • 设备立即上报按键触发抓图事件
      • 设备立即上报状态信息
      • 设备补光灯开关
      • 设备激光灯开关
    • 报警主机
      • 获取子系统列表
      • 获取防区列表
      • 获取主机状态
      • 获取所有防区状态
      • 子系统布防
      • 子系统撤防
    • 设备布撤防
  • 历史接口
    • 组管理
      • 新增组
      • 修改组
      • 删除组
      • 获取所有组
      • 查找组的下级节点
    • 组管理V2
      • 新增组
      • 修改组
      • 删除组
      • 获取所有组
      • 获取单个组信息
      • 查找组的下级节点
    • 设备管理
      • 注册设备
      • 注销设备
      • 获取设备列表
      • 获取单个设备信息
      • 修改设备名称
      • 获取设备总数
      • 设备布撤防
    • 通道管理
      • 查询设备下通道列表
      • 同步设备下通道
      • 修改通道名称
      • 设备抓图
    • 标准流预览
      • 关闭设备视频加密
      • 开通标准流预览功能
      • 获取标准流预览地址
      • 获取指定有效期标准流预览地址
    • 云台操作
      • 开始云台控制
      • 停止云台控制
      • 添加预置点
      • 调用预置点
      • 清除预置点
    • 门禁管理
      • 门禁管理
        • 人员下发
        • 人员更新
        • 人员查询
        • 人员删除
        • 卡下发
        • 卡更新
        • 卡查询
        • 卡删除
        • 人脸下发
        • 人脸修改
        • 人脸查询
        • 人脸删除
        • 访客二维码生成
        • 远程控门
        • 可视对讲交互事件通知
        • 可视对讲通知地址配置
      • 门禁批量管理
        • 注册人员信息
        • 批量注册人员信息
        • 更新人员信息
        • 查询人员列表
        • 删除人员信息
        • 批量下发
        • 查询任务状态
        • 查询任务详情
      • 门禁计划
        • 计划模板管理
          • 周计划模板添加/更新
          • 周计划模板获取
          • 周计划模板删除
          • 假日计划模板添加/更新
          • 假日计划模板获取
          • 假日计划模板删除
        • 门禁计划管理
          • 周计划配置
          • 周计划获取
          • 假日计划配置
          • 假日计划获取
          • 假日组计划配置
          • 假日组计划获取
          • 门禁计划配置
          • 门禁计划聚合配置
          • 门禁计划获取
          • 清空门禁计划
    • 超脑人脸管理
      • IO管理
        • 获取设备IO端口状态
        • 获取设备指定输出口信息
        • 配置设备指定输出口信息
        • IO输出
      • 人脸管理
        • 删除人脸
        • 查询人脸信息
        • 查询人脸列表
      • 人脸库管理
        • 创建人脸库
        • 查询人脸库容量
        • 删除全部人脸库
        • 删除指定人脸库
        • 查询人脸库基本参数
        • 设置人脸库基本参数
        • 查询指定人脸库基本参数
        • 设置指定人脸库基本参数
        • 查询人脸比对参数
        • 配置人脸比对参数
      • 人员信息管理
        • 注册人员信息
        • 查询人员列表
        • 注销人员信息
      • 获取磁盘基本信息
    • 下发任务管理
      • 下发人脸
      • 任务状态查询
      • 人脸下发状态查询
      • 删除任务
  • 健康码分析能力
    • 健康码识别
    • 行程码识别
    • 核酸报告识别
  • 获取access_token
    POST
  1. 移动端SDK

Android

1. 名词解释#

名词释义
oauthToken授权凭证接口获取的access_token
deviceSerial设备序列号
channelNo设备通道号
deviceSerial + channelNo摄像头唯一标志
PTZ云台控制,通过终端控制操作设备

2. 功能介绍#

功能说明
预览直播预览,可设置直播分辨率
回放(SD卡、云存储)回放:SD卡(本地)、云存储
设备对讲对讲(包含半双工对讲和全双工对讲)
预览、回放边播边录播放过程中录像
预览、回放边播边截屏播放过程中截屏
设备的设置功能提供设备设置接口api(声音、清晰度等)
云台控制设备控制接口(云台、变倍画面)
可视对讲可视对讲(接听、拒接、挂断)

3. 快速集成#

3.1. 环境准备#

支持 Android Studio 3.0 以上 支持 JDK 7.0 以上版本
支持 Android 手机系统 4.1 以上版本
支持ARM的armeabi-v7a 、arm64-v8a架构

3.2. Token获取#

SDK初始化所用到的oauthToken参数,为授权凭证接口获取的access_token,建议由服务端维护。

3.3. SDK下载#

登录开发者服务,进入下载页面下载

3.4. SDK集成#

手动拷贝下载SDK中的libs目录, 手动拷贝后需要在APP工程的目录下,并在build.gradle中配置:
         android{
             defaultConfig {
             ...
                 ndk {
                     abiFilters "armeabi-v7a", "arm64-v8a"
                 }     
             }     
             sourceSets {
                 main {
                     jniLibs.srcDirs = ['libs']
                 }
             }
             ...
             repositories 
             {
                 flatDir {
                     dirs 'libs'
                 }
             }
         }
        
注意: 目前支持”armeabi-v7a”和”arm64-v8a”(若对APK的大小有要求,只选择armeabi-v7a架构即可),所以需要添加
         ndk {
             abiFilters "armeabi-v7a", "arm64-v8a"
         }
        
注意: gradle添加依赖,引入App工程下SDK所需的gson和jmdns库
         dependencies {
             implementation(name: 'CloudOpenSDK-x.x.x',ext:'aar') //x.x.x对应的是SDK的版本号 
             implementation 'com.google.code.gson:gson:2.8.5'
             implementation 'com.squareup.okhttp3:okhttp:3.8.1'  //3.8.1或以上
             implementation 'javax.jmdns:jmdns:3.4.1'
         }
        

3.5. 配置权限#

         //网络状态权限 
         <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
         //网络权限 
         <uses-permission android:name="android.permission.INTERNET"/> 
         //录音权限 
         <uses-permission android:name="android.permission.RECORD_AUDIO" />
         //存储权限
         <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
         //可视对讲所需权限
         <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
        

3.6. 代码混淆#

目前SDK在打包时不能混淆,请添加以下内容:
         -dontwarn com.ezviz.**
         -keep class com.ezviz.** { *;}
         
         -dontwarn com.ez.**
         -keep class com.ez.** { *;}
         
         -dontwarn com.hc.**
         -keep class com.hc.** { *;}
         
         -dontwarn com.neutral.netsdk.**
         -keep class com.neutral.netsdk.** { *;}
         
         -dontwarn com.hik.**
         -keep class com.hik.** { *;}
         
         -dontwarn com.hikvision.audio.**
         -keep class com.hikvision.audio.** { *;}
         
         -dontwarn com.hikvision.keyprotect.**
         -keep class com.hikvision.keyprotect.** { *;}
         
         -dontwarn com.hikvision.sadp.**
         -keep class com.hikvision.sadp.** { *;}
         
         -dontwarn com.hikvision.netsdk.**
         -keep class com.hikvision.netsdk.** { *;}
         
         -dontwarn com.hikvision.wifi.**
         -keep class com.hikvision.wifi.** { *;}
         
         -dontwarn com.hikvision.cloud.sdk.**
         -keep class com.hikvision.cloud.sdk.** { *;}
         
         -dontwarn com.videogo.**
         -keep class com.videogo.** { *;}
         
         -dontwarn okhttp3.**
         -keep class okhttp3.** { *;}
         
         -dontwarn com.mediaplayer.audio.**
         -keep class com.mediaplayer.audio.** { *;}
         
         -dontwarn org.MediaPlayer.PlayM4.**
         -keep class org.MediaPlayer.PlayM4.** { *;}
         
         -dontwarn com.sun.jna.**
         -keep class com.sun.jna.**{*;}
         
         #Gson混淆配置
         -keepattributes Annotation
         -keep class sun.misc.Unsafe { *; }
         -keep class com.idea.fifaalarmclock.entity.*
         -keep class com.google.gson.stream.* { *; }
         #引用mars的xlog,混淆配置
         -keep class com.tencent.mars.** {
             public protected private *;
         }
        

3.7. SDK初始化#

一般建议在application中初始化
         CloudOpenSDK.getInstance()
             .setLogDebugMode(true) // 默认日志开关状态:打开,正式发布需要关掉
             //sdk数据缓存加密开关(例如SP存储),放在init()方法前设置
             .setDataCacheEncrypt(true, "123456")//密码长度不限制
             .init(
             this,
             "服务端下发的oauthToken",
             new OnCommonCallBack() {
                 @Override
                 public void onSuccess() {
                     Log.d("AppApplication", "初始化成功");
                 } 
                 @Override
                 public void onFailed(Exception e) {
                     Log.d("AppApplication", "初始化失败");
                 }
             });
        

3.8. 预览#

实现代码如下:
         // 预览
         // 创建播放器
         CloudVideoPlayer player=CloudOpenSDK.getInstance().createPlayer(mDeviceSerial, mChannelNo);
         // 设置播放器的显示
         Surface player.setSurfaceHolder(mSurfaceView.getHolder());
         // 设备如果设置了视频加密,需要设置视频加密密码,默认为设备的6位验证码 
         player.setPlayVerifyCode("设备验证码"); 
         // 开始预览播放
         player.startRealPlay();
         // 设置播放监听
         player.setOnRealPlayListener(new CloudVideoPlayer.OnRealPlayListener() {
             @Override
             public void onVideoSizeChanged(int videoWidth, int videoHeight) {}     @Override     public void onRealPlaySuccess() {
             // 播放成功
             }
             @Override
             public void onStopRealPlaySuccess() {// 停止播放成功}
             @Override
             public void onRealPlayFailed(int errorCode, String moduleCode, String description, String sulution) {
                 if (errorCode == 400035 || errorCode == 400036) {
                     // 回调时查看errorCode,如果为400035(需要输入验证码)和400036(验证码错误),则需要开发者自己处理让用户重新输入验证密码,并调用setPlayVerifyCode设置密码,然后重新启动播放
                 }
             }
         });
         //停止直播
         player.stopRealPlay();
         //释放资源
         player.release();
        
说明:预览播放成功后可以进行以下操作:录像、拍照、对讲、云台控制、声音开关、视频画面缩放,详见CloudVideoPlayer类,其中设备控制该接口的如云台控制、对讲,属于限制级接口,要优选通过判断设备的能力集来调用,设备能力集请查看EZDeviceInfo对象的属性值来判断具体方法;
         //开启录像,recordFile录制本地路径,例如:
         Environment.getExternalStorageDirectory().getPath()+"/abc" player.startLocalRecordWithFile(String recordFile)
         //结束本地直播流录像与startLocalRecordWithFile成对使用
         player.stopLocalRecord()
         //截图
         player.capturePicture()
         //声音开关
         player.openSound();
         player.closeSound(); 
         //PTZ 云台控制接口,该接口为耗时操作,必须在线程中调用 
         CloudOpenSDK.getInstance().controlPTZ(
         String deviceSerial, //设备序列号
         int channelNo, //通道号
         EZConstants.EZPTZCommand command,//ptz控制命令
         EZConstants.EZPTZAction action,//控制启动/停止
         int speed);//速度(0-2)
        
说明:CloudVideoPlayer中的setVideoLevel设置视频清晰度(videoLevel),此调节可以在视频播放前设置也可以在视频播放成功后设置,视频播放成功后设置了清晰度需要先停止播放stopRealPlay然后重新开启播放startRealPlay才能生效。
         /**
          * 设置指定监控点视频清晰度
          * <p>
          * 该接口为耗时操作,必须在线程中调用
          * </p>
          *
          * @param videoLevel 清晰度 0-流畅 1-均衡 2-高品质 3-超清
          * @return
          */
         player.setVideoLevel(levelVal);
         //设置成功
         // 停止播放 Stop play
         player.stopRealPlay();
         // 开始播放 start play
         player.startRealPlay();
        

3.9. 回放#

实现代码如下:
         //回放 
         CloudVideoPlayer player = 
         CloudOpenSDK.getInstance().createPlayer(mDeviceSerial, mChannelNo); 
         //设置播放器的显示Surface
         player.setSurfaceHolder(mBackPlayerSv.getHolder());
         //设备加密的需要传入密码
         //该接口必须在收到400035(需要输入验证码)和400036(验证码错误)错误回调时调用 
         player.setPlayVerifyCode(ConfigCst.VERIFY_CODE); //设置回放回调 
         player.setOnBackPlayListener(new CloudVideoPlayer.OnBackPlayListener() {
             @Override
             public void onVideoSizeChanged(int videoWidth, int videoHeight) {}     
             @Override
             public void onBackPlaySuccess() {//回放成功} 
             @Override
             public void onStopBackPlaySuccess() {//停止回放成功}
             @Override
             public void onBackPlayFailed(int errorCode, String moduleCode, String description, String sulution) {
             if (errorCode == 400035 || errorCode == 400036) {
             //回调时查看errorCode,如果为400035(需要输入验证码)和400036(验证码错误),则需要开发者自己处理让用户重新输入验证密码,并调用setPlayVerifyCode设置密码,然后重新启动播放
             }
             }
         });
         /**
           * 开始云存储远程回放
           * @param cloudFile 云存储文件信息  参见下文中的 查询云存储录像信息列表
           * @return  true 表示成功, false 表示失败
           */
         player.startPlayback(EZCloudRecordFile cloudFile); 
         //或者
         /**
           * 开始远程SD卡回放
           * @param deviceFile SD卡文件信息  参见下文中的 查询远程SD卡存储录像信息列表
           * @return  true 表示成功, false 表示失败
           */
         player.startPlayback(EZDeviceRecordFile deviceFile);
         //或者
         /**
           * 开始远程SD卡回放---按时间回放
           * @param startTime 开始时间
           * @param stopTime 结束时间
           * @return  true 表示成功, false 表示失败
           */
         player.startPlayback(Calendar startTime, Calendar stopTime); 
         //停止远程回放  
         player.stopPlayback();
        
查询云存储和远程SD卡存储录像信息列表
         /**
         * 查询云存储录像信息列表
         * 该接口中有网络操作,需要在线程中调用
         * @param deviceSerial 设备序列号
         * @param cameraNo     camera的序号,EZCameraInfo.cameraNo
         * @param startTime    查询时间范围开始时间
         * @param endTime      查询时间范围结束时间
         * @return 云存储录像信息列表
         * @throws BaseException
         */
         CloudOpenSDK.getEZOpenSDK().searchRecordFileFromCloud(String deviceSerial, int cameraNo, Calendar startTime, Calendar endTime);
         /**
          * 查询远程SD卡存储录像信息列表
          * 该接口为耗时操作,必须在线程中调用
          */
          CloudOpenSDK.getEZOpenSDK().searchRecordFileFromDevice(String deviceSerial, int cameraNo, Calendar startTime, Calendar endTime);
        
回放播放成功后可以进行以下操作:录像、拍照、声音开关、拖动进度播放、倍数回放,具体方法见CloudVideoPlayer类。
         /**
          * 设置回放的倍数(快慢)
          * {@link com.videogo.openapi.EZConstants.EZPlaybackRate}
          * <li>1倍:   EZ_PLAYBACK_RATE_1(1)</li>
          * <li>4倍:   EZ_PLAYBACK_RATE_4(4)</li>
          * <li>1/4倍: EZ_PLAYBACK_RATE_4_1(5)</li>
          * <li>6倍:   EZ_PLAYBACK_RATE_8(6)</li>
          * <li>1/8倍: EZ_PLAYBACK_RATE_8_1(7)</li>
          * <li>16倍:  EZ_PLAYBACK_RATE_16(8)</li>
          * <li>1/16倍:EZ_PLAYBACK_RATE_16_1(9)</li>
          *
          * @param rate
          * @return
          */
         player.setPlaybackRate(EZConstants.EZPlaybackRate rate);
        

3.10. 可视对讲#

实现代码如下:
         CloudVideoPlayer player = 
         CloudOpenSDK.getInstance().createPlayer(mDeviceSerial, mChannelNo);
         //设备加密的需要传入密码
         //该接口必须在收到400035(需要输入验证码)和400036(验证码错误)错误回调时调用 
         player.setPlayVerifyCode(String verifyCode);
         //开启对讲 
         player.startVoiceTalk(); 
         //关闭对讲
         player.stopVoiceTalk();
         //注意对于半双工对讲:需要调用上面接口开启对讲
         //开启对讲后能听到设备端声音,但是设备端听不到自己的声音,需要以下操作
         setVoiceTalkStatus
         //设备端听,手机端说
         player.setVoiceTalkStatus(true);
         //手机端听,设备端说
         player.setVoiceTalkStatus(false);
         //设置对讲监听
         player.setOnVoiceTalkListener(new 
         CloudVideoPlayer.OnVoiceTalkListener() {
         @Override
         public void onVoiceTalkSuccess() {
         }
         @Override
         public void onVoiceTalkFail(int errorCode, String moduleCode,   String 
         description, String sulution) {
         //回调时查看errorCode,如果为400035(需要输入验证码)和400036(验证码错误),
         //则需要开发者自己处理让用户重新输入验证密码,并调用setPlayVerifyCode设置密码,然后
         重新启动播放 
         }
         });
        
说明:对讲流程需要根据设备的对讲能力进行区分处理。EZDeviceInfo中的isSupportTalk可获取到设备的对讲能力,0-不支持对讲,1-支持全双工对讲,3-支持半双工对讲。 同一设备需要开启不同功能(直播/回放/对讲)的播放器时,需要分别对每个功能创建一个播放器,播放器的功能是单一的。关于对讲功能,如果播放有声音输出,则在开启对讲前需要关闭播放的声音closeSound,关闭对讲后开启播放的声音openSound,详见Demo。
可视对讲就是预览、对讲和同步信令功能的组合。在接听前需要判断呼叫的设备的状态若为响铃中(ring),则可以接听,然后再同步接听信令。在拒接前也一样需要判断其状态为响铃中,则可以拒接,然后再同步拒接信令。挂断则分为两种:一种是呼叫设备挂断,这种情况下需要App端通过获取通话状态方法getVideoIntercomCallStatus()判断其状态若为空闲中(idle),则调用stop预览和对讲。另一种是App端主动挂断,这种情况下,只要同步挂断信令、stop预览和对讲即可。具体实现,详见Demo。
接听、挂断、拒接,实现代码如下:
         TalkCallInfo talkCallInfo = new TalkCallInfo(); 
         talkCallInfo.setDeviceSerial(mDeviceSerial);//设备序列号 
         talkCallInfo.setRoomNum("102");//房间号,例如102中1是楼层号,02是房间号 
         talkCallInfo.setPeriodNumber("1");//期号 
         talkCallInfo.setBuildingNumber("1");//楼号
         talkCallInfo.setUnitNumber("1");//单元号 
         talkCallInfo.setFloorNumber("1");//层号
         talkCallInfo.setDevIndex("1");//设备序号,非必填
         talkCallInfo.setUnitType(HConfigCst.UnitType.WALL);//类型: outdoor门口机,wall围墙机
         /**
         * 同步信令 包括接听 挂断 拒接等等
         * cmdType:HConfigCst.CallCommand.CALL_ANSWER 接听
         * cmdType:HConfigCst.CallCommand.CALL_HANGUP 挂断
         * cmdType:HConfigCst.CallCommand.CALL_REJECT 拒接
         * cmdType:HConfigCst.CallCommand.BELL_TIMEOUT 响铃超时
         */
         public void 
         sendVideoIntercomCallSignal(final TalkCallInfo talkCallInfo,final String cmdType,final OnCommonCallBack cb) {
             VideoIntercomCallManager.sendVideoIntercomCallSignal(talkCallInfo,cmdType, cb);
         }
         //调用方法 
         CloudOpenSDK.getInstance().sendVideoIntercomCallSignal(talkCallInfo,
                 HConfigCst.CallCommand.CALL_HANGUP,
                 new OnCommonCallBack() {
                     @Override
                     public void onSuccess() {//挂断成功}
                     @Override
                     public void onFailed(Exception e) {}
                 });
         /**
          * 获取通话状态
          */
         public void getVideoIntercomCallStatus(final String deviceSerial,final  OnCommonCallBackV2<String> cb);
         //调用,返回状态有三种:
         //空闲:HConfigCst.IDLE
         //响铃中:HConfigCst.RING
         //通话中:HConfigCst.ONCALL
         CloudOpenSDK.getInstance().getVideoIntercomCallStatus("设备序列号",
             new OnCommonCallBackV2<String>() {
             @Override
             public void onSuccess(String data) {
                 if (HConfigCst.CallStatus.RING.equals(status)) {
                     //TODO接听、拒接
                 }
             }
             @Override
             public void onFailed(Exception e) {}
         });
        

3.11. 局域网设备预览#

注意:
1、在局域网设备预览前,请确保设备已配网或已连网。
2、在局域网设备预览前,请确保手机与设备处于同一局域网或手机直接连接支持热点模式的设备。
简要流程如下:
1、在同一局域网下,搜索到该设备或者手动添加该设备。
2、判断该设备是否激活。
3、判断该设备是否多通道。
4、进行登录操作,登陆成功后进行局域网预览相关操作。

3.11.1找到该设备信息#

通过EZHCNetDeviceSDK.getInstance().startLocalSearch()接口进行搜索,搜索到一台设备就回调一次EZSADPDeviceInfo信息。
注意:
1、搜索到的EZSADPDeviceInfo.getDeviceSerial()中的序列号是全信息(例如CS-C6CN-3B2WFR0120181201CCCHC74540922),真正的序列号为最后几位(例如C74540922),可根据这个进行判断相对应的设备。
2、搜索接口可能长时间没有返回结果(原因:1.不在同一局域网;2.该局域网下没有设备;3.扫描超时;),这时候建议开发者设置一个超时时间或者重试机制。
3、记得在功能使用结束后或者页面的onDestroy()处,调用EZHCNetDeviceSDK.getInstance().stopLocalSearch()停止搜索。
4、建议在调用startLocalSearch()前请调用下stopLocalSearch()方法。
实现代码如下:
         //局域网设备搜索开始接口
         EZHCNetDeviceSDK.getInstance().startLocalSearch(new EZHCNetDeviceSDK.SadpDeviceFoundListener() {
             @Override
             public void onDeviceFound(final EZSADPDeviceInfo sadpDeviceInfo) {
                 LogUtil.d(TAG,
                         "onDeviceFound  " + sadpDeviceInfo.getDeviceSerial() + "  " + sadpDeviceInfo.getDeviceSerial());
                 //判断设备是否已激活
                 if (sadpDeviceInfo.isActived()){
                 //已激活,则进行下一步的操作
                 }else{
                  //未激活,则先跳到激活页面进行激活操作
                 }
             }
         });
         //局域网设备激活接口,这里的序列号为全序列号信息
         EZHCNetDeviceSDK.getInstance().activeDeviceWithSerial(mSeriNo, mPassword)
         //局域网设备搜索停止接口
         EZHCNetDeviceSDK.getInstance().stopLocalSearch();
        
注:修改设备验证码操作,详见Demo中的LanDeviceActivity.java类中的modifyVerificationCode()方法。

3.11.2.局域网登录#

         /**
              * 如果知道设备的IP和端口号,则不需要进行搜索操作,可直接进行登录操作
              *
              * @param userName 设备管理员名称,默认admin
              * @param pwd 设备管理员密码,海康设备默认为Hik+验证码,萤石设备默认为验证码
              * @param deviceip 设备Ip地址
              * @param port    设备端口号
              */
         EZHCNetDeviceSDK.getInstance().loginDeviceWithUerName(String userName, String pwd, String deviceip, int port);
        

3.11.3.是否多通道#

登录成功后,判断设备是否多通道:
         if (loginDeviceInfo.getByChanNum() + loginDeviceInfo.getByIPChanNum() > 1) {
            // 多通道
         } else if (loginDeviceInfo.getByChanNum() + loginDeviceInfo.getByIPChanNum() == 1) {
             if (loginDeviceInfo.getByChanNum() > 0) {
                //单通道
             } else {
                 //没有通道,例如NVR下面没有挂载任何设备
             }
         } else {
         //设备不支持预览操作
             showNotSupportViewDailog();
         }
        

3.11.4.局域网预览#

实现代码如下:
         //局域网预览
         //创建播放器
         LanVideoPlayer mLanVideoPlayer = CloudOpenSDK.getInstance().createLanPlayer(mUserId, mChannelNo, 1);
         mLanVideoPlayer.setSurfaceHolder(mSurfaceView.getHolder());
         //设置播放监听
         mLanVideoPlayer.setLanPlayListener(new CloudOpenSDKListener.OnLanRealPlayListener() {
             @Override
             public void onVideoSizeChanged(int videoWidth, int videoHeight) {
             }
             @Override
             public void onRealPlaySuccess() {
                 LogUtils.deBug("LanVideoPlayer onRealPlaySuccess");
                 //预览成功
             }
             @Override
             public void onStopRealPlaySuccess() {
                 LogUtils.deBug("LanVideoPlayer onStopRealPlaySuccess");
                 //停止预览成功
             }
             @Override
             public void onRealPlayFailed(int errorCode, String moduleCode, String description, String sulution) {
                 LogUtils.deBug("LanVideoPlayer onRealPlayFailed");
                 //预览失败
             }
         });
         //开始预览
         mLanVideoPlayer.startRealPlay();
         //释放资源
         mLanVideoPlayer.release();
         //停止预览
         mLanVideoPlayer.stopRealPlay();
        
说明:预览播放成功后可以进行以下操作:录制、抓图、声音开关、
         //开启声音
         mLanVideoPlayer.openSound();
         //关闭声音
         mLanVideoPlayer.closeSound();
         //开始录制
         mLanVideoPlayer.startRecordingEx(recordPath);
         //停止录制
         mLanVideoPlayer.stopRecordingEx();
         //抓图
         mLanVideoPlayer.capturePicture(picPath);
        
详细的例子,请详见Demo。

4. 错误码#

错误码说明
10100服务器异常
10101服务平台服务器返回数据异常
10102接口调用过于频繁
10105请求包含语法错误或无法完成请求
10110SDK初始化失败
10111SDK未初始化,请初始化
10125token失效,请刷新
10150同步信令失败
10151获得可视对讲通话状态异常
10160云台控制操作异常

5. 常见问题(FAQ)#

No.10001
Q**:**安卓SDK是否提供混淆规则
A**:**没有混淆规则,对接时不要混淆开放平台的SDK
No.10002
Q**:**安卓SDK预览时报Could not find class ‘com.google.gson.Gson’
A**:**安卓SDK预览时报Could not find class ‘com.google.gson.Gson’, referenced from method;缺少了gson的包,需要引入
No.10003
Q**:**预览时提示“相同取流正在处理,未成功,拒绝本次处理
A**:**预览时提示“相同取流正在处理,未成功,拒绝本次处理”是由于客户端有重连机制,上一次取流的操作还未得到响应,下一次就开始取流了导致重复请求,主要原因可能是由于设备所在网络情况不好响应慢或者频繁上下线导致
No.10004
Q**:**清晰度:流畅、均衡、高清、超清,这几个里边的流畅和均衡,是固定分辨率,还是根据网速给出的建议分辨率?
A**:**是固定的分辨率
No.10005
Q**:**我调用了startRealPlay()方法,视频播放器去还是黑色的?
A**:**请检查下surfaceView的holder是否创建完成
No.10006
Q**:**120010是设备验证码输入错误的意思,验证码是正确的,就是一直报错?
A**:**设备验证码输入错误了,注意标签上六位大写字母为验证码,这里的验证码是区分大小写的

【海康云眸】API开发者 微信交流群

用微信扫右侧二维码,加入【海康云眸】API开发者 交流群,互助沟通

扫码加入交流群
上一页
微信小程序
下一页
IOS
Built with