Wi-Fi 门锁音视频能力

更新时间:2023-06-28 08:28:17

门锁音视频能力接口支持可视门锁、拍照锁的实时视频查看、对讲等功能

功能简介

类名 说明
ThingSmartWiFiLockDevice 封装了音视频能力的Wi-Fi 门锁设备操作类,继承自 ThingSmartDevice
ThingSmartWiFiLockDeviceDelegate Wi-Fi 门锁设备协议代理,拓展自 ThingSmartDeviceDelegate

代理说明

ThingSmartWiFiLockDeviceDelegate:

/// 设备传图数据上报 dp212
///
/// @param device 门锁设备
/// @param message 设备上报的数据
- (void)onLockMessageArrived:(ThingSmartWiFiLockDevice *)device
                     message:(NSDictionary *)message;

/// 实时视频上报回调 dp63
///
/// @param device 门锁设备
/// @param model 设备上报的数据
- (void)onVideoRequestRealtime:(ThingSmartWiFiLockDevice *)device
                         model:(NSString *)model;

/// 远程开门请求图片上报 dp9
///
/// @param device 门锁设备
/// @param time 倒计时数据
- (void)unlockRequestCountdown:(ThingSmartWiFiLockDevice *)device
                          time:(NSInteger)time;

/// 告警请求图片上报 dp45
///
/// @param device 门锁设备
/// @param time 倒计时数据
- (void)alarmRequestCountdown:(ThingSmartWiFiLockDevice *)device
                         time:(NSInteger)time;

/// 远程开门回复上报 dp50
///
/// @param device 门锁设备
- (void)onRemoteUnlockReport:(ThingSmartWiFiLockDevice *)device;

/// 强制反锁回复上报 dp13
///
/// @param device 门锁设备
- (void)onForceLockUpReport:(ThingSmartWiFiLockDevice *)device;

示例代码

//初始化
self.lockDevice = [[ThingSmartWiFiLockDevice alloc] initWithDeviceId:self.device.deviceModel.devId];
//设置代理
self.lockDevice.delegate = self;

//远程请求开门 dp63
- (void)onVideoRequestRealtime:(ThingSmartWiFiLockDevice *)device model:(NSString *)model{
    //TODO
}

//设备传图数据 dp212
- (void)onLockMessageArrived:(ThingSmartWiFiLockDevice *)device message:(nonnull NSDictionary *)message{
    //TODO
}

//远程开门请求图片 dp9
- (void)unlockRequestCountdown:(ThingSmartWiFiLockDevice *)device time:(NSInteger)time{
    //TODO    
}

//告警请求图片 dp45
- (void)alarmRequestCountdown:(ThingSmartWiFiLockDevice *)device time:(NSInteger)time{
    //TODO
}

//远程开门回复上报 dp50
- (void)onRemoteUnlockReport:(ThingSmartWiFiLockDevice *)device{
    //TODO
}

//强制反锁回复上报 dp13
- (void)onForceLockUpReport:(ThingSmartWiFiLockDevice *)device{
    //TODO
}

远程开锁

接口说明

通过此接口可以实现远程开锁、关锁、拒绝开锁、拒绝关锁

- (void)remoteLockWithDevId:(NSString *)devId
                       open:(BOOL)open
                    confirm:(BOOL)confirm
                    success:(nullable ThingSuccessBOOL)success
                    failure:(nullable ThingFailureError)failure;

参数说明

参数 说明
devId 设备ID
open 开门还是关门,开门=YES,关门=NO
confirm 允许还是拒绝,允许=YES,拒绝=NO
success 接口成功回调
failure 接口失败回调

提示

success回调只能表示接口调用成功,不能作为门锁设备执行指令判断标准,confirm = YES 的情况下设备状态发生变化(开锁、关锁),设备执行成功后依赖监听方法onRemoteUnlockReport回调结果;confirm=NO 的情况设备状态没有产生变化,不会上报 dp,success可以认为拒绝开锁/拒绝关锁 执行成功

示例代码

    [self.lockDevice remoteLockWithDevId:devId
                                    open:YES
                                 confirm:NO
                                 success:^(BOOL result) {
						//TODO
    } failure:^(NSError *error) {
						//TODO
    }];

重新拍照

接口说明

重新拍照,设备会把抓拍的图片传到云存储,并上报通过onLockMessageArrived上报图片路径信息

注:防抖处理,15s内别重复调用

- (void)reTakePhoto:(BOOL)needTake
            success:(ThingSuccessHandler)success
            failure:(ThingFailureError)failure;

参数说明

参数 说明
needTake 是否重新拍照
success 接口成功回调
failure 接口失败回调

