开始使用
  • English
  • 简体中文
前往官网
开始使用
  • English
  • 简体中文
前往官网
  • 开始使用
  • 核心概念
  • 开发指南
  • 设备能力与事件参考
  • API 参考
  • SDK 与工具
    • Android SDK
    • iOS SDK
      • iOS OpenSDK
      • iOS 标准 Demo
    • PC SDK
    • ImouPlayer 轻应用 JavaScript SDK
    • SDK 隐私政策
    • Postman 调试
    • 图片解密
  • 方案
  • 平台与支持
本页目录
1. 安装 OpenSDK
1.1 CocoaPods 安装
1.1.1 引入 CocoaPods
1.1.2 路径配置
1.2 压缩包安装
1.2.1 路径配置
1.2.2 系统库配置
1.3 权限配置
2. 初始化
2.1 初始化 OpenSDK
2.2 配置 OpenSDK 日志级别
3. 添加设备
3.1 SmartConfig 配网添加
3.2 SoftAP 配网添加
4. 实时预览
5. 录像回放
6. 语音对讲
7. 录像下载
8. 数据解密

iOS OpenSDK

iOS OpenSDK 对接文档

iOS LCOpenSDK 是接入 Imou 云的一整套客户端框架,便于开发者在 iOS 应用中快速集成 Imou 云视频能力。本 OpenSDK 仅支持真机调试,不支持模拟器,需 Xcode 9.0 及以上。

iOS OpenSDK 资源下载

1. 安装 OpenSDK

安装 OpenSDK 有两种方式:CocoaPods 安装,或从官网下载压缩包手动安装。

1.1 CocoaPods 安装

1.1.1 引入 CocoaPods

  • 在 Podfile 中添加 pod 'LCOpenSDK'

  • 执行 pod install

说明:若无法导入,可能需要更新本地仓库,请执行 pod repo update。

安装成功后如下图所示:

Successful installation

1.1.2 路径配置

  • Framework 路径:Build Setting -> Search Paths -> Framework Search Paths 添加:

$(PROJECT_DIR)/Pods/LCOpenSDK/Framework

  • 头文件路径:Build Setting -> Search Paths -> Header Search Paths 添加:

$(PROJECT_DIR)/Pods/LCOpenSDK/Framework/LCOpenSDKDynamic.framework/Headers/LCOpenSDK

$(PROJECT_DIR)/Pods/LCOpenSDK/Framework/LCOpenSDKDynamic.framework/Headers/LCOpenNetSDK

  • Build Settings -> Build Options -> Enable Bitcode 设为 NO

1.2 压缩包安装

从 Imou 云开放平台官网下载 iOS 版 OpenSDK 压缩包并手动导入本地。导入时注意 SDK 路径;以 Demo 为例,OpenSDK 位于工程目录下 Depend 文件夹。

Engineering structure

1.2.1 路径配置

  • Framework 路径:Build Setting -> Search Paths -> Framework Search Paths 添加:

$(PROJECT_DIR)/Depend

  • 头文件路径:Build Setting -> Search Paths -> Framework Search Paths 添加:

$(PROJECT_DIR)/Depend/LCOpenSDKDynamic.framework/Headers

$(PROJECT_DIR)/Depend/LCOpenSDKDynamic.framework/Headers/LCOpenSDK

$(PROJECT_DIR)/Depend/LCOpenSDKDynamic.framework/Headers/LCOpenNetSDK

  • Build Phases -> Embed Frameworks 添加:

LCOpenSDKDynamic.framework,Destinations 选择 Frameworks。

说明: $(PROJECT_DIR) 为 Demo 工程所在目录,按需添加 LCOpenSDKDemo 与 Depend 文件夹(对应 iOS_demo 与 iOS_sdk);若不存在 Build Phases -> Embed Frameworks,可点击左上角加号,选择 New Copy Files Phase 添加,再双击改名为 Embed Frameworks。

1.2.2 系统库配置

在工程 TARGETS -> Build Phases -> Link Binary With Libraries 中添加以下系统库:

  • CoreAudio.framework

  • MediaPlayer.framework

  • AudioToolbox.framework

  • VideoToolbox.framework

  • OpenGLES.framework

  • MediaAccessibility.framework

  • CoreVideo.framework

  • AVFoundation.framework

  • CoreMedia .framework

  • libz.tbd (libz.dylib)

