# EZOpenSDK HarmonyOS 数据模型对象

本文档记录 EZOpenSDK HarmonyOS 版中主要对外开放的 Model 对象属性。

---

## EZDeviceInfo — 设备信息对象

通过 `EZOpenSDK.getDeviceList` 或 `EZOpenSDK.getDeviceInfo` 获取。

| 属性 | 类型 | 说明 |
|------|------|------|
| deviceSerial | string | 设备9位序列号，唯一标识 |
| deviceName | string | 设备名称 |
| deviceType | string | 设备型号 |
| category | string | 设备大类 |
| status | number | 在线状态：1-在线，2-不在线 |
| isEncrypt | number | 是否加密：0-不加密，1-加密 |
| defence | number | 布撤防状态：0-睡眠/撤防，1-布防，8-在家，16-外出 |
| deviceVersion | string | 设备固件版本号 |
| deviceCover | string | 设备封面图片 URL |
| cameraNum | number | 通道数量 |
| detectorNum | number | 探测器数量 |
| devProtoEnum | number | 设备协议类型：0-非国标，5-国标级联，6-国标 |
| supportExtShort | string | 设备短能力集原始字符串 |
| abilities | Array\<string\> | 设备能力集数组（由 supportExtShort 解析） |
| cameraInfo | Array\<EZCameraInfo\> | 通道列表 |
| detectorInfo | Array\<EZDetectorInfo\> | 探测器列表 |
| subDeviceInfo | Array\<EZSubDeviceInfo\> | 子设备列表（仅 Ex 接口返回） |

---

## EZCameraInfo — 通道信息对象

从 `EZDeviceInfo.cameraInfo` 获取。

| 属性 | 类型 | 说明 |
|------|------|------|
| cameraName | string | 摄像头名称 |
| cameraNo | number | 通道号 |
| deviceSerial | string | 设备序列号 |
| isShared | number | 分享状态：0-未分享，1-分享所有者，2-分享接受者 |
| cameraCover | string | 通道封面 |
| videoLevel | number | 当前清晰度：0-流畅，1-均衡，2-高清，3-超清 |
| permission | number | 权限 |
| videoQualityInfos | Array\<EZVideoQualityInfo\> | 通道支持的清晰度列表（注意：以 getDeviceDetailInfo 返回为准） |
| isEncrypt | boolean | 是否加密 |
| status | number | 在线状态：1-在线，2-不在线 |

方法：
- `EZCameraInfo.isCamera(camera)` — 是否是视频类设备（resourceType == 50 或无 resourceType）

---

## EZSubDeviceInfo — 子设备信息对象

继承自 `EZCameraInfo`，通过 `EZDeviceInfo.subDeviceInfo` 获取。

| 属性 | 类型 | 说明 |
|------|------|------|
| resourceType | number | 资源类型，50 为视频资源 |
| resourceName | string | 资源名称 |
| supportExtShort | string | 子设备短能力集原始字符串 |
| abilities | Array\<string\> | 子设备自身的能力集数组（由 supportExtShort 解析） |

继承自 EZCameraInfo 的属性：cameraName、cameraNo、deviceSerial、isShared、cameraCover、videoLevel、permission、videoQualityInfos、isEncrypt、status

方法：
- `EZSubDeviceInfo.isCamera(obj)` — 是否是视频类设备（resourceType == 50）
- `EZSubDeviceInfo.getAbilities(supportExtShort)` — 解析能力集字符串为数组

---

## EZVideoQualityInfo — 清晰度信息对象

| 属性 | 类型 | 说明 |
|------|------|------|
| videoQualityName | string | 清晰度名称（如超清、高清、均衡、流畅等） |
| videoLevel | number | 视频质量：0-流畅，1-均衡，2-高清，3-超清，4-极清，5-3K，6-4K |
| streamType | number | 码流类型：1-主码流，2-子码流 |

---

## EZCloudRecordFile — 云存储录像文件对象

通过 `EZOpenSDK.searchRecordFileFromCloud` 获取。

| 属性 | 类型 | 说明 |
|------|------|------|
| deviceSerial | string | 设备序列号 |
| cameraNo | number | 通道号 |
| fileId | string | 云存储录像文件 ID |
| startTime | Date | 录像开始时间 |
| stopTime | Date | 录像结束时间 |
| coverPic | string | 云存储录像截图地址 |
| downloadPath | string | 下载地址 |
| encryption | string | 录像加密密码（nil 表示不加密） |
| fileSize | number | 文件大小 |
| istorageVersion | number | 云存储类别：1-单文件存储，2-连续存储，3-待定 |
| videoType | number | 云存储录像类型，0 表示不属于云存储录像 |
| spaceId | number | 空间 ID（SDK 云录制字段） |