示例代码

[self.lockDevice reTakePhoto:YES success:^{
						//TODO
    } failure:^(NSError *error) {
						//TODO
    }];

强制反锁

接口说明

强制反锁,设备执行成功会通过onForceLockUpReport回调结果

- (void)enforceLock:(BOOL)needLock
            success:(ThingSuccessHandler)success
            failure:(ThingFailureError)failure;

参数说明

参数 说明
needLock 是否强制反锁
success 接口成功回调
failure 接口失败回调

示例代码

[self.lockDevice enforceLock:YES
                         success:^{
						//TODO
    } failure:^(NSError *error) {
						//TODO
    }];

获取最新的图片地址信息

接口说明

获取云存储上最新的一张图片信息。需要配合接口getPopupPictureAddressWithDevId 一起使用

- (void)getLatestPopupInfoWithDevId:(NSString *)devId
                           fileType:(NSInteger)fileType
                            success:(nullable ThingSuccessID)success
                            failure:(nullable ThingFailureError)failure;

参数说明

参数 说明
devId 设备ID
fileType 图片类型:远程解锁抓拍图片,告警抓拍图片
success 接口成功回调
failure 接口失败回调

返回值说明

字段 说明
filePath 图片在云存储的路径
fileKey 解密 key
bucket 云存储 bucket

示例代码

    [self.lockDevice getLatestPopupInfoWithDevId:self.lockDevice.deviceModel.devId
                                        fileType:1
                                         success:^(id result) {
						//TODO
    } failure:^(NSError *error) {
						//TODO
    }];

获取抓拍图片地址

接口说明

设备抓拍的图片会上传到云存储,通过此接口获取图片的地址。和监听回调onLockMessageArrived方法或getLatestPicture配合使用

- (void)getPopupPictureAddressWithDevId:(NSString *)devId
                                 bucket:(NSString *)bucket
                               filePath:(NSString *)filePath
                               success:(nullable ThingSuccessID)success
                               failure:(nullable ThingFailureError)failure;

参数说明

参数 说明
devId 设备ID
bucket 云存储 bucket
filePath 云存储加密 url
success 接口成功回调
failure 接口失败回调

返回值说明

字段 说明
fileUrl 图片在云存储的路径
mediaUrl 视频在云存储的路径
angle 角度,在IoT平台配置的角度旋转,值有0、90、180、270

注意

fileUrl 仍然是加密链接,需要onLockMessageArrivedgetLatestPopupInfoWithDevId获取 fileKey 解密。我们提供控件TYEncryptImage负责解密和显示图像

示例代码

//查询封面图地址
[self.lockDevice getPopupPictureAddressWithDevId:self.lockDevice.deviceModel.devId
                                          bucket:bucket
                                        filePath:filePath
                                         success:^(id result) {
            NSInteger angle = [result[@"angle"] integerValue];
            NSString *fileUrl = result[@"fileUrl"];

        } failure:^(NSError *error) {
            
        }];

//解密图片链接后获取image
UIImageView *imageView = [UIImageView new];
[imageView ty_setAESImageWithPath:fileUrl
                       encryptKey:fileKey
                        completed:^(UIImage * _Nullable image, NSURL * _Nullable url, TYEncryptWebImageFromType from, TYEncryptWebImageStage stage, NSError * _Nullable error) {
        //TODO
    }];

获取视频流视图对象

属性说明

@property (nonatomic, strong, readonly) UIView *videoView;

P2P 连接

在开始视频播放之前,需要先连接 P2P 通道。P2P 状态需要使用者自己维护,SDK 只负责下发指令和接收摄像机响应结果。

接口说明

连接 P2P 通道

- (void)p2pConnect:(ThingSuccessHandler)success
           failure:(ThingFailureError)failure;

断开 P2P 通道

- (void)p2pDisConnect:(ThingSuccessHandler)success
              failure:(ThingFailureError)failure;

参数说明

参数 说明
success 接口成功回调
failure 接口失败回调

是否已连上

- (BOOL)isP2pConnected;

是否在连接中

- (BOOL)isP2pConnecting;

实时播放视频

P2P连接成功之后,就能进行实时视频播放了。

接口说明

开始播放实时视频

- (void)startPreviewWithDefinition:(NSInteger)definition
                           success:(ThingSuccessHandler)success
                           failure:(ThingFailureError)failure;

停止播放实时视频

- (void)stopPreview:(ThingSuccessHandler)success
            failure:(ThingFailureError)failure;

参数说明

参数 说明
definition 清晰度模式
success 接口成功回调
failure 接口失败回调

清晰度模式