配置完成后如下图所示:

System Library Configuration

1.3 权限配置

OpenSDK 须配置相关系统权限,主要包括:

  • 相册:NSPhotoLibraryUsageDescription

  • 照片存储:NSPhotoLibraryAddUsageDescription

  • 麦克风:NSMicrophoneUsageDescription

  • 相机:NSCameraUsageDescription

  • 本地网络:NSLocalNetworkUsageDescription

  • 定位:NSLocationUsageDescription

说明:设备配网还需组播权限,须在 Apple Developer Center 申请。

2. 初始化

2.1 初始化 OpenSDK

使用 OpenSDK 前须先初始化,主要依赖 LCOpenSDK_Api 类。

示例代码如下:

	/** 初始化 */
	LCOpenSDK_ApiParam * apiParam = [[LCOpenSDK_ApiParam alloc] init];
	/** 1. 使用 HTTPS */
	apiParam.procotol = PROCOTOL_TYPE_HTTPS;
	/** 2. 设置 Imou 云开放平台域名 */
	apiParam.addr = @"openapi-[Data Center].easy4ip.com";
	/** 3. 设置端口 */
	apiParam.port = 443;
	/** 4. 设置开发者 accessToken */
	apiParam.token = @"********";
	/** 5. 初始化 OpenSDK */
	LCOpenSDK_Api* m_hc = [[LCOpenSDK_Api shareMyInstance] initOpenApi:apiParam];

说明:获取 accessToken:管理员 accessToken 或 子账号 accessToken。addr 中的 [Data Center] 须替换为实际数据中心标识。

2.2 配置 OpenSDK 日志级别

OpenSDK 提供日志类 LCOpenSDK_Log,开发者可按需配置日志级别,默认为 LogLevelTypeFatal。

	// 创建 LCOpenSDK_LogInfo 实例
 LCOpenSDK_LogInfo *info = [LCOpenSDK_LogInfo new];
	// 设置日志级别
 info.levelType = LogLevelTypeDebug;
 [[LCOpenSDK_Log shareInstance] setLogInfo:info];

LogLevelType:

LogLevelTypeFatal = 1,// 严重错误

LogLevelTypeError,// 错误

LogLevelTypeWarning,// 警告

LogLevelTypeInfo,// 信息

LogLevelTypeDebug// 调试

说明:可调整 SDK 日志级别以便复现问题并抓取日志,便于后续定位与分析。

3. 添加设备

无线配网是 OpenSDK 的基础能力之一,可与设备搜索、设备初始化配合使用。当前 OpenSDK 支持 SmartConfig 与 Soft AP 配网;不同设备支持的配网方式不同,须根据设备型号确定。

3.1 SmartConfig 配网添加

  • 扫描设备底部标签或手动输入,获取设备 S/N 等信息。

  • 调用 unBindDeviceInfo(或能力等价接口),查询设备支持的配网模式与绑定状态。

  • 判断设备是否已绑定。

  • 判断当前设备是否支持 SmartConfig。

  • 启动无线配网,在局域网内搜索设备初始化信息。

  • 搜到设备后停止配网并停止搜索。

  • 初始化设备。

  • 调用 deviceOnline 或等价接口检查设备是否在线。

  • 确认设备在线后,调用 bindDevice 完成绑定。

相关代码实现如下:

 /** 1. 初始化 LCOpenSDK_ConfigWIfi 对象 */
 LCOpenSDK_ConfigWIfi *m_configWifi = [[LCOpenSDK_ConfigWIfi alloc] init];
 /**
 2. 开始配网
 devId:设备序列号
 ssid:Wi-Fi 名称
 password:Wi-Fi 密码
 security:安全码(SC 码设备必填,非 SC 设备传 @"")
 */
 NSInteger iRet = [m_configWifi configWifiStart:@"********"
 ssid:@"********"
 password:@"********"
 secure:@"********"
 voiceFreq:11000];
 if (iRet <0) {
 NSLog(@"smartconfig failed\n");
 }
 __block NSString *theMac = nil; /** 设备 MAC */
 __block NSString *theIp = nil; /** 设备 IP */
 __block int thePort = 0; /** 设备端口 */
 __block int theInitStatus = 0; /** 初始化状态:0 无需初始化;1 需初始化且未初始化;2 需初始化且已初始化 */
