示例工程
示例工程
iOS 标准化 Demo 基于 OpenSDK 组件,实现乐橙云开放平台音视频相关的核心功能。建议阅读 Demo 源代码,作为参考或移植到自己的项目,有助于快速集成。下载见 资源下载 的 iOS Demo 行。
由于 Demo 没有后台 SaaS 服务,Demo 直接在客户端请求开放平台接口来获取数据以及其他操作。建议涉及调用乐橙开放平台 OpenAPI 的地方,由开发者后台 SaaS 去调用,再将数据返回给客户端 App,整体系统架构采用云云对接。调用接口需要 appId 和 appSecret。如果放在客户端代码中实现,客户端被反编译后,存在 appId 和 appSecret 被盗用的风险。
appId、appSecret 从开放平台网站获取。开发者创建应用后,在开放平台网站的开发中心、应用详情页中可以找到。生产应用不要把真实 AppSecret 写入客户端、示例配置或仓库。
步骤
按本页后续各节操作。
功能
iOS LCOpenSDKDemo 实现的主要功能包括:
- 管理员模式登录
- 获取设备列表
- 添加/删除设备
- 实时预览
- 语音对讲
- 设备录像回放
- 云录像回放和下载
环境
以 Demo 为例介绍工程配置。Demo 工程支持 Xcode 11 版本以上编译调试。
当前 LCOpenSDK 以 framework 形式导入工程引用,且需勾选 Embed&Sign。framework 位于 Depend/Frameworks/iOS 目录下,头文件位于 LCOpenSDKDynamic.framework/Headers 目录下。
工程依赖系统库:CoreAudio、MediaPlayer、AudioToolbox、VideoToolbox、OpenGLES、MediaAccessibility、CoreVideo、AVFoundation、CoreMedia、libz.tbd(libz.dylib)。
工程依赖三方库:
- KVOController(键值监控)
- Masonry(OC 约束布局)
- SnapKit(Swift 约束布局)
- ZXingObjc(扫码库)
- AFNetworking(网络请求库)
- MJExtension(模型数据转化)
- MJRefresh(上下拉控件)
- SAMKeychain(钥匙串存储工具)
- SDWebImage(图片加载框架)
- MBProgressHUD(等待旋转控件)
- FMDB(数据库框架)
- GTMBase64(编码库)
请根据当前 Xcode 版本选择对应版本三方库。Xcode 11、12 可直接从 Demo 中拷贝导入使用。
Xcode 工程配置:
- Build Setting → Search Paths → Framework Search Paths 添加
$(PROJECT_DIR)/Depend/Frameworks/iOS,支持 framework 自动检索。 - 同一项 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。
将 SDK 动态库以及头文件添加到 Xcode 11.0 以上版本的工程。C++ standard library 选择 libc++。工程设置混编(需支持 C++ 调用),具体可参考 Demo。
管理员账号模拟登录
获取管理员设备列表以及进行设备操作前,需要获取 accessToken(管理员 token)。获取 accessToken 的过程叫做管理员账号模拟登录。获取管理员 token 之后,直接进入设备列表界面。
iOS Demo 源码已实现「获取 accessToken」,见 LCAccountInterface.m 的 accessTokenWithsuccess。
设备列表
模拟登录之后,可调用 设备查询 获取设备列表。建议将设备 ID、设备名、设备能力集、设备是否在线等缓存起来,用于后续实时预览、录像查询。
初始化、无线配网、绑定与解绑
- 无线配网、局域网搜设备与初始化步骤与 功能集成 · 设备添加 一致(类名以头文件为准,如
LCOpenSDK_ConfigWIfi、LCOpenSDK_SearchDevices)。示例:[[LCOpenSDK_ConfigWIfi alloc] init]后调用configWifiStart:…;收到配网结束回调后调用configWifiStop;搜初始化信息可用[[LCOpenSDK_SearchDevices shareSearchDevices] startSearchDevicesWithDeviceId:… timeOut:… callback:…],详见 Demo 源文件与 fragment 示例。 - 设备只有配网成功并连上乐橙开放平台,才能进行之后的绑定。
- 检查是否已绑定,调用 checkDeviceBindOrNot。
- 检查是否在线,调用 deviceOnline。
- 绑定设备,调用 bindDevice。
- 解绑设备,调用 unBindDevice。
initStatus=2 代表设备支持初始化且已被初始化。initStatus=0 代表设备不支持初始化。
预览、对讲、回放与云台
实时预览见 Demo 源代码,接口见 LCLivePreviewPresenter+control.m 的 startPlay。
语音对讲见 LCLivePreviewPresenter+control.m 的 onAudioTalk。
设备录像查询调用 queryLocalRecords。设备录像查询只能以天为单位,开始时间与结束时间不能跨天,否则容易产生查询超时错误。回放见 Demo 源文件 LCVideotapePlayerPersenter+Control.m(工程内保留该拼写)的 startPlay。
云录像查询调用 queryCloudRecords。云录像播放见 LCVideotapePlayerPersenter+Control.m 的 startPlay。
云台上下左右移动使用 controlMovePTZ,见 LCLivePreviewPresenter.m。
上架
由于 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 进行完整开发。