模式
标清 0x2
高清 0x4

示例代码

[self.lockDevice startPreviewWithDefinition:0x2 
 																		success:^{
                        //TODO
            											} failure:^(NSError *error) {
                        //TODO
}];

[self.lockDevice stopPreview:^{
                        //TODO  
									 } failure:^(NSError *error) {
                        //TODO  
}];

本地录制

当视频成功开始播放以后(可以是视频直播,也可以是录像回放),可以将当前正在播放的视频录制到手机中。

说明:在视频录制的过程中,请不要再切换视频清晰度,开关声音及对讲。

开启视频录制

接口说明

- (void)startRecordWithDevId:(NSString *)devId
                      params:(NSDictionary *)params
                     success:(ThingSuccessHandler)success
                     failure:(ThingFailureError)failure;

注:录制视频需要相册读写权限

参数说明

参数 说明
devId 设备ID
params rotateMode: xxx (旋转角度(t.Integer),仅支持:0(正常模式,不旋转)、1(逆时针旋转90度)、2(逆时针旋转180度)、3(逆时针旋转270度))}
success 接口成功回调
failure 接口失败回调

停止录制视频

接口说明

- (void)stopRecordAndFetchPath:(ThingSuccessList)success
                       failure:(ThingFailureError)failure;

回调参数说明

停止录制会返回两条数据:视频存放路径和视频二进制数据流,分别通过 key path data获取对应 value

是否在录制视频

接口说明

- (BOOL)isRecording;

示例代码

if ([self.lockDevice isRecording]) {
        [self.lockDevice stopRecordAndFetchPath:^(NSArray *list) {
							//TODO
        } failure:^(NSError *error) {
							//TODO
        }];
    }else{
        [self.lockDevice startRecordWithDevId:devId
															 params:@{@"rotateMode":@(2)}
															success:^{
							//TODO
        } failure:^(NSError *error) {
							//TODO
        }];
    }

视频截图

截取实时视频的图片后需要自己存储到手机相册里

接口说明

- (void)snapShootAndFetchPathWithDevId:(NSString *)devId
                                params:(NSDictionary *)params
                               success:(ThingSuccessList)success
                               failure:(ThingFailureError)failure;

参数说明

参数 说明
devId 设备ID
params rotateMode: xxx (旋转角度(t.Integer),仅支持:0(正常模式,不旋转)、1(逆时针旋转90度)、2(逆时针旋转180度)、3(逆时针旋转270度))}
success 接口成功回调
failure 接口失败回调

回调参数说明

截屏成功返回两条数据:图片存放路径和图片二进制数据流,分别通过 key path data获取对应 value

示例代码

[self.lockDevice snapShootAndFetchPathWithDevId:devId
                                         params:@{@"rotateMode":@(2)}
                                        success:^(NSArray *list) {
							//TODO
} failure:^(NSError *error) {
							//TODO
}];

视频声音

当视频成功开始播放以后,可以开启视频声音,默认声音是关闭状态。

接口说明

开启/关闭视频声音

- (void)enableMute:(BOOL)mute
           success:(ThingSuccessHandler)success
           failure:(ThingFailureError)failure;
音频模式
mute YES:开启静音 NO:关闭静音
success 接口成功回调
failure 接口失败回调

是否开启声音

- (BOOL)isMuting;

示例代码

BOOL isMuted = [self.lockDevice isMuting];
    [self.lockDevice enableMute:!isMuted success:^{
        if (isMuted) {
							//TODO				
        }else{
							//TODO					
        }
    } failure:^(NSError *error) {
        
    }];

实时对讲

在 p2p 连接成功后,可以开启与设备的实时通话功能,在开始对讲前,需要确保 App 已获得手机麦克风的访问权限。

开启对讲/关闭对讲

打开/关闭手机声音传输给摄像机操作。

- (void)startTalk:(ThingSuccessHandler)success
          failure:(ThingFailureError)failure;
- (void)stopTalk:(ThingSuccessHandler)success
         failure:(ThingFailureError)failure;

是否支持对讲/是否已开启对讲

- (BOOL)isSupportedTalk;
- (BOOL)isTalking;

示例代码

BOOL isTalking = [self.lockDevice isTalking];
BOOL isSupportedTalk = [self.lockDevice isSupportedTalk];
    if (isSupportedTalk) {
        if (isTalking) {
            [self.lockDevice stopTalk:^{
							//TODO					
            } failure:^(NSError *error) {
							//TODO					
            }];
        }else{
            [self.lockDevice startTalk:^{
							//TODO					
            } failure:^(NSError *error) {
							//TODO					
            }];
        }
    }