/** 3. 初始化设备初始化对象 */
 LCOpenSDK_DeviceInit *deviceInit = [[LCOpenSDK_DeviceInit alloc] init];
/** 4. 搜索设备初始化信息 */
 [deviceInit searchDeviceInitInfo:@"********" timeOut:60000*2 success:^(LCOPENSDK_DEVICE_INIT_INFO info) {
 theMac = [NSString stringWithUTF8String:info.mac];
 theIp = [NSString stringWithUTF8String:info.ip];
 thePort = info.port;
 theInitStatus = info.status;
 }];
 if (!theMac || !theIp) {
 NSLog(@"Search device init info failed!\n");
 }
/** 5. 停止配网 */
 [m_configWifi configWifiStop];
/** 6. 初始化状态为 1 且非 SC 码设备时执行初始化,初始化密码可自定义 */
 int ret = [deviceInit initDevice:theMac password:@"********" ip:theIp];
 if (-2 == ret) {
 NSLog(@"Init device failed!\n");
 }

3.2 SoftAP 配网添加

  • 扫描设备底部标签或手动输入,获取设备 S/N 等信息。

  • 调用 unBindDeviceInfo(或能力等价接口),查询设备支持的配网模式与绑定状态。

  • 判断设备是否已绑定。

  • 判断当前设备是否支持 SoftAP。

  • 连接设备热点。

  • 在局域网搜索设备初始化信息:若搜到设备信息,启动配网流程。

  • 启动 SoftAP 配网。

  • 调用 deviceOnline 检查设备是否在线。

  • 确认在线后,调用 bindDevice 完成绑定。

代码实现如下:

/** 1. 初始化设备搜索对象 */
LCOpenSDK_SearchDevices *m_deviceInit = [[LCOpenSDK_SearchDevices alloc] init];
/** 2. 搜索设备初始化信息 */
__block int m_initDevStatus = 0;
[m_deviceInit startSearchDevices:@"********" timeOut:10*1000 success:^(LCOPENSDK_DEVICE_INIT_INFO info) {
	m_initDevStatus = info.status;
}];
/** 3. 初始化 SoftAP 配网对象 */
LCOpenSDK_SoftAPConfig *m_softAP = [[LCOpenSDK_SoftAPConfig alloc] init];
/** 4. m_initDevStatus 为 0 或为 SC 码设备时可直接 SoftAP 配网,设备密码传 @"admin";为 1 时使用自定义密码;SC 码设备须带安全码,isSC 设为 YES */
NSInteger softAPResult = [m_softAP
startSoftAPConfig:@"********" wifiPwd:@"********" wifiEncry:0 netcardName:@"********" deviceIp:@"********" devicePwd:@"********" isSC:True timeout:0 handler:^(NSInteger result) {
 handler(result);
}];
if (softAPResult <0) {
 NSLog(@"SoftAP failed!\n");
}

4. 实时预览

实时预览主要步骤:

  • 通过 Imou 云开放平台 设备查询 接口获取设备信息。

  • 调用 OpenSDK 接口初始化播放窗口与监听。

示例代码:

/** 1. 初始化播放窗口(位置、大小、索引) */
LCOpenSDK_PlayRealWindow *m_play = [[LCOpenSDK_PlayRealWindow alloc] initPlayWindow:CGRectMake(0, 0, 400, 300) Index:0];
/** 2. 设置播放窗口背景色 */
[m_play setSurfaceBGColor:[UIColor blackColor]];
/** 3. 将播放窗口添加到父视图 */
[self.view addSubview:[m_play getWindowView]];
/** 4. 设置监听对象,接收播放结果回调 */
[m_play setPlayRealListener:(id<LCOpenSDK_PlayRealListener>)listener];
  • 设置播放参数并启动播放。

示例代码:

/** 1. 初始化实时预览参数对象 */
LCOpenSDK_ParamReal *paramReal = [[LCOpenSDK_ParamReal alloc] init];
/** 2. 设置 accessToken(由 AppId、AppSecret 向 Imou 云开放平台换取) */
paramReal.accessToken = @"********";
/** 3. 设置设备序列号 */
paramReal.deviceID = @"********";
/** 4. 设置通道号:单通道设备填 0,NVR 等多通道设备填具体通道号 */
paramReal.channel = 0;
/** 5. 设置码流类型(主码流/子码流) */
paramReal.defiMode = DEFINITION_MODE_HG;
/** 6. 设置密钥:自定义密钥传具体值,否则可用设备序列号 */
paramReal.psk = @"********";
/** 7. 设置 playToken(可选,传入可提升出流速度) */
paramReal.playToken = @"********";
/** 是否开启拉流优化(建议传 YES,可提升出流速度) */
paramReal.isOpt = YES;
/** 8. 开始播放 */
[m_play playRtspReal:paramReal];
  • 实现监听回调。

