标准化demo
# 1. iOS标准化Demo说明文档
iOS标准化Demo基于OpenSDK组件实现了乐橙云开放平台音视频相关的核心功能。
建议开发者阅读Demo源代码,作为参考或者移植到自己项目中,有助于快速集成。
特别注意:
1、由于Demo是没有后台saas服务的,故Demo是直接在客户端请求开放平台接口来获取数据以及其他的一些操作。
2、建议开发者涉及调用乐橙开放平台OpenApi的地方,采用开发者后台saas服务去调用乐橙开放平台的OpenApi接口,然后再将数据返回给客户端app,整体系统架构搭建采用云云对接。
3、因为调用乐橙云开放平台接口需要使用到开发者账号信息:appId和appSecret,如果开发者将appId和appSecret放在客户端(APP)代码中来实现这个接口,一旦开发者的客户端被其他人反编译,那么就存在appId和appSecret被盗用的风险。
流程如下:
# 2. 功能描述
iOS LCOpenSDKDemo实现的主要功能包括:
管理员模式登陆
获取设备列表
添加/删除设备
实时预览
语音对讲
设备录像回放
云录像回放和下载
# 3. 环境搭建
以Demo为例,为开发者介绍项目的工程配置。
Demo工程支持Xcode11版本以上编译调试。
当前LCOpenSDK以framework形式导入工程引用,且需勾选Embed&Sign,framework位于Depend/Frameworks/iOS目录下,头文件位于LCOpenSDKDynamic.framwork/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 (模型数据转化)
MJRefresh (上下拉控件)
SAMKeychain (钥匙串存储工具)
SDWebImage (图片加载框架)
MBProgressHUD (等待旋转控件)
FMDB (数据库框架)
GTMBase64 (编码库)
请根据当前Xcode版本选择对应版本三方库进行使用,Xcode11、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++ standard library选择libc++,工程设置混编(需支持C++调用)具体可参考Demo;
备注: appId、appSecret需要从开放平台网站获取(开发者在创建应用后,在开放平台网站-开发中心-应用详情页中可以找到)。
# 4. 管理员账号模拟登录
如下图所示,Demo在获取设备列表之前,会先登陆:
在获取管理员设备列表以及进行设备操作前,需要获取accessToken(管理员token),我们把获取accessToken的过程叫做管理员账号模拟登录过程,获取管理员token之后,直接进入设备列表界面。
iOS Demo的源码中已经帮开发者实现了“获取accessToken”接口的代码,具体请见LCAccountInterface.m文件中的accessTokenWithsuccess函数。
# 5. 获取设备列表
在模拟登陆之后,可调用设备查询接口获取设备列表信息。
建议将设备列表信息,如设备ID、设备名、设备能力集、设备是否在线等,缓存起来,用于后续的实时预览、录像查询等操作。
# 6. 设备初始化&设备无线配网&设备绑定&设备解绑
设备绑定流程如下:
获取手机当前的Wifi热点信息,按照说明书开启设备配网功能,调用LCOpenSDK_ConfigWifi::configWifiStart对设备进行无线配网,收到配网回调事件之后(无论配网成功还是超时),调用LCOpenSDK_ConfigWifi::configWifiStop停止无线配网,设备只有配网成功并连上乐橙开放平台,才能进行之后的绑定流程;
搜索设备信息,参考LCOpenSDK_SearchDevices::startSearchDevicesWithDeviceId;
若设备支持初始化且未被初始化(LCOpenSDK_DeviceInit::DEVICE_INIT_INFO::initStatus=1),调用LCOpenSDK_DeviceInit::initDevice初始化设备;
检查设备是否已绑定,调用乐橙云平台checkDeviceBindOrNot接口;
检查设备是否在线,调用乐橙云平台deviceOnline接口;
绑定设备,调用乐橙云平台bindDevice接口;
设备解绑,调用乐橙云平台unBindDevice接口。
备注: LCOpenSDK_DeviceInit::DEVICE_INIT_INFO::initStatus=2代表设备支持初始化且已被初始化 LCOpenSDK_DeviceInit::DEVICE_INIT_INFO::initStatus=0代表设备不支持初始化
# 6. 实时预览
实时预览的具体实现请参见Demo源代码,涉及到的接口请参见LCLivePreviewPresenter+control.m中startPlay函数。
# 7. 语音对讲
语音对讲的具体实现请参见Demo源代码,涉及到的接口请参见LCLivePreviewPresenter+control.m中onAudioTalk函数。
# 8. 设备录像查询&回放
设备录像查询需调用开放平台queryLocalRecords接口。
设备录像回放请参见Demo源代码LCVideotapePlayerPersenter+Control.m中startPlay函数。
备注:设备录像查询只能以天为单位,即查询的开始时间与结束时间不能跨天,否则容易产生查询超时错误。
# 9. 云录像查询&回放
设备云录像查询需调用开放平台queryCloudRecords接口。
云录像播放参见Demo源代码LCVideotapePlayerPersenter+Control.m中的startPlay函数。
# 10. 云台控制&窗口移动
使用开放平台接口controlMovePTZ实现云台上下左右移动,具体参见Demo源代码LCLivePreviewPresenter.m文件。
# 11. 注意事项
由于Demo已实现大部分监控安防功能,已能满足基础需求,但请勿直接上传AppStore。
app上架会进行代码重复率机审与界面相似度人工审查,如发现重复相似度高会有如下提示:
Guideline 4.3 - Design
Your app duplicates the content and functionality of apps currently available on the App Store.
因此,我们鼓励开发者在开放平台Demo基础上进行代码/界面调整,或者基于openSDK/开放平台API进行完整开发。