Appearance
SDK使用方法
初始化
- 在APPDelegate中初始化SDK。(必须配置)
objective-c
/**
/// 初始化SDK(带调试环境,推荐使用)
/// @param appid 开放平台注册获取应用Appid (必传)
/// @param privateKey 开放平台注册获取应用privateKey 家庭版可为空
/// @param env 环境类型 参考<AMOEnvironment>
- (void)initSDKWithAppId:(nonnull NSString *)appid
privateKey:(nullable NSString *)privateKey
env:(AMOEnvironment)env;
//调用示例
AMOSDKManager * andmuManager = [AMOSDKManager sharedInstance];
[andmuManager initSDKWithAppId:@"开放平台获取的appId" privateKey:@”开放平台获取的PrivateKey“ serverPro:YES];
objective-c
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
//必须配置
signal(SIGPIPE, SIG_IGN);
}
- 设置开启调试模式(可不设置)
objective-c
/// 控制台日志输出控制(默认关闭)
/// @param enable 开关参数 YES 默认为AMOLogLevel_default 如需改变日志等级 - (void) setLogLevel:方法
- (void)setDebug:(BOOL)enable;å
/// 日志等级(配置setDebug接口方法为true后生效)
/// @param level debug类型
///AMOLogLevelDefault = 0, //AndMuOpenSDK基础日志
///AMOLogLevelInterface = 1 << 0, //接口相关日志
///AMOLogLevelPlayer = 1 << 1, //播放器相关日志
///AMOLogLevelAll = AMOLogLevelDefault | AMOLogLevelInterface | AMOLogLevelPlayer //所有日志
- (void)setLogLevel:(AMOLogLevel)level;
登录
- 设置需要校验的Token(必须配置)
token通过自有平台从视频能力开放平台提供的api获取
https://open.andmu.cn/doc/api/api-list.html#获取token-基础应用、专业版
objective-c
/**
配置App端token
@param authToken 鉴权token
*/
- (void )setSDKAuthToken:(NSString *)authToken;
//调用示例
//注入token
[[AMOSDKManager sharedInstance] setSDKAuthToken:token];
视频直播
注入设备列表
设备列表需要调用平台的接口然后注入给SDK
objective-c
//缓存数据添加
AMOCameraCache *cache = [[AMOCameraCache alloc]init];
cache.deviceId = device.deviceId;
[[AMOCameraManager sharedInstance] addCameraInfo:cache];
- 开启会话
直播前需要建立链接
objective-c
/**
* 有回调的连接
*/
//建立连接
[[AMOCameraManager sharedInstance] connect:deviceId completion:^(BOOL isSucceeded, id _Nullable response, NSError * _Nullable error) {
}];
- 直播
1、播放器配置及播放
objective-c
//测试缓存数据添加
AMOCameraCache *cache = [[AMOCameraCache alloc]init];
cache.deviceId = device.deviceId;
[[AMOCameraManager sharedInstance] addCameraInfo:cache];
objective-c
AMOPlayerConfig *playerConfig = [[AMOPlayerConfig alloc]init];
//是否主动降噪
playerConfig.isRnnoise = true;
AMOCameraInfo *cameaInfo = [[AMOCameraInfo alloc]init];
cameaInfo.deviceId = self.cameraInfo.deviceId;
AMOPlayer *player = [[AMOPlayer alloc]initWithDeviceId:cameaInfo.deviceId config:playerConfig];
player.delegate = self;
//播放状态监听方法<AMOPlayerDelegate>
///播放器状态
- (void)amPlayerStatusChanged:(AMOPlayerStatus)playerStatus code:(AMOPlayerErrorCode)code {
NSLog(@"demo AMOPlayerStatus = %lu code = %ld 当前是否直播 = %@",(unsigned long)playerStatus, code);
}
//播放
[self.player prepare];
[self.player start];
播放器状态监听回调说明
objective-c
///播放器状态
typedef NS_ENUM(NSInteger, AMOPlayerStatus) {
///常规播放器状态
AMOPlayerStatusError = -1, //错误
AMOPlayerStatusIdle = 0, //初始状态
AMOPlayerStatusPreparing = 1, //准备中
AMOPlayerStatusPrepared = 2, //准备完成
AMOPlayerStatusBuffering = 3, //缓冲中
AMOPlayerStatusBuffered = 4, //缓冲完成
AMOPlayerStatusPlaying = 5, //正在播放
AMOPlayerStatusPaused = 6, //暂停
AMOPlayerStatusStoped = 7, //停止
AMOPlayerStatusCompleted = 8, //完成
///播放器异常回调状态
AMOPlayerStatusControlError = 9, //播放器控制异常回调(具体类型参考AMOPlayerErrorCode)
};
///播放器异常回调code
typedef NS_ENUM(NSInteger, AMOPlayerErrorCode) {
///常规播放器状态
AMOErrorCodePlayerError = 100005, //播放器异常
AMOErrorCodeReplayComplete = 100018, //播放器播放完成
AMOErrorCodeLocalPlayUrl = 100020, //本地回放链接失败
AMOErrorCodeLocalPlayControl = 100021, //本地回放控制失败
};
2、暂停播放
objective-c
[self.player pause];
3、恢复播放
objective-c
[self.player resume];
4、语音通话
objective-c
//开始通话 isDuplexTalk 根据摄像机能力集配置是否双工,双工YES
[self.player startAudioTalk:self.currentAbility.supportDuplexAudioTalk];
//结束通话
[self.player stopAudioTalk];
// AMOPlayerDelegate 代理方法监听播放状态
- (void)amPlayerAPIStatusHandled:(AMOPlayerAPIType)apiType isSuccess:(BOOL)isSuccess{
}
语音状态监听说明
objective-c
///语音状态
typedef NS_ENUM(NSUInteger, AMOAudioState) {
AMOAudioStateAvailable = 0, //可进行通话
AMOAudioStateUnAvailable = 1, //不可进行通话
AMOAudioStateError, //异常主动终止
};
5、释放播放器
objective-c
[self.player releasePlayer];
6、倍速播放
objective-c
///倍速播放
///目前支持(0.5 1 2 4 8 16 32)
///gb设备sd卡倍速目前支持(0.5 1 2 4 )
- (void)setPlaySpeed:(float)speed;
7、播放器静音
objective-c
//设置静音
- (void)setMute:(BOOL)isMute;
8、通话变声
objective-c
//语言对讲变声功能
- (BOOL)audioBufferVoiceConversion:(float)value;
9、获取当前播放时间
objective-c
//获取当前播放时间
- (double)getCurrentTime;
10、切换为直播
objective-c
//切换为直播
- (void)switchToLive;
11、设置点播url
objective-c
/// 剪辑播放配置
/// @param url 剪辑地址
- (void)setPlayUrl:(nonnull NSString *)url;
12、重新开始
objective-c
/// restart
- (void)reStart;
13、设置告警信息
objective-c
/// 告警播放
/// @param eventInfo 告警数据
- (void)setEventInfo:(nonnull AMOTimeLineEvent *)eventInfo;
14、获取当前通话音量
objective-c
//当前语音通话音量
- (long)getRecordVolume;
15、是否操作手势
objective-c
/// 添加手势
- (void)addGestureRecognizer;
- 断开会话
objective-c
//断开连接
[[AMOCameraManager sharedInstance] disConnect];
视频回看
::: 直播和回放互相切换无需重新初始化播放器,直接进行 seek
**,回放部分初始化与释放阶段与直播类似,这一节只概述回放相关的细节,详细示例参见
首先要通过下面接口获取回放片段用以绘制 :::
- 云回放片段
objective-c
#pragma mark -- 云回放
/// 获取云存储timeLineSecion
/// @param deviceId 设备Id Y
/// @param startTime 过滤开始时间,单位毫秒 13位时间戳 N
/// @param endTime 过滤结束时间 ,单位毫秒 13位时间戳 N
/// @param shareId 分享id N
/// @param completion 回调 Y response<NSArray<AMOTimeLineSection>>
- (void)getTimelineSectionList:(nonnull NSString *)deviceId
startTime:(nullable NSNumber *)startTime
endTime:(nullable NSNumber *)endTime
shareId:(nullable NSString *)shareId
completion:(AndMuHttpInterFaceCompletionHandler)completion;
- SD卡回放片段
objective-c
/// 通过sd卡获取timelineSection
/// @param deviceId 设备id
/// @param startTime 过滤开始时间,单位毫秒 13位时间戳 Y
/// @param endTime 过滤结束时间 ,单位毫秒 13位时间戳 Y
/// @param completion 回调 Y response<NSArray<AMOTimeLineSection>>
- (void)getSdcardTimelineSectionList:(nonnull NSString *)deviceId
startTime:(nonnull NSNumber *)startTime
endTime:(nonnull NSNumber *)endTime
completion:(AndMuHttpInterFaceCompletionHandler)completion;
- AMOTimeLineSection说明如下
objective-c
@interface AMOTimeLineSection : NSObject
@property (nonatomic, copy) NSString *videoId;
@property (nonatomic, strong) NSDate *startTime;
@property (nonatomic, strong) NSDate *endTime;
在选择了某个时间点后调用如下方法进行播放 (回放,单位ms):
objective-c
/// 回放到指定时间
/// @param timeInterval 时间戳 单位ms
- (void)seek:(NSTimeInterval)timeInterval;
从指定时间开始播放(回放,单位ms):
objective-c
/// 回放到指定时间段
/// @param startTimeInterval 开始时间 单位ms
/// @param endTimeInterval 结束时间 单位ms
- (void)seek:(NSTimeInterval)startTimeInterval endTime:(NSTimeInterval)endTimeInterval;
//示例
//startTime NSdate 起始时间
//获取想要回放到的时间戳,注意需要有数据的回放片段才能回放
//sd卡
[self.player seek:[startTime timeIntervalSince1970] * 1000 timelineDataType:AMOTimeLineDataTypeSDCard];
//云存储
[self.player seek:[startTime timeIntervalSince1970] * 1000 timelineDataType:AMOTimeLineDataTypeCloud];
从指定时间开始播放(回放,单位ms)
objective-c
/// 播放(播放指定时间段 AMOPlayType = AMOPlayerTypeTimeLine 使用)
/// @param startTime 指定开始时间
/// @param endTime 指定结束时间 -1 为直播
/// @param playType 1.未初始化播放器例如调用(start或start:) 2.已初始化播放器
- (void)start:(NSTimeInterval)startTime endTime:(NSTimeInterval)endTime playType:(NSInteger)playType;
///示例
[self.player start:[self.startDate timeIntervalSince1970] * 1000 endTime:[self.endDate timeIntervalSince1970] * 1000 playType:2];
- 实时预览
objective-c
/// 获取缩略图(主线程调用)
/// @param deviceId deviceid
/// @param section AMOTimeLineSection
/// @param timeStamp Section中指定时间戳
/// @param size CGSizeMake(width,height)
/// @param completion 回调
- (void)getThumbnail:(nonnull NSString *)deviceId
section:(nonnull AMOTimeLineSection *)section
timeStamp:(nonnull NSString *)timeStamp
size:(CGSize)size
completion:(AMOPlayerThumbnailHandler)completion;
///示例 AMOPlayer
[self.player getThumbnail:self.cameraInfo.deviceId section:section timeStamp:[NSString stringWithFormat:@"%lu",(unsigned long)[startTimeDate timeIntervalSince1970] * 1000] size:CGSizeMake(1334, 750) completion:^(BOOL isSucceeded, UIImage * _Nullable image, NSString * _Nullable imgUrl, NSError * _Nullable error) {
}];
- 视频截图
截图需要在视频播放起来后进行
objective-c
/// 获取缩略图
/// @param block 回调
- (void)getScreenShot:(void(^)(UIImage * _Nonnull image))block;
[self.player getScreenShot:^(UIImage * _Nonnull image) {
}
事件告警
- 获取告警视频列表
objective-c
//// 获取告警事件列表
/// @param deviceId 设备id Y
/// @param startTime 过滤开始时间,单位毫秒 13位时间戳 N
/// @param endTime 过滤结束时间 ,单位毫秒 13位时间戳 N
/// @param isPage 是否分页 (YES 只会返回一页数据 最大100条 要进行分页操作使用最后一条数据的开始时间作为下次分页的endTime;NO 全返回)
/// @param cancelTask 是否取消请求 (只支持isPage为NO 不分页场景)
/// @param shareId 分享设备传入
/// @param generate 是否生成缩略图 默认生成 generate 1 不生成缩略图 0 生成缩略图
/// @param completion 回调 Y response<NSArray<AMOTimeLineEvent>>
- (void)getEventList:(nonnull NSString *)deviceId
startTime:(nullable NSNumber *)startTime
endTime:(nullable NSNumber *)endTime
isPage:(BOOL)isPage
cancelTask:(BOOL)cancelTask
shareId:(nullable NSString *)shareId
generate:(nullable NSNumber *)generate
completion:(AndMuHttpInterFaceCompletionHandler)completion;
//示例
[[AMOSDKManager sharedInstance] getEventList:self.kCameraInfo.deviceId
startTime:@(startTime)
endTime:@(endTime)
isPage:YES
cancelTask:NO
shareId:self.kCameraInfo.shareId ? self.kCameraInfo.shareId : nil
generate:nil
completion:^(BOOL isSucceeded, id _Nullable response, NSError * _Nullable error) {
if (isSucceeded) {
NSArray * dataArray = response;
[weakSelf.eventArray addObjectsFromArray:dataArray];
dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf.playerCollectionView reloadData];
});
}else{
NSLog(@"demo 获取告警信息失败 失败原因 = %@",error.localizedDescription);
}
}];
- 删除告警
objective-c
/// 删除告警(删除timelineEvent)
/// @param deviceId 设备id
/// @param event 要删除的evnet模型
/// @param completion 回调
- (void)deleteEvent:(nonnull NSString *)deviceId
event:(nonnull AMOTimeLineEvent *)event
completion:(AndMuHttpInterFaceCompletionHandler)completion;
//示例
[[AMOSDKManager sharedInstance] deleteEvent:self.cameraInfo.deviceId
event:eventInfo completion:^(BOOL isSucceeded, id _Nullable response, NSError * _Nullable error) {
if (isSucceeded) {
[weakSelf initData];
[weakSelf showTipText:@"删除告警成功"];
}else{
[weakSelf showTipText:@"删除告警失败"];
}
}];
AMOTimeLineEvent说明如下:
objective-c
@interface AMOTimeLineEvent : NSObject
//视频id
@property (nonatomic, copy) NSString *videoId;
//开始时间
@property (nonatomic, strong) NSDate *startTime;
//结束时间
@property (nonatomic, strong) NSDate *endTime;
//播放地址
@property (nonatomic, copy) NSString *playAddress;
//事件id
@property (nonatomic, copy) NSString *eventId;
//缩略图
@property (nonatomic, copy) NSString *thumbnail; //640x360
//是否有套餐
@property (nonatomic, assign) BOOL isServerEvent;
//事件类型
@property (nonatomic, assign) AMOEventType alarmType;
//人脸id
@property (nonatomic, copy) NSString *personID;
@end
告警事件类型说明
objective-c
typedef NS_ENUM(NSUInteger, AMOEventType) {
AMOEventTypeMotion = 1, //运动
AMOEventTypeSound = 2, //声音
AMOEventTypeFace = 3, //人脸
AMOEventTypePeopleDetection = 4, //人型检测
//识别到某个人而没有录制的时间
AMOEventTypePrivateFR = 6,
AMOEventTypeManuelTurnOff = 7,
AMOEventTypeScheduleTurnOff = 8,
AMOEventTypeScheduleTrunOffList = 9,
//门铃
AMOEventTypeTamper = 11,
AMOEventTypeBatteryMode = 12, //强制拆迁的警告
AMOEventTypePIR = 13, //有人经过
AMOEventTypeNormalSound = 14, //盘旋报警
AMOEventTypeModeLive = 15, //直播,没有发生门铃事件
AMOEventTypeModeCall = 16, //门铃事件
AMOEventTypeManualRecord = 17, //门铃拒接
AMOEventTypeManualDoorbellHasBeenRead = 18, //门铃已接听
AMOEventTypeDoorbellUnread = 19, //门铃未接听
AMOEventTypeHamper = 20,
AMOEventTypeCheckIn = 21,
AMOEventTypePirMode = 22,
AMOEventTypeEventStart = 36,
AMOEventTypeEventEnd = 37,
AMOEventTypeEventWander = 55, //有人逗留
AMOEventTypeForceDestroy = 56, //暴力强拆
AMOEventTypeVideoOcclusion = 70, //视频遮挡
AMOEventTypeVideoBorderIntrusion, //边界入侵
AMOEventTypeVideoCrossBorderDetection, //越界侦测
AMOEventTypeVideoRegionalInvasion, //区域入侵
AMOEventTypeVideoCustomAlarm, //自定义告警
AMOEventTypeEquipmentMessageReporting, //设备消息上报
AMOEventTypePassengerFlowStatistics, //客流统计
AMOEventTypeShutterOpen = 100,
AMOEventTypeShutterClose = 101,
AMOEventTypePowerMode = 102,
AMOEventTypeBatteryQuantity = 103,
//被删除掉的时间短
AMOEventTypeSelfDelete = 120, //被删除的时间段
//Camera在升级的时候停止录制的时间段
AMOEventTypeUpgrading = 121,
AMOEventTypePIRMotion = 131,
AMOEventTypeGBMotion = 1502,
AMOEventTypeAndLinkEvent = 2000,
AMOEventTypeModePir = 2001, //体检测触发摄像机录制事件
AMOEventTypeDoorWindow = 2002, //门磁打开触发摄像机录制事件
AMOEventTypeOtherSensor = 2003, //其他传感器触发的摄像机录制事件
AMOEventTypeCommon = 2004,
};
告警播放始化与释放阶段与直播类似,播放代码如下:
objective-c
AMOPlayerConfig *playerConfig = [[AMOPlayerConfig alloc]init];
playerConfig.isRnnoise = true;
playerConfig.playType = AMOPlayerTypeNormal;
AMOCameraInfo *cameaInfo = [[AMOCameraInfo alloc]init];
cameaInfo.deviceId = deviceId;
AMOPlayer *player = [[AMOPlayer alloc]initWithDeviceId:cameaInfo.deviceId config:playerConfig];
player.delegate = self;
[player setEventInfo:eventInfo];
[self.player prepare];
[self.player start];
设备设置
- 获取设备能力集设置信息
objective-c
#pragma mark -- 能力集 && 设置项
/// 获取设备能力集
/// @param deviceId 设备Id Y
/// @param completion 回调 response<AMOCameraAbility>
- (void)getDeviceAbility:(nonnull NSString *)deviceId
completion:(AndMuHttpInterFaceCompletionHandler)completion
在完成对摄像头操作后需要断开会话
具体配置项说明如下:
objective-c
///设置项参数
typedef NS_ENUM(NSInteger, AMOSettingType) {
AMOSettingTypeTitle = 1, //设备名称
AMOSettingTypeStatus, //设备打开、关闭状态
AMOSettingTypeAntiFlicker, //防闪烁
AMOSettingTypeNightVision, //夜视开关
AMOSettingTypeHDVideo, //高清视频
AMOSettingTypeRotateImage, //是否旋转图片
AMOSettingTypeCameraSound, //设备声音采集
AMOSettingTypeStatusLight, //设备状态指示灯
AMOSettingTypeMotionTrack, //运动追踪
AMOSettingTypeMotionTrackBackTime, // 运动追踪归为时长设置
AMOSettingTypeSoundTrack, //声音追踪(听声辨位)
AMOSettingTypeSoundIDlocVolume, //听声辩位声音分贝阈值
AMOSettingTypeSoundIdLocBackTime, //听声辩位声音分贝阈值
AMOSettingTypePhoneNumber, // App修改被呼叫的电话号码
AMOSettingTypeOfflineSpeechRecongize, // 本地语言识别开关
AMOSettingTypeCallSwitch, // 打电话开关
AMOSettingTypeVideoRecordTime, //视频收藏录像时长设置
AMOSettingTypeBootSound, //开机欢迎声
AMOSettingTypeScreenshotWatermark, //手动截图水印
AMOSettingTypeFisheyeInstallPos, //鱼眼顶装/壁装
AMOSettingTypeImsNumber, // 合家固话
AMOSettingTypeTelephoneService, // 固话业务开关
AMOSettingTypeFullColorNightVision, //全彩夜视
AMOSettingTypeFullColorNightVisionModel, //全彩夜视模式
AMOSettingTypeLightIntensity, //白光灯亮度
AMOSettingTypeRegionInvasion, //区域入侵
//告警
AMOSettingTypeSoundDetection, //声音告警开关
AMOSettingTypeSoundSensitivity, //声音告警灵敏度
AMOSettingTypeMotionDetection, //运动告警开关
AMOSettingTypeMotionSensitivity, //运动告警灵敏度
AMOSettingTypeMotionRegions, //运动区域设置
AMOSettingTypeFaceDetection, //人脸识别开关
AMOSettingTypePeopleDetection, //人形检测
AMOSettingTypePIRDetection, // PIR检测推送开关
AMOSettingTypePIRSensitivity, // PIR灵敏度条件
AMOSettingTypePIRStatus, // PIR灵敏度开关
AMOSettingTypeSoundLightAlarm, //声光报警开关
AMOSettingTypeSoundLightAlarmVolume, //声光报警音量
AMOSettingTypeSoundLightAlarmModel, //声光报警模式
//告警通知
AMOSettingTypeSendSoundAlerts, //声音通知
AMOSettingTypeSendMotionAlerts, //运动通知
AMOSettingTypePeopleDetectionNotify, //人形检测通知
AMOSettingTypeSendOfflineAlerts, //离线告警通知
//定时截图
AMOSettingTypeScheduleImage, //定时截图
AMOSettingTypeImageTimingLevel, //定时截图当前设置的频率{1,2,3,4}
AMOSettingTypeImageTimingLevels, //定时截图开关schedule{1 = 30, 2 = 60, 3 = 120, 4 = 240}
AMOSettingTypeImageTimingSchedule, //定时截图计划开关
//门铃
AMOSettingTypeBellRing, //响铃开关
AMOSettingTypeLowPowerMode, //低电量模式
AMOSettingTypeLowPowerPirDetectInterval, //低电量Pir检测间隔
AMOSettingTypeLowPowerRecordDuration, //低电量录制时长
AMOSettingTypeForceDestroyAlert, //强拆告警
AMOSettingTypeWideDynamic, //宽动态
AMOSettingTypeSubStatusLight, //室外门铃按钮提示灯
AMOSettingTypeDoorbellStatus, //门铃在线状态
视频截图
//抓拍机
AMOSettingTypeFocalLength, //设置焦距( 人脸抓拍机)
AMOSettingTypeFocusLevel, //设置对焦( 人脸抓拍机)
AMOSettingTypeFaceExposure, //设置人脸曝光值( 人脸抓拍机)
AMOSettingTypeFaceDetectRegion, //设置人脸检测区域
//运动检测
AMOSettingTypePersonStatus, //客流统计开关状态
AMOSettingTypePersonSchedules, //客流统计打开的schedule
AMOSettingTypePersonRegion, //客流统计检测区域
AMOSettingTypeSdCard, // sd卡录像功能
AMOSettingTypeScheduleTurnOff, //定时开关
AMOSettingTypeNewScheduleTurnOff, //平台定时开关
AMOSettingTypeScheduleNotSendAlerts, //告警定时关闭通知计划
AMOSettingTypeDeviceLatitude, //设备位置维度
AMOSettingTypeDeviceLongitude, //设备位置经度
AMOSettingTypeDeviceLocation, //设备位置
};
文件相关
获取云存储大小
objective-c
#pragma mark -- 云存储
/// 获取云存储大小
/// @param deviceId 设备id
/// @param completion 回调
- (void)getCloudStorageInfo:(nonnull NSString *)deviceId
completion:(AndMuHttpInterFaceCompletionHandler)completion;
云台控制
objective-c
#pragma mark -- 云台
/// 设置PTZ接口(主线程执行)
/// @param deviceId 设备ID
/// @param ptzType 设置PTZ类型,@see AMOPTZType
/// @param direction
/// 如果 PTZType == AMOPTZTypeTurnOnce || AMOPTZTypeTurnContinuos 需要指定此参数,上下左右
/// 如果 PTZType == AMOPTZTypeStopTurn || AMOPTZTypeResetPosition 需要指定 AMOPTZDirectReset
/// 如果 PTZType == AMOPTZTypeSetPosition 需要指定 AMOPTZDirectUnKnow
/// @param location pan 水平 tilt 上下
/// 如果(PTZType == AMOPTZTypeSetPosition)时,需要指定此参数,其它传nil。参数类型如@{@"pan": @(0), @"tilt" :@(-10203)}
/// @param completion 回调 response<NSDictiory> 成功 000000 data@{}
- (void)setPTZPosition:(nonnull NSString *)deviceId
ptzType:(AMOPTZType)ptzType
direction:(AMOPTZDirect)direction
location:(nullable NSDictionary *)location
completion:(AndMuHttpInterFaceCompletionHandler)completion;
AMPTZType && AMPTZDirect类型列举:
objective-c
///Ptz
///设置PTZ类型枚举
typedef NS_ENUM(NSInteger, AMOPTZType) {
AMOPTZTypeUnKnow = -1,
AMOPTZTypeTurnOnce = 0, //设置 一次PTZ,需要direction,上下左右
AMOPTZTypeTurnContinuos = 1, //设置 持续PTZ,需要direction,上下左右
AMOPTZTypeStopTurn = 2, //设置 停止持续PTZ direction = AMOPTZDirectReset
AMOPTZTypeResetPosition = 3, //设置 重置PTZ direction = AMOPTZDirectReset
AMOPTZTypeSetPosition = 4 //设置 指定PTZ,需要location
};
///指定PTZ(摄像头摇头)的方向
typedef NS_ENUM(NSInteger, AMOPTZDirect) {
AMOPTZDirectUnKnow = -1,
AMOPTZDirectReset = 0, //重置ptz\停止摇头
AMOPTZDirectLeft = 1, //AMOPTZDirectLeft: 左
AMOPTZDirectRight = 2, //AMOPTZDirectRight: 右
AMOPTZDirectUp = 3, //AMOPTZDirectUp: 上
AMOPTZDirectDown = 4, //AMOPTZDirectDown: 下
};
SD卡
- 获取SD卡信息
objective-c
/// 获取sd卡信息
/// @param deviceId 设备id
/// @param completion 回调<AMOSDCardInfo>
- (void)getSDCardInfo:(nonnull NSString *)deviceId
completion:(AndMuHttpInterFaceCompletionHandler)completion;
//示例
[AMOSDKManager sharedInstance] getSDCardInfo:self.cameraInfo.deviceId completion:^(BOOL isSucceeded, id _Nullable response, NSError * _Nullable error) {
<#code#>
}
AMOSDCardInfo说明如下:
objective-c
@interface AMOSDCardInfo : NSObject
//TF卡状态:0 不存在,1正常,2 异常,3 容量满,4 未知
@property (nonatomic, assign) NSInteger state;
//总容量
@property (nonatomic, assign) long totalSize;
//可用容量
@property (nonatomic, assign) long freeSize;
@end
- 格式化SD卡
objective-c
/// 格式化sd卡
/// @param deviceId 设备Id
/// @param timeout 超时时间 不传默认20 (最大时间55)
/// @param completion 回调 (error code = 80001 服务器格式化超时)
- (void)formatSDCard:(nonnull NSString *)deviceId
timeout:(nullable NSNumber *)timeout
completion:(AndMuHttpInterFaceCompletionHandler)completion;
设备状态监听
- 注册通知
objective-c
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(cameraConnectionDidChanged:) name:AMOCameraConnectionDidMessageNotification object:nil];
- (void)cameraConnectionDidChanged:(NSNotification *)note{
__weak typeof(self)weakSelf = self;
if ([note.userInfo isKindOfClass:[NSDictionary class]]) {
NSDictionary *noteDic = note.userInfo;
if ([noteDic[@"msgType"] isEqualToString:@"MESSAGE_DEVICE_BIND"]) {
dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf showTipText:@"设备绑定消息"];
});
}else if ([noteDic[@"msgType"] isEqualToString:@"MESSAGE_DEVICE_UNBIND"]) {
dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf showTipText:@"设备解绑消息"];
});
}else if ([noteDic[@"msgType"] isEqualToString:@"MESSAGE_DEVICE_ONLINE"]) {
dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf showTipText:[NSString stringWithFormat:@"设备上线消息 deviceID = %@",noteDic[@"deviceId"]]];
});
}else if ([noteDic[@"msgType"] isEqualToString:@"MESSAGE_DEVICE_OFFLINE"]) {
dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf showTipText:[NSString stringWithFormat:@"设备下线消息 deviceID = %@",noteDic[@"deviceId"]]];
});
}else if ([noteDic[@"msgType"] isEqualToString:@"MESSAGE_ADD_CAMERA_FAILED"]) {
dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf showTipText:@"设备绑定失败消息"];
});
}else if ([noteDic[@"msgType"] isEqualToString:@"MESSAGE_UPGRADING_CAMERA"]) {
}else if ([noteDic[@"msgType"] isEqualToString:@"MESSAGE_WIFISIGNAL"]) {
dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf showTipText:@"收到wifi消息"];
});
}else if ([noteDic[@"msgType"] isEqualToString:@"MESSAGE_DEVICEBATTERY"]) {
dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf showTipText:@"收到电量强度"];
});
}
}else{
[self showTipText:@"收到信息格式错误"];
}
}
- 移除通知
objective-c
[[NSNotificationCenter defaultCenter] removeObserver:self name:AMOCameraConnectionDidMessageNotification object:nil];
重新配网
- 获取WIFI列表
objective-c
#pragma mark -- Wifi
/// 获取Wifi列表(一起返回)
/// @param deviceId 设备Id
/// @param completion 回调 NSArray<AMODeviceWifiInfo>
- (void)getWiFiList:(nonnull NSString *)deviceId
completion:(AndMuHttpInterFaceCompletionHandler)completion;
AMDeviceWiFiInfo说明如下:
objective-c
@interface AMODeviceWifiInfo : NSObject
//路由器mac
@property (nonatomic, copy) NSString *bssid;
//路由器SSID
@property (nonatomic, copy) NSString *ssid;
//密码,切换WIFi时候用
@property (nonatomic, copy) NSString *password;
//加密方式
@property (nonatomic, copy) NSString *encryption;
// 信号强度,0-5, 数字越大,信号越强
@property (assign) NSInteger signal;
// 是否连接
@property (assign) BOOL connected;
@end
- 切换WIFI
objective-c
/// 切换Wifi
/// @param deviceId 设备Id
/// @param wifiInfo 设置的info对象
/// @param completion 回调
- (void)changeDeviceWiFi:(nonnull NSString *)deviceId
wifiInfo:(nonnull AMODeviceWifiInfo *)wifiInfo
completion:(AndMuHttpInterFaceCompletionHandler)completion;
异常情况操作处理
1.当需要退回前后台情况
objective-c
//注册程序进入前台通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (updateForAppEnterForeground) name: UIApplicationWillEnterForegroundNotification object:nil];
//注册程序进入后台通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (updateForAppEnterBackground) name: UIApplicationDidEnterBackgroundNotification object:nil];
进入前台
[self.player resume];
//进入后台操作
[self.player pause];
释放AMOSDKManager
objective-c
//释放AndMuSDK数据
[[AMOSDKManager sharedInstance] unInit];