iOS 标准 Demo
1. iOS 标准 Demo 说明
iOS 标准 Demo 基于 OpenSDK 组件,实现了 Imou 云开放平台音视频相关的核心能力。
建议开发者阅读 Demo 源码作为参考,或移植到自有工程,以加快集成。
特别注意:
Demo 无后台 SaaS 服务,因此在客户端直接请求开放平台接口获取数据等。
建议开发者通过自有后端 SaaS 服务调用 Imou 开放平台 OpenApi,再将数据返回客户端 App,整体采用云云对接架构。
调用 Imou 云开放平台接口需要 appId 与 appSecret。若将 appId、appSecret 写入客户端(APP)代码,一旦 App 被反编译,存在凭证泄露风险。
流程如下:

2. 功能说明
iOS LCOpenSDKDemo 主要实现:
管理员模式登录
获取设备列表
添加/删除设备
实时预览
语音对讲
设备录像回放
云录像回放与下载

3. 环境配置
以 Demo 为例介绍工程配置。
Demo 支持 Xcode 11 及以上版本编译调试。
当前 LCOpenSDK 以 framework 形式引入工程,须勾选 Embed & Sign。framework 位于 Depend/Frameworks/iOS,头文件位于 LCOpenSDKDynamic.framework/Headers:

3.1 系统库依赖
CoreAudio
MediaPlayer
AudioToolbox
VideoToolbox
OpenGLES
MediaAccessibility
CoreVideo
AVFoundation
CoreMedia
libz.tbd (libz.dylib)
3.2 第三方库依赖
KVOController(键值观察)
Masonry(OC 约束布局)
SnapKit(Swift 约束布局)
ZXingObjc(扫码库)
AFNetworking(网络请求库)
MJExtension(Model 转换)
MJRefresh(上下拉刷新)
SAMKeychain(Keychain 存储)
SDWebImage(图片加载)
MBProgressHUD(加载提示)
FMDB(数据库)
GTMBase64(编解码)
请根据当前 Xcode 版本选择对应的第三方库版本。Xcode 11、12 可直接从 Demo 复制导入。
3.3 Xcode 工程配置
- 路径:Build Setting -> Search Paths -> Framework Search Paths
添加:$(PROJECT_DIR)/Depend/Frameworks/iOS,支持 framework 自动检索
- 路径:Build Setting -> Search Paths -> Framework Search Paths
添加:
$(PROJECT_DIR)/Depend/Frameworks/iOS/LCOpenSDKDynamic.framework/Headers
$(PROJECT_DIR)/Depend/Frameworks/iOS/LCOpenSDKDynamic.framework/Headers/LCOpenSDK
$(PROJECT_DIR)/Depend/Frameworks/iOS/LCOpenSDKDynamic.framework/Headers/LCOpenNetSDK
$(PROJECT_DIR)/Depend/Frameworks/iOS/LCOpenSDKDynamic.framework/Headers/LCOpenApi
- 路径:Build Phases -> Embed Frameworks
添加:LCOpenSDKDynamic.framework,Destinations 选择 Frameworks。
- 路径:Build Setting -> Search Paths -> Library Search Paths
添加:$(PROJECT_DIR)/Depend

3.4 工程相关
将 SDK 动态库与头文件加入 Xcode 11.0 及以上工程,确保引用正确;C++ 标准库选择 libc++;工程设置为 Mixed(以支持 C++ 调用)。详见 Demo。
说明:appId 与 appSecret 须在开放平台网站获取(创建应用后可在开放平台 – 开发中心 – 应用详情页查看)。

4. 管理员账号模拟登录
如下图所示,Demo 在获取设备列表前会先登录:

在获取管理员设备列表并操作设备前,须先获取 accessToken(管理员 token)。我们将获取 accessToken 的过程称为管理员账号模拟登录。取得管理员 token 后,直接进入设备列表界面。
iOS Demo 源码已实现 accessToken 接口调用逻辑,详见 LCAccountInterface.m 中的 accessTokenWithsuccess 函数。
5. 获取设备列表
模拟登录后,可调用 设备查询 接口获取设备列表。
建议缓存设备 ID、名称、能力集、在线状态等信息,供后续预览、录像查询等使用。
6. 设备初始化、无线配网、绑定与解绑
设备绑定流程如下:
获取手机当前 Wi-Fi 热点信息,按说明书开启设备配网,调用 LCOpenSDK_ConfigWifi::configWifiStart 无线配网;收到配网回调(无论成功或超时)后调用 LCOpenSDK_ConfigWifi::configWifiStop 停止配网。仅当配网成功且设备已连接 easy4ip 开放平台时,方可继续绑定;
搜索设备初始化信息,参见 LCOpenSDK_SearchDevices::startSearchDevicesWithDeviceId;
若设备支持初始化且尚未初始化(LCOpenSDK_DeviceInit::DEVICE_INIT_INFO::initStatus=1),调用 LCOpenSDK_DeviceInit::initDevice 初始化;
检查是否已绑定,调用 checkDeviceBindOrNot;
检查是否在线,调用 deviceOnline;
绑定设备,调用 bindDevice;
解绑设备,调用 unBindDevice。
说明: initStatus=2 表示设备支持初始化且已完成初始化; initStatus=0 表示设备不支持初始化。
7. 实时预览
实时预览实现见 Demo 源码,相关接口见 LCLivePreviewPresenter+control.m 的 startPlay 函数。
8. 语音对讲
语音对讲实现见 Demo 源码,相关接口见 LCLivePreviewPresenter+control.m 的 onAudioTalk 函数。
9. 设备录像查询与回放
设备录像查询须调用开放平台 queryLocalRecords 接口。
设备录像回放见 Demo 源码 LCVideotapePlayerPersenter+Control.m 的 startPlay 函数。
说明:设备录像查询按自然日进行,起止时间不能跨天,否则容易查询超时。
10. 云录像查询与回放
云录像查询须调用 queryCloudRecords 接口。
云录像回放见 Demo 源码 LCVideotapePlayerPersenter+Control.m 的 startPlay 函数。
11. 云台控制与窗口移动
使用开放平台 controlMovePTZ 控制云台上下左右。详见 Demo 源码 LCLivePreviewPresenter.m。
12. 注意事项
Demo 已实现大部分监控与安全相关能力,可满足基本需求,但请勿直接上传 App Store。
应用上架时会进行代码重复度机审与界面相似度人工审核。若重复度过高,可能出现如下提示:
Guideline 4.3-Design
Your app duplicates the content and functionality of apps currently available on the App Store.
因此建议在开放平台 Demo 基础上调整代码与界面,或基于 OpenSDK / 开放平台 API 独立开发。