方法：
- `deepCopy()` — 深拷贝（用于连续回放时修改结束时间）

---

## EZDeviceRecordFile — 设备录像文件对象（SD卡/NVR）

通过 `EZOpenSDK.searchRecordFileFromDevice` 获取。

| 属性 | 类型 | 说明 |
|------|------|------|
| startTime | Date | 录像开始时间 |
| stopTime | Date | 录像结束时间 |
| type | number | 文件类型：-2-未知，-1-所有事件，0-报警录像，1-定时录像，2-IO外设触发，3-时序录像，4-事件录像，5-所有类型 |
| channelType | string | 通道类型 |
| isIPCRecordDirectQuery | boolean | 当设备绑定 NVR 时，true 表示从 IPC SD 卡直查，false 表示从 NVR 通道查询 |
| seq | number | 索引序号（用于 SD 卡封面回调匹配） |

方法：
- `deepCopy()` — 深拷贝

---

## EZDeviceRecordInfo — 设备录像信息类（分页查询）

通过 `EZOpenSDK.searchRecordFileFromDeviceEx` 获取。

| 属性 | 类型 | 说明 |
|------|------|------|
| deviceRecordFileList | Array\<EZDeviceRecordFile\> | SD卡录像列表 |
| hasMore | boolean | 是否还有更多数据 |
| nextFileTime | Date | 下一个录像文件的开始时间（用于分页查询） |
| fromNvr | boolean | 该录像文件是否来自关联的 NVR |
| deviceSerial | string | fromNvr 为 true 时返回关联 NVR 序列号，否则返回入参序列号 |

---

## EZAlarmInfo — 告警信息对象

通过 `EZOpenSDK.getAlarmList` 获取。

| 属性 | 类型 | 说明 |
|------|------|------|
| alarmId | string | 告警 ID |
| deviceSerial | string | 设备序列号 |
| channelNo | number | 通道号 |
| alarmName | string | 告警名称 |
| alarmPicUrl | string | 告警图片地址 |
| alarmStart | string | 告警开始时间（字符串格式） |
| alarmType | number | 告警类型 |
| crypt | number | 图片加密信息：0-不确定，1-设备加密，2-平台加密 |
| checksum | string | 平台加密时的密钥 |
| isRead | boolean | 是否已读 |
| recState | number | 存储类型：0-无存储，1-萤石，2-百度，4-SD卡，5-萤石和SD卡 |
| preTime | number | 告警录像开始时间提前偏移量（秒） |
| delayTime | number | 告警录像结束时间延后偏移量（秒） |
| deviceName | string | 设备名称 |
| category | string | 设备大类 |

事件回放时间计算：
- 开始时间 = alarmStartTime - preTime
- 结束时间 = alarmStartTime + delayTime

图片解密规则：
- crypt == 2：平台加密，使用 checksum 作为解密密钥
- crypt == 1：设备加密，使用设备验证码作为解密密钥
- crypt == 0：通过 alarmPicUrl 中的 isEncrypted 字段判断

---

## EZDeviceDetailPublicInfo — 设备取流详情对象

通过 `EZPlayer.getDeviceDetailInfo` 取流成功后获取。

| 属性 | 类型 | 说明 |
|------|------|------|
| videoQualityInfos | Array\<EZVideoQualityInfo\> | 清晰度列表 |
| isOwner | number | 是否是设备拥有者：1-是，-1-不是（需鉴权） |
| localCmdPort | number | 设备局域网信令端口 |
| videoWidth | number | 视频宽度 |
| videoHeight | number | 视频高度 |

---

## EZDevicePtzAngleInfo — 云台角度信息对象

通过 `EZPlayerAdditionalInfoCallback.devicePtzAngleInfo` 回调获取。

| 属性 | 类型 | 说明 |
|------|------|------|
| horizontalStartAngle | number | 水平方向起点角度 |
| horizontalEndAngle | number | 水平方向终点角度 |
| horizontalCurrentAngle | number | 水平方向当前角度 |
| verticalStartAngle | number | 垂直方向起点角度 |
| verticalEndAngle | number | 垂直方向终点角度 |
| verticalCurrentAngle | number | 垂直方向当前角度 |

---

## EZPMPlayPrivateTokenInfo — 门锁开门 Token 对象

通过 `EZPlayerAdditionalInfoCallback.playPrivateTokenInfo` 回调获取。