伪代码:下列回调方法体已省略,请按业务实现。

示例代码:

/** 1. 播放结果回调,可按错误码分别处理 */
-(void)onPlayerResult:(NSString*)code Type:(NSInteger)type Index:(NSInteger)index {
 // 伪代码:在此实现回调逻辑
}
/** 2. 播放开始回调 */
-(void)onPlayBegan:(NSInteger)index {
 // 伪代码:在此实现回调逻辑
}

5. 录像回放

录像回放用于播放设备 SD 卡/硬盘或云存储中的录像。设备录像与云录像使用不同 OpenSDK 接口,使用时请注意区分。

设备本地录像回放提供按文件名与按时间两种接口,可按场景选择,建议优先使用按文件名回放。

主要步骤:

  • 通过 设备查询 接口获取设备信息。

  • 通过 云录像查询、本地录像查询 接口获取云录像与本地录像信息。

  • 调用 OpenSDK 接口初始化播放窗口与监听。

示例代码:

/** 1. 初始化播放窗口(位置、大小、索引) */
LCOpenSDK_PlayWindow *m_play = [[LCOpenSDK_PlayWindow alloc] initPlayWindow:CGRectMake(0, 0, 400, 300) Index:0];
/** 2. 设置播放窗口背景色 */
[m_play setSurfaceBGColor:[UIColor blackColor]];
/** 3. 将播放窗口添加到父视图 */
[self.view addSubview:[m_play getWindowView]];
/** 4. 设置监听对象,接收播放结果回调 */
[m_play setWindowListener:(id<LCOpenSDK_EventListener>)self];
  • 设置播放参数并启动播放。

示例代码:

  1. 按文件名播放设备录像:
/** 1. 初始化按文件名回放参数对象 */
LCOpenSDK_ParamDeviceRecordFileName * paramDeviceRecord = [[LCOpenSDK_ParamDeviceRecordFileName alloc] init];
/** 2. 设置 accessToken(由 AppId、AppSecret 向 Imou 云开放平台换取) */
paramDeviceRecord.accessToken = @"********";
/** 3. 设置设备序列号 */
paramDeviceRecord.deviceID = @"********";
/** 4. 设置通道号:单通道设备填 0,NVR 等多通道设备填具体通道号 */
paramDeviceRecord.channel = 0;
/** 5. 设置密钥:自定义密钥传具体值,否则可用设备序列号 */
paramDeviceRecord.psk = @"********";
/** 6. 设置录像文件名(即 recordId) */
paramDeviceRecord.fileName = @"********";
/** 7. 设置回放偏移时间(秒),从文件开头播放填 0 */
paramDeviceRecord.offsetTime = 0 ;
/** 8. 设置 productId */
paramDeviceRecord.productId= @"********";
/** 9. 按文件回放时的拉流类型 */
paramDeviceRecord.playMode = @"********";
/** 10. 是否回放(建议传 YES) */
paramDeviceRecord.isPlayBack = YES;
/** 是否开启拉流优化(建议传 YES) */
paramDeviceRecord.isOpt = YES;
/** 12. 开始播放 */
[m_play playRecordStream:paramDeviceRecord];
  1. 按时间播放设备录像:
/** 1. 初始化按时间回放参数对象 */
LCOpenSDK_ParamDeviceRecordUTCTime *paramDeviceRecordUTCTime = [[LCOpenSDK_ParamDeviceRecordUTCTime alloc] init];
/** 2. 设置 accessToken(由 AppId、AppSecret 向 Imou 云开放平台换取) */
 paramDeviceRecordUTCTime.accessToken = @"********";
/** 3. 设置设备序列号 */
 paramDeviceRecordUTCTime.deviceID = @"********";
/** 4. 设置通道号:单通道设备填 0,NVR 等多通道设备填具体通道号 */
 paramDeviceRecordUTCTime.channel = 0;
/** 5. 设置码流类型(主码流/子码流) */
 paramDeviceRecordUTCTime.defiMode = DEFINITION_MODE_HG;
