IP 摄像机设备控制

更新时间:2023-04-13 09:36:19下载pdf

涂鸦通过 DP(设备功能)来控制设备,并且通过标准化的设备功能实现设备与 App 之间的交互。IPC SDK 基于智能生活 App SDK 封装了一套智能摄像机的扩展功能。

功能说明

  • 有关常规智能设备的控制,请参考 设备控制

  • App 和云端通过设备功能来控制智能设备,并且通过标准化的设备功能实现设备与 App 之间的交互。有关 IPC SDK 中定义的所有设备功能,请参考下文 设备功能常量

  • IPC 设备功能控制涉及到的额外的类如下所示:

    类名(协议名) 说明
    ThingSmartCameraDPManager 提供通过设备功能与设备通信的能力
    ThingSmartCameraDPObserver 提供监听设备功能状态变化的能力

获取对象

初始化设备

接口说明

- (instancetype)initWithDeviceId:(NSString *)devId;

参数说明

参数 说明
devId 设备 ID

添加或移除设备状态监听

接口说明

/// 添加设备状态变化监听
- (void)addObserver:(id<ThingSmartCameraDPObserver>)observer;

/// 移除设备状态变化监听
- (void)removeObserver:(id<ThingSmartCameraDPObserver>)observer;

参数说明

参数 说明
observer 接口监听,需要实现 ThingSmartCameraDPObserver 协议

查询状态

查询设备功能

接口说明

- (BOOL)isSupportDP:(ThingSmartCameraDPKey)dpName;

参数说明

参数 说明
dpName 设备功能 ID

返回值

类型 说明
BOOL 是否支持指定的设备功能

查询设备功能的值

接口说明

查询设备功能的值,直接获取缓存中的值,如果不支持此设备功能,返回 nil。

- (id)valueForDP:(ThingSmartCameraDPKey)dpName;

参数说明

参数 说明
dpName 设备功能的 ID

返回值

参数 说明
id 需要根据对应的设备点类型,转换成对应类型的值,详情可以参考下文 设备功能常量

异步查询设备功能的值

除了存储卡相关功能外,不建议使用该接口。

接口说明

- (void)valueForDP:(ThingSmartCameraDPKey)dpName success:(TYSuccessID)success failure:(TYFailureError)failure;

参数说明

参数 说明
dpName 设备功能的 ID
success 成功回调,返回指定设备功能的当前值
failure 失败回调,error 表示错误信息

下发数据

接口说明

设置设备功能的值。

- (void)setValue:(id)value forDP:(ThingSmartCameraDPKey)dpName success:(TYSuccessID)success failure:(TYFailureError)failure;

参数说明

参数 说明
value 设备功能的值,数值型或者布尔型的值,需要包装成 NSNumber
dpName 设备功能的 ID
success 成功回调,并返回指定设备功能当前的值
failure 失败回调,error 表示错误信息
  • 除了部分存储卡状态的设备功能,摄像机在设备功能状态变化时,会主动上报到云端。IPC SDK 会实时更新设备功能状态缓存,所以大部分情况下,直接获取缓存中设备功能的值即可。
  • 异步查询设备功能的值,是下发 NULL 到设备端,正常情况下,设备端收到 NULL 的设备功能数据后,会主动上报一次对应设备功能的值。但是这个行为是由摄像机制造商实现的。如果制造商没有实现这个逻辑,下发 NULL 后会导致摄像机固件程序崩溃。所以在使用此接口时,请向制造商确定他们是否对这些设备功能正确处理了 NULL 的逻辑。

数据回调

ThingSmartCameraDPObserver 协议提供监听设备主动上报的设备功能状态变化的能力。下发设置设备功能的值以后,设备也会再主动上报一次更新后的值。

接口说明

设备功能状态变化代理回调。

- (void)cameraDPDidUpdate:(ThingSmartCameraDPManager *)manager dps:(NSDictionary *)dpsData;

参数说明

参数 说明
manager 触发回调的 ThingSmartCameraDPManager 对象
dpsData 发生变化的设备功能的 ID 和当前的值,格式为 { dpName: value }

示例代码

Objective-C:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.dpManager = [[ThingSmartCameraDPManager alloc] initWithDeviceId:self.devId];
        [self.dpManager addObserver:self];
        self.osdSwitch = [[self.dpManager valueForDP:ThingSmartCameraBasicOSDDPName] boolValue];
}

- (void)openOSD {
    if ([self.dpManager isSupportDP:ThingSmartCameraBasicOSDDPName]) {
        [self.dpManager setValue:@(YES) forDP:ThingSmartCameraBasicOSDDPName success:^(id result) {
              self.osdSwitch = [result boolValue];
        } failure:^(NSError *error) {
                        // 网络错误
        }];
    }
}

#pragma mark - ThingSmartCameraDPObserver
- (void)cameraDPDidUpdate:(ThingSmartCameraDPManager *)manager dps:(NSDictionary *)dpsData {
    // 如果变化的设备功能中包含时间水印开关的设备功能
    if ([dpsData objectForKey:ThingSmartCameraBasicOSDDPName]) {
        self.osdSwitch = [[dpsData objectForKey:ThingSmartCameraBasicOSDDPName] boolValue];
    }
}

Swift:

override func viewDidLoad() {
    super.viewDidLoad()
    self.dpManager = ThingSmartCameraDPManager(deviceId: self.devId)
    self.dpManager.addObserver(self)
    if self.dpManager.isSupportDP(.basicOSDDPName) {
        self.osdSwitch = self.dpManager.value(forDP: .basicOSDDPName) as! Bool
    }
}

func openOSD() {
    // 判断设备是否支持此设备功能
    guard self.dpManager.isSupportDP(.basicOSDDPName) else {
        return
    }
    self.dpManager.setValue(true, forDP: .basicOSDDPName, success: { result in
        self.osdSwitch = result as! Bool
    }) { _ in
        // 网络错误
    }
}

func cameraDPDidUpdate(_ manager: ThingSmartCameraDPManager!, dps dpsData: [AnyHashable : Any]!) {
    // 如果变化的设备功能中包含时间水印开关的功能
    if let osdValue = dpsData[ThingSmartCameraDPKey.basicOSDDPName] {
        self.osdSwitch = osdValue as! Bool
    }
}

设备功能常量

目前已开放的摄像机标准设备功能,都以字符串常量的形式定义在 ThingSmartCameraDPManager.h 中,类型重定义为 ThingSmartCameraDPKey。常量名以 ThingSmartCamera+功能+DPName 的形式组成。本小节介绍 IPC SDK 中定义的所有设备功能。

基础功能

设备功能 数据类型 取值范围 说明
BasicIndicator Boolean
  • YES:开
  • NO:关
正常状态下的指示灯开关
BasicFlip Boolean
  • YES:开
  • NO:关
视频画面翻转
BasicOSD Boolean
  • YES:开
  • NO:关
视频时间水印
BasicPrivate Boolean
  • YES:开
  • NO:关
隐私模式,打开后,摄像机不采集音视频
BasicNightvision String
  • 0:自动
  • 1:关闭
  • 2:打开
摄像机夜视功能

移动侦测报警

设备功能 数据类型 取值范围 说明
BasicPIR String
  • 0:关闭
  • 1:低灵敏度
  • 2:中灵敏度
  • 3:高灵敏度
人体红外线感应
MotionDetect Boolean
  • YES:开
  • NO:关
移动侦测报警开关
MotionSensitivity String
  • 0:低
  • 1:中
  • 2:高
移动侦测灵敏度

声音侦测报警

设备功能 数据类型 取值范围 说明
DecibelDetect Boolean
  • YES:开
  • NO:关
声音侦测报警开关
DecibelSensitivity String
  • 0:低
  • 1:高
声音侦测灵敏度

存储卡管理

设备功能 数据类型 取值范围 说明
SDCardStatus Enum
  • 1:正常
  • 2:异常(SD卡损坏或格式不对)
  • 3:空间不足
  • 4:正在格式化
  • 5:无 SD 卡
存储卡状态,只能读取
SDCardStorage String - 存储卡容量,只能读取
SDCardFormat Boolean YES:开始格式化 格式化存储卡,只能下发
SDCardFormatState Integer
  • -2000:SD卡正在格式化
  • -2001:SD卡格式化异常
  • 1-100:格式化进度
存储卡格式化状态或者进度,只能读取
SDCardRecord Boolean
  • YES:开
  • NO:关
设备视频录制开关,视频录像保存在存储卡中
RecordMode String
  • 1:事件录像
  • 2:连续录像
设备存储卡录像模式

SDCardStorage 的值是一个由总容量、已使用容量、空闲容量、间隔符(|)拼接起来的字符串,单位是 kb。如 16777216|1048576|15728640 表示总容量是 16Gb,已经使用 1Gb,剩余空闲容量为 15Gb。

云台控制

设备功能 数据类型 取值范围 说明
PTZControl String
  • 0:上
  • 2:右
  • 4:下
  • 6:左
控制云台摄像机向指定方向转动,只能下发
PTZStop Boolean YES:停止转动 停止云台摄像机的转动

低功耗

设备功能 数据类型 取值范围 说明
WirelessAwake Boolean
  • YES:唤醒
  • NO:休眠
设备是否休眠,下发时,只能下发 YES 唤醒设备
WirelessPowerMode String
  • 0:电池供电
  • 1:插电供电
设备供电模式
WirelessElectricity Integer 1-100:电量 设备当前电量百分比,只能读取
WirelessLowpower Integer 1-100:低电量阈值 当设备电量低于这个数值时,触发通知报警
WirelessBatteryLock Boolean
  • YES:开
  • NO:关
设备电池锁,关闭时不可以直接拆卸电池

枚举型设备功能

字符串枚举类型设备功能的取值范围,在 IPC SDK 中有定义相应的字符串枚举常量,存储卡状态是整型枚举,可在 ThingSmartCameraDPManager.h 中查看具体的定义。

设备功能 值常量类型
BasicNightvision ThingSmartCameraNightvision
BasicPIR ThingSmartCameraPIR
MotionSensitivity ThingSmartCameraMotion
DecibelSensitivity ThingSmartCameraDecibel
RecordMode ThingSmartCameraRecordMode
PTZControl ThingSmartCameraPTZDirection
WirelessPowerMode ThingSmartCameraPowerMode
SDCardStatus ThingSmartCameraSDCardStatus