| 属性 | 类型 | 说明 |
|------|------|------|
| enable | boolean | 是否启用 |
| token | string | 开门 token |

---

## EZStorageInfo — 设备存储信息对象

通过 `EZOpenSDK.getStorageStatus` 获取。

| 属性 | 类型 | 说明 |
|------|------|------|
| index | number | 存储介质索引 |
| name | string | 存储介质名称 |
| status | number | 状态：0-正常，1-存储介质错，2-未格式化，3-正在格式化 |
| formatRate | number | 格式化进度 |

---

## EZDeviceVersion — 设备版本信息对象

通过 `EZOpenSDK.getDeviceVersion` 获取。

| 属性 | 类型 | 说明 |
|------|------|------|
| currentVersion | string | 当前版本 |
| latestVersion | string | 最新版本 |
| isNeedUpgrade | number | 是否需要升级：0-不需要，1-需要 |
| isUpgrading | number | 是否正在升级 |

---

## EZDeviceUpgradeStatus — 设备升级状态对象

通过 `EZOpenSDK.getDeviceUpgradeStatus` 获取。

| 属性 | 类型 | 说明 |
|------|------|------|
| upgradeProgress | number | 升级进度：1-100 |
| upgradeStatus | number | 升级状态：0-正在升级，1-设备重启，2-升级成功，3-升级失败 |

---

## EZProbeDeviceInfo — 设备探测信息对象

通过 `EZOpenSDK.probeDeviceInfo` 获取。

| 属性 | 类型 | 说明 |
|------|------|------|
| supportExtJSON | object | 设备能力集 JSON 对象 |

静态方法：
- `EZProbeDeviceInfo.supportAP(supportExtJSON)` — 是否支持 AP 配网（2-支持）
- `EZProbeDeviceInfo.support5GWiFi(supportExtJSON)` — 是否支持 5G WiFi
- `EZProbeDeviceInfo.getDeviceHotSpot(supportExtJSON)` — 设备热点前缀类型（0-EZVIZ，1-SoftAP，2-CAMGO）

---

## EZUserInfo — 用户信息对象

通过 `EZOpenSDK.getUserInfo` 获取。

| 属性 | 类型 | 说明 |
|------|------|------|
| username | string | 用户名 |
| avatarUrl | string | 用户头像地址 |

---

## EZPlaybackRate — 回放倍速枚举

| 枚举值 | 说明 |
|--------|------|
| EZOPENSDK_PLAY_RATE_1_2 | 0.5 倍速 |
| EZOPENSDK_PLAY_RATE_1 | 1 倍速（正常） |
| EZOPENSDK_PLAY_RATE_2 | 2 倍速 |
| EZOPENSDK_PLAY_RATE_4 | 4 倍速 |
| EZOPENSDK_PLAY_RATE_8 | 8 倍速 |
| EZOPENSDK_PLAY_RATE_16 | 16 倍速 |
| EZOPENSDK_PLAY_RATE_32 | 32 倍速（云存储专用） |

---

## EZMessageCode — 播放器消息码枚举

| 常量 | 数值 | 含义 |
|------|------|------|
| PLAYER_REALPLAY_START | 1 | 直播开始 |
| PLAYER_VIDEOLEVEL_CHANGE | 2 | 清晰度切换中 |
| PLAYER_STREAM_RECONNECT | 3 | 取流正在重连 |
| PLAYER_VOICE_TALK_START | 4 | 对讲开始 |
| PLAYER_VOICE_TALK_END | 5 | 对讲结束 |
| PLAYER_STREAM_START | 10 | 录像取流开始 |
| PLAYER_PLAYBACK_START | 11 | 录像回放开始 |
| PLAYER_PLAYBACK_STOP | 12 | 录像回放结束 |
| PLAYER_NET_CHANGED | 21 | 网络变更 |
| PLAYER_VIDEO_SIZE_CHANGED | — | 画面尺寸变更 |
| PLAYER_VIDEO_LEVEL_AUTO_IMPROVE | 25 | 网络好，建议升档 |
| PLAYER_VIDEO_LEVEL_AUTO_REDUCE | 26 | 网络差，建议降档 |

---

## EZVideoLevelType — 清晰度枚举

| 枚举值 | 说明 |
|--------|------|
| EZVideoLevelLow (0) | 流畅 |
| EZVideoLevelMiddle (1) | 均衡 |
| EZVideoLevelHigh (2) | 高清 |
| EZVideoLevelSuperHigh (3) | 超清 |
| EZVideoLevelExtremeHigh (4) | 极清 |
| EZVideoLevel3K (5) | 3K |
| EZVideoLevel4K (6) | 4K |
