iOS 中集成海康威视 摄像视频

本文原文地址  http://www.cnblogs.com/qianLL/p/6652104.html 

一.要导入相关的库,注意 这里比较坑的是 要用和他一样的 如果开始的工程中用了AFN或者MJExtentsion 的话 自己最好删除了,不然包很多错误,直接把他的库导入进去即可

二,在Other Linker Flags 中要设置 -Objc

三,要初始化MSP的地址与端口才可以进行视频播放的相关组件

[[MCUVmsNetSDK shareInstance] configMspWithAddress:服务器地址 port:端口号]; VP_InitSDK();

四,iOS 9以上要设置 在info.plist文件中设置支持HTTP

五,只支持真机调试

六,在调用摄像头之前,要先登录自己账号,方法在下面

七,注意的是,bitcode 要设置为No,切记,库一定要和他用一样的 

接口说明
MSP的IP端口配置
/**
 *  初始化msp的IP与端口
 *
 *  @param address msp的IP地址
 *  @param port    msp的端口
 */
- (void)configMspWithAddress:(NSString *)address port:(NSString *)port;

登录接口
/**
 *  登录接口
 *
 *  @param servAddr         [IN]服务器地址
 *  @param sessionID        [IN]会话ID
 *  @param doorId           [IN]门禁ID
 *  @param groupID          [OUT]监控点详细信息
 */
- (void)loginMspWithUsername:(NSString *)username password:(NSString * )password success:(void (^)(id object))success failure:(void (^)( NSError *error))failure;

注销接口
/**
 *  登出接口
 */
- (void)logoutMsp:(void (^)(id object))success failure:(void (^)(NSError *error))failure;

获取资源接口
/**
 *  获取根节点
 *  @param sysType    获取类型 1:视频 2:门禁
 *  @param success        成功回调函数
 *  @param failure        失败回调函数
 */
- (void)requestRootNodeWithSysType:(NSInteger)sysType success:(void (^)( id object))success failure:(void (^)(NSError *error))failure;

/**
 *  获取资源
 *
 *  @param sysType        资源类型 1:视频 2:门禁,
 *  @param nodeType       当前节点类型 1:控制中心 2:区域
 *  @param currentID      请求获取子资源的节点的ID
 *  @param numPerPage     每页获取数量
 *  @param curPage        当前第几页
 *  @param success        成功回调函数
 *  @param failure        失败回调函数
 */
- (void)requestResourceWithSysType:(NSInteger)sysType nodeType:(NSInteger)nodeType currentID:(NSString *)currentID numPerPage:(NSInteger)numPerPage curPage:(NSInteger)curPage success:(void (^)( id object))success failure:(void (^)(NSError *error))failure;

预览相关接口
/**
 *  开始预览
 *
 *  @param cameraSyscode     监控点syscode
 *  @param type     预览画质
 *  @param playView 预览view
 */
- (void)startRealPlay:(NSString *)cameraSyscode videoType:(VP_STREAM_TYPE)type playView:(UIView *)playView complete:(void(^)(BOOL finish, NSString *message))complete;

/**
 *  停止预览
 */
- (BOOL)stopRealPlay;

/**
 *  抓图
 */
- (BOOL)capture:(VPCaptureInfo *)captureInfo;
/**
 *  开始录像
 *
 *  @return 录像是否成功
 */
- (BOOL)startRecord:(VPRecordInfo *)recordInfo;

/**
 *  停止录像
 *
 *  @return 停止录像是否成功
 */
- (BOOL)stopRecord;

/**
 *  打开声音
 *
 *  @return 返回打开声音是否成功
 */
- (BOOL)openAudio;

/**
 *  关闭声音
 *
 *  @return 关闭声音是否成功
 */
- (BOOL)turnoffAudio;

/**
 *  开始云台控制
 *
 *  @param ptzCommond 云台命令
 *  @param param1     云台参数1:云台转动时转动速度(1-10)或者 预置点操作时预置点编号 或者 3d放大时起始点x坐标
 */
- (void)startPtzControl:(NSInteger)ptzCommond withParam1:(NSInteger)param1;

- (void)stopPtzControl:(NSInteger)ptzCommond withParam1:(NSInteger)param1;

回放相关接口
/**
 *  开始回放
 *
 *  @param cameraSyscode        监控点syscode
 *  @param playView             回放view
 */
- (void)startPlayBack:(NSString *)cameraSyscode playView:(UIView *)playView date:(NSDate *)date;

/**
 *  更新当前播放的时间
 *
 *  @param currentTime 当前时间
 */
- (void)updatePlayBackTime:(TIME_STRUCT)currentTime;

/**
 *  pickerView更新播放时间和录像位置
 *
 *  @param date 录像时间
 *  @param pos  录像位置
 */