/** 6. 设置密钥:自定义密钥传具体值,否则可用设备序列号 */
 paramDeviceRecordUTCTime.psk = @"********";
/** 7. 录像开始时间(不可为 0) */
 paramDeviceRecordUTCTime.beginTime = 0;
/** 8. 录像结束时间(不可为 0) */
 paramDeviceRecordUTCTime.endTime = 0;
/** 是否开启拉流优化(建议传 YES) */
 paramDeviceRecordUTCTime.isOpt = YES;
/** 10. 是否回放(建议传 YES) */
paramDeviceRecordUTCTime.isPlayBack = YES;
/** 11. 按时间回放时的拉流类型 */
paramDeviceRecordUTCTime.PlayMode = @"********";
/** 12. 开始播放 */
[m_play playRecordStream: paramDeviceRecordUTCTime];
  1. 云录像回放:
/** 1. 初始化云录像回放参数对象 */
LCOpenSDK_ParamCloudRecord *paramCloudRecord = [[LCOpenSDK_ParamCloudRecord alloc] init];
/** 2. 设置 accessToken(由 AppId、AppSecret 向 Imou 云开放平台换取) */
paramCloudRecord.accessToken = @"********";
/** 3. 设置设备序列号 */
paramCloudRecord.deviceID = @"********";
/** 4. 设置通道号:单通道设备填 0,NVR 等多通道设备填具体通道号 */
paramCloudRecord.channel = 0;
/** 5. 设置密钥:自定义密钥传具体值,否则可用设备序列号 */
paramCloudRecord.psk = @"********";
/** 6. 设置录像区域 ID(recordRegionID) */
paramCloudRecord.recordRegionID = @"********";
/** 7. 设置回放偏移时间(秒),从文件开头播放填 0 */
paramCloudRecord.offsetTime = 0;
/** 8. 设置录像类型,填 RECORD_TYPE_ALL */
paramCloudRecord.recordType = RECORD_TYPE_ALL;
/** 9. 设置回放超时时间(秒) */
paramCloudRecord.timeOut = 60;
/** 是否开启拉流优化(建议传 YES) */
paramCloudRecord.isOpt = @"********";
/** 11. TCM 校验密码后是否重新播放 */
paramCloudRecord.isReplay = @"********";
/** 12. 设置 productId */
paramCloudRecord.productID = @"********";
/** 13. 设置拉流模式 */
paramCloudRecord.streamType = @"********";
/** 14. 设置录像区域 ID */
paramCloudRecord.recordregionID = @"********";
/** 15. 开始播放 */
[m_play playRecordStream:paramCloudRecord]
  • 实现监听回调。

示例代码:

/** 1. 播放结果回调,可按错误码分别处理 */
-(void)onPlayerResult:(NSString*)code Type:(NSInteger)type Index:(NSInteger)index {
 // 伪代码:在此实现回调逻辑
 }
/** 2. 播放开始回调 */
 -(void)onPlayBegan:(NSInteger)index {
 // 伪代码:在此实现回调逻辑
 }
/** 3. 播放结束回调 */
 -(void)onPlayFinished:(NSInteger)index {
 // 伪代码:在此实现回调逻辑
 }
/** 4. 文件起止时间回调 */
 -(void)onFileTime:(long)beginTime EndTime:(long)endTime Index:(NSInteger)index {
 // 伪代码:在此实现回调逻辑
 }
/** 5. 当前播放进度回调 */
 -(void)onPlayerTime:(long)time Index:(NSInteger)index {
 // 伪代码:在此实现回调逻辑
 }

6. 语音对讲

语音对讲是设备与客户端之间的语音通话能力,须在实时预览过程中使用。

开发步骤:

  • 先实现实时预览。

  • 调用 OpenSDK 初始化对讲对象与对讲参数,启动对讲。

示例代码:

/** 1. 初始化语音对讲对象 */
LCOpenSDK_AudioTalk *m_talker = [[LCOpenSDK_AudioTalk alloc] init];
/** 2. 设置监听对象 */
[m_talker setListener:(id<LCOpenSDK_TalkerListener>)self];
/** 3. 初始化对讲参数对象 */
LCOpenSDK_ParamTalk *paramTalk = [[LCOpenSDK_ParamTalk alloc] init];
/** 4. 设置 accessToken(由 AppId、AppSecret 向 Imou 云开放平台换取) */
paramTalk.accessToken = @"********";
/** 5. 设置设备序列号 */
paramTalk.deviceID = @"********";
/** 6. 设置通道号:-1 为设备对讲,通道对讲填具体通道号 */
paramTalk.channel = -1;
/** 7. 设置密钥:自定义密钥传具体值,否则可用设备序列号 */
paramTalk.psk = @"********";
/** 8. 设置 playToken(可选,传入可提升出流速度) */
paramTalk.playToken = @"********";
/** 是否开启拉流优化(建议传 YES) */
paramTalk.isOpt = YES;
/** 10. 开始对讲 */
[m_talker playTalk:paramTalk];
  • 实现对讲结果回调。

示例代码:

/** 对讲结果回调 */
-(void) onTalkResult:(NSString *) error TYPE:(NSInteger) type {
 // 伪代码:在此实现回调逻辑
}

7. 录像下载

OpenSDK 提供设备录像与云录像下载接口。当前仅支持 MP4 格式文件下载,暂不支持其他格式。

开发步骤:

  • 通过 设备查询 接口获取设备信息。

  • 通过 云录像查询、本地录像查询 获取录像信息。

  • 初始化下载对象、设置监听并开始下载。

示例代码:

/** 1. 拼装本地保存路径 */
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
 NSString* libraryDirectory = [paths objectAtIndex:0];
 NSString* myDirectory = [libraryDirectory stringByAppendingPathComponent:@"lechange"];
 NSString* downloadDirectory = [myDirectory stringByAppendingPathComponent:@"download"];
/** 勿与其它下载任务使用相同文件名,否则会覆盖 */
 NSString* infoPath = [downloadDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"record_download"]];
 NSString* m_downloadPath = [infoPath stringByAppendingString:@".mp4"];
/** 2. 按路径创建目录 */
 NSFileManager* fileManage = [NSFileManager defaultManager];
 NSError* pErr;
 BOOL isDir;
 if (NO == [fileManage fileExistsAtPath:myDirectory isDirectory:&isDir]) {
 [fileManage createDirectoryAtPath:myDirectory withIntermediateDirectories:YES attributes:nil error:&pErr];
 }
 if (NO == [fileManage fileExistsAtPath:downloadDirectory isDirectory:&isDir]) {
 [fileManage createDirectoryAtPath:downloadDirectory withIntermediateDirectories:YES attributes:nil error:&pErr];
 }
/** 3. 创建下载对象 */
 LCOpenSDK_Download* m_download = [LCOpenSDK_Download shareMyInstance];
/** 4. 设置下载监听 */
 [m_download setListener:(id<LCOpenSDK_DownloadListener>)self];

/** 5. 开始云录像下载 */
 [m_download startDownload:0 filepath:m_downloadPath token:@"********" devID:@"********" channelID:0 psk:@"********" recordRegionId:@"********" Type:1000 Timeout:10];
/** 6. 开始设备录像下载(speed 为倍速,如 16 倍速;fileID 为 recordId) */
 [m_download startDownload:0 filepath:m_downloadPath token:@"********" devID:@"********" decryptKey:@"********" fileID:@"********" speed:16];
  • 实现下载回调。

示例代码:

/** 1. 下载数据回调 */
-(void) onDownloadReceiveData:(NSInteger)index datalen:(NSInteger)datalen {
 // 伪代码:在此实现回调逻辑
}
/** 2. 下载状态回调 */
-(void) onDownloadState:(NSInteger)index code:(NSString *)code type:(NSInteger)type {
 // 伪代码:在此实现回调逻辑
}

8. 数据解密

目前设备告警缩略图与录像封面图默认加密存储,须解密后方可正常显示:使用 LCOpenSDK_Utils 解密图片数据。

示例代码:

	NSData* dataOut = [[NSData alloc] init];
 NSInteger iret = [[LCOpenSDK_Utils new] decryptPic:picData deviceID:deviceId key:key bufOut:&dataOut];
 NSLog(@"decrypt iret[%ld]", (long)iret);
 if (0 == iret) {
 UIImage* img = [UIImage imageWithData:[NSData dataWithBytes:[dataOut bytes] length:[dataOut length]]];
 [cache storeImage:img forKey:key_temp toDisk:YES completion:^{

 }];
		[self setImage:img];
 }
Android 标准 Demo
iOS 标准 Demo