- (void)pickerStartPlayBack:(NSDate *)date currentPos:(NSString *)pos;

/**
 *  停止回放
 */
- (BOOL)stopPlayBack;

/**
 *  获取全局osd时间
 *
 *  @return 返回全局时间
 */
- (NSTimeInterval)getOsdTime;

/**
 *  抓图
 */
- (BOOL)capture:(VPCaptureInfo *)captureInfo;

/**
 *  暂停播放
 *
 */
- (BOOL)pausePlayBack;

/**
 *  重启播放
 */
- (BOOL)resumePlayBack;

/**
 *  开始录像
 *
 *  @return 录像是否成功
 */
- (BOOL)startRecord:(VPRecordInfo *)recordInfo;

/**
 *  停止录像
 *
 *  @return 停止录像是否成功
 */
- (BOOL)stopRecord;

/**
 *  打开声音
 *
 *  @return 返回打开声音是否成功
 */
- (BOOL)openAudio;

/**
 *  关闭声音
 *
 *  @return 关闭声音是否成功
 */
- (BOOL)turnoffAudio;

实体类
监控点信息类MCUCameraInfo
#import <Foundation/Foundation.h>

@interface MCUCameraInfo : NSObject

@property (nonatomic, copy) NSString    *sysCode;
@property (nonatomic, copy) NSString    *cameraID;
@property (nonatomic, copy) NSString    *cameraName;
@property (nonatomic, copy) NSString    *userCapability; /**<用户权限 1代表实时预览,2代表录像回放,3代表云台控制 */
@property (nonatomic, copy) NSString    *deviceID;       /**< 对应的设备ID */
@property (nonatomic, copy) NSString    *gbSysCode;      /**< 级联的时候用gbSysCode组装播放的URL,用户不必关心,可调用MCUVmsNetSDK的getRealPlayURLWithStreamType:(VP_STREAM_TYPE)type cameraInfo:(MCUCameraInfo *)cameraInfo */
@property (nonatomic, copy) NSString     *guid;
@property (nonatomic, assign) NSInteger  type;
@property (nonatomic, copy) NSString     *recordPos;      /**< 录像保存的位置 */
@property (nonatomic, assign) NSInteger  channelNo;      /**< 通道号 */
@property (nonatomic, assign) NSInteger  deviceNetID;
@property (nonatomic, assign) BOOL       cascadeFlag;    /**< 级联表示,0表示非级联,1表示级联 */
@property (nonatomic, assign) BOOL       isOnline;       /**< 是否在线*/

@end

设备信息类
#import <Foundation/Foundation.h>

@interface MCUDeviceInfo : NSObject

@property (nonatomic, copy) NSString    *username;   /**< 设备的用户名 */
@property (nonatomic, copy) NSString    *password;   /**< 设备的密码 */
@property (nonatomic, copy) NSString    *deviceName; /**< 设备的名字 */
@property (nonatomic, copy) NSString    *indexCode;

@end

资源节点类
#import <Foundation/Foundation.h>

typedef NS_ENUM(NSUInteger, ResourceNodeType) {
    ResourceNodeTypeControlCenter = 1,
    ResourceNodeTypeRegion,
    ResourceNodeTypeCamera
};

@interface MCUResourceNode : NSObject

@property (nonatomic, copy) NSString           *nodeID;           /**< 节点ID , nodeType为3时,其相当于cameraID */
@property (nonatomic, copy) NSString           *parentNodeID;     /**< 父节点ID */
@property (nonatomic, copy) NSString           *nodeName;         /**< 节点名称 nodeType为3时,其相当于cameraName */
@property (nonatomic, copy) NSString           *sysCode;          /**< 监控点的sysCode,此处不为空 */
@property (nonatomic, copy) NSString           *userCapability;   /**< 监控点权限控制,@"1,2,4", 1代表有预览权限,2代表有录像回放权限,4代表有云台控制权限 */
@property (nonatomic, assign) ResourceNodeType  nodeType;         /**< nodeType:1对应平台里的控制中心,2代表平台里的区域, 3,对应监控点 */
@property (nonatomic, assign) BOOL              cascadeFlag;      /**< 监控点是否为级联,0非级联,1为级联 */
@property (nonatomic, assign) BOOL              isOnline;         /**< 监控点是否在线,0不在线,1在线 */

@end








错误码汇总
Status    Description    说明
202    Need modify password    初始密码登录时需要修改密码
203    Need modify password    密码强度不符合平台要求修改密码
204    Need modify password    密码过期修改密码
205    Password error    密码错误
205        Session过期,请重新登录
230    Exception:具体问题    
231    平台需要提示的错误描述

相关推荐