SDK使用说明
1、接入必读
- 本SDK只包含真机调试的功能,不支持任何模拟器的调试。
- 设备添加流程请参考Demo源码,注意设备状态。
- iOS的Demo使用动态库方式引入SDK,下载Demo修改Bundle Id后即可运行代码。
2、简介
本文档用于澄清慧视云开放平台SDK iOS版本接口之间的关系以及接口调用顺序。
3、环境准备
- 支持Xcode11.6以上
- 支持苹果手机系统iOS11以上版本
4、环境配置
下载SDK并解压缩
项目中需要在Link Binary With Libraries中导入,AudioToolbox.framework、libc++.tbd。
JVSPlayerSDK.h头文件导入需要调用播放库的位置。
手动引入JVSPlayerSDK.framework。
Info.plist里面增加2项隐私设置
麦克风权限:Privacy - Microphone Usage Description App需要您的同意才能访问麦克风,用于与设备对讲
相册权限: Privacy - Photo Library Usage Description App需要您的同意才能访问相册,用于与存放视频和图片
5、SDK初始化
可以直接在AppDelegate启动方法中调用播放库的初始化。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[JVSPlayerSDK shareInstanceSDK] initPlayerSDK:1 logPath:path];
return YES;
}
6、直播流程
6.1.连接设备
/// 连接设备
/// @param p2pInfo 流信息
/// @param deviceChannel 本地通道号
/// @param remoteChannel 远程通道号(p2p能用到)
/// @param stream 码流(p2p能用到)
/// @param isratio 是否保持原画面比
-(void)deviceConnect:(NSString *)p2pInfo withChannel:(int)deviceChannel withShowVideoView:(UIView *)showVideoView withRemoteChannel:(int)remoteChannel withStream:(int)stream isratio:(BOOL)isratio;
连接时需要实现的代理以及回调方法:
[JVSPlayerSDK shareInstanceSDK].ConnectDelegate = self;
6.2.视频连接状态回调
/// 视频连接状态回调
/// @param channel 通道号
/// @param eventState 事件类型
-(void)VideoEventCallBackChannel:(int)channel withEventState:(int)eventState;
eventState 对应状态说明:
注:int类型,从0开始
枚举值 | 说明 |
---|---|
JVS_NONE | 无状态 |
JVS_CONNECTED | 已连接 |
JVS_CONNECT_FAILED | 连接失败 |
JVS_CONNECTION_LIMIT | 连接限制(p2p连接时,设备连接达到上线了) |
JVS_CONNECTION_BROKEN | 连接中断(网络异常或服务中断) |
JVS_CONNECTION_DISCONNECTED | 连接断开(连接正常结束,录像回放结束) |
JVS_VIDEO_LOADING | 正在缓冲 |
JVS_VIDEO_DECODE_FAILED | 解码失败 |
JVS_VIDEO_DECODE_SUCCESS | 解码成功,收到解码成功后即可调用show接口来预览图像 |
JVS_VIDEO_INFO_ENCRYPTION | 视频信息,收到此状态表明视频流是加密流 |
JVS_MAX | 拓展字段暂时没有使用 |
6.3.改变画布大小
/// 改变画布大小
/// @param channnel 通道号
/// @param frame 大小
-(void)changeOpenGLViewFrameChannel:(int)channnel withFrame:(CGRect)frame;
6.4.断开视频连接
/// 断开视频
/// @param nLocalChannel 本地channel号
-(void)disconnect:(int)nLocalChannel;
7、回放流程
7.1.播放回放
/// 设备回放
/// @param deviceInfo 设备详情
/// @param stream 码流
/// @param remoteChannel 远程通道号
/// @param startTime 开始时间
/// @param showVideoView 播放窗口
/// @param connectType 连接类型 1.中维协议3.0(原公有云协议)设备。2.国标和云端
-(void)playerBackDeviceInfo:(NSString *)deviceInfo withStream:(int)stream withRemoteChannel:(int)remoteChannel withStartTime:(NSString *)startTime withShowVideoView:(UIView *)showVideoView withConnectType:(NSString *)connectType isratio:(BOOL)isratio;
/// 云存储回放
/// @param p2pInfo 流信息
/// @param deviceChannel 本地通道号
/// @param remoteChannel 远程通道号(p2p能用到)
/// @param stream 码流(p2p能用到)
/// @param isratio 是否保持原画面比
-(void)CloudDeviceConnect:(NSString *)p2pInfo withChannel:(int)deviceChannel withShowVideoView:(UIView *)showVideoView withRemoteChannel:(int)remoteChannel withStream:(int)stream isratio:(BOOL)isratio;
连接时需要实现的代理以及回调方法:
[JVSPlayerSDK shareInstanceSDK].ConnectDelegate = self;
7.2.视频连接状态回调
/// 视频连接状态回调
/// @param channel 通道号
/// @param eventState 事件类型
-(void)VideoEventCallBackChannel:(int)channel withEventState:(int)eventState;
注:eventState 对应状态与直播相同
7.3.控制当前回放的暂停及播放
/// 控制回放暂停/播放
/// @param nLocalChannel 本地通道号
/// @param isPause 是否暂停
-(void)playBackPauseChannel:(int)nLocalChannel withPause:(BOOL)isPause;
7.4.设置回放播放速度
/// 设置回放速度
/// @param nLocalChannel 本地通道号
/// @param speed 速度 取值(-3~0~3)播放速度为:2^speed
-(void)playBackSetSpeedChannel:(int)nLocalChannel withSpeed:(int)speed;
7.5.回放根据具体时间跳转
/// 根据时间进行跳转
/// @param nLocalChannel 本地通道号
/// @param time 跳转的时间点
-(void)playBackStepChannel:(int)nLocalChannel withTime:(NSString *)time;
8、对讲流程
8.1.开启对讲
/// 开始对讲
/// @param nLocalChannel 本地通道号
/// @param channelInfo 对讲信息
/// @return chatid 对讲id
- (int)startTalk:(NSString *)channelInfo nLocalChannel:(int)nLocalChannel;
注:nLocalChannel:
NVR 设备对讲:传 -1
IPC 设备对讲:传 0
NVR 通道对讲:从0开始
8.2.结束对讲
/// 结束对讲
/// @param chat_id 本地通道号
- (void)stopTalk:(int)chat_id;
8.3.对讲状态回调
/// 对讲状态回调
/// @param channel 本地通道号
/// @param chatState 对讲状态回调
-(void)ChatEventCallBackChannel:(int)channel withEventState:(int)chatState;
chatState 对应状态说明: 注:int类型,从0开始
枚举值 | 说明 |
---|---|
Chat_NONE | 无状态 |
Chat_START_OK | 开始对讲成功 |
Chat_START_FAILED | 开始对讲失败 |
Chat_BROKEN | 对讲中断 |
Chat_OVER | 对讲结束 |
Chat_MAX | 拓展字段暂时没有使用 |
9、抓拍
/// 抓拍
/// @param nLocalChannel 本地通道号
/// @param path 本地路径(全路径).bmp
/// @param imageType 图片类型 0 bmp 1 jpg 2 PNG 其他类型不支持
-(void)playSnapshotChannel:(int)nLocalChannel withWritePath:(NSString *)path imageType:(int)imageType;
10、本地录像
10.1.开启录像
/// 本地录像开始、结束
/// @param nLocalChannel 本地通道号
/// @param path 本地路径(全路径)/Document/
/// @param name_prefix 录像名称 例如:creat_time
/// @param isOpen Yes开启、No关闭
-(void)playRecordChannel:(int)nLocalChannel withWritePath:(NSString *)path withNamePrefix:(NSString *)name_prefix withIsOpen:(BOOL)isOpen;
10.2.本地录像回调
/// 本地录像回调
/// @param channel 本地通道号
/// @param recordState 录像状态
/// @param recordInfo 录像信息
-(void)RecordVideoEventCallBackChannel:(int)channel withEventState:(int)recordState recordInfo:(NSDictionary *)recordInfo;
recordState 对应状态说明:
注:int类型,从0开始
枚举值 | 说明 |
---|---|
Video_HRS_NONE | 无状态 |
Video_HRS_START_RECORD | 开始录像 |
Video_HRS_CREATE_PACKAGE_OK | 创建录像文件成功,收到json数据,详见:player_record |
Video_HRS_CREATE_PACKAGE_FAILED | 创建录像文件失败 |
Video_HRS_CLOSE_PACKAGE_OK | 关闭录像文件成功,收到json数据,详见:player_record |
Video_HRS_CLOSE_PACKAGE_FAILED | 关闭录像文件失败 |
Video_HRS_WRITE_FAILED | 写入失败 |
Video_HRS_STORE_THE_WARNING | 存储空间不足 |
Video_HRS_STOP_RECORD | 关闭录像 |
Video_HRS_MAX | 拓展字段暂时没有使用 |
10.3.本地录像跳转
/// 本地录像跳转
/// @param nLocalChannel 本地通道号
/// @param time 时间点(毫秒)
-(void)localPlayBackStepChannel:(int)nLocalChannel withTime:(int)time;
11、切换码流
先把码流的连接断开,然后重新创建新码流连接即可。(换码流连接)
12、开启/关闭声音(监听)
/// 是否开启监听
/// @param nLocalChannel 本地通道号
/// @param isOpen 状态 开启 YES 关闭 NO
-(void)playerControlSoundChannel:(int)nLocalChannel withSound:(BOOL)isOpen;
13、重置播放库
/// 进入前台重置播放库
-(void)resetPlayerForEnterForgroud;
14、设备本地录像远程下载
14.1.下载分为两个方式:按时间段下载和按文件下载。
/// 按时间段下载
/// @param p2pInfo 流信息
/// @param remoteChannel 远程通道号(p2p能用到)
/// @param stream 码流(p2p能用到)
/// @param beginTime 开始时间 格式的时间,如:2020-06-27T17:18:00+08:00
/// @param endTime 结束时间 格式的时间,如:2020-06-27T17:18:00+08:00
/// @param fileFormat 文件类型 (目前仅支持 0 mp4)
/// @param savePath 保存路径
/// @param saveFileNamePrefix 录像名为:saveFileNamePrefix_开始时间_结束时间.mp4
/// @return playerid 流id 暂停,继续,停止需要用到此id。
-(int)playerDownloadForTimeStart:(NSString *)p2pInfo withRemoteChannel:(int)remoteChannel withStream:(int)stream withBeginTime:(NSString *)beginTime withEndTime:(NSString *)endTime withFileFormat:(int)fileFormat withSavePath:(NSString *)savePath withSaveFileNamePrefix:(NSString *)saveFileNamePrefix;
/// 按文件下载
/// @param p2pInfo 流信息
/// @param fileName 按文件下载时需传入文件名
/// @param beginTime 开始时间 格式的时间,如:2020-06-27T17:18:00+08:00
/// @param endTime 结束时间 格式的时间,如:2020-06-27T17:18:00+08:00
/// @param fileFormat 文件类型 (目前仅支持 0 mp4)
/// @param savePath 保存路径
/// @param saveFileNamePrefix 录像名为:saveFileNamePrefix_开始时间_结束时间.mp4
/// @return playerid 流id 暂停,继续,停止需要用到此id。
-(int)playerDownloadForFileStart:(NSString *)p2pInfo withFileName:(NSString *)fileName withBeginTime:(NSString *)beginTime withEndTime:(NSString *)endTime withFileFormat:(int)fileFormat withSavePath:(NSString *)savePath withSaveFileNamePrefix:(NSString *)saveFileNamePrefix;
14.2.暂停下载
/// 暂停下载
/// @param playerId 流id
-(void)playerDownloadPause:(int)playerId;
14.3.继续下载
/// 继续下载
/// @param playerId 流id
-(void)playerDownloadResume:(int)playerId;
14.4.停止下载
/// 停止下载
/// @param playerId 流id
-(void)playerDownloadStop:(int)playerId;
15、摄像机配置网络
配置网络有两种方式:二维码配网和声波配网
/// 二维码配置网络
/// @param wifiName wifi名称
/// @param wifiPwd wifi密码
/// @return 二维码图片
-(UIImage*)JVSCreateQR:(NSString*)wifiName wifiPwd:(NSString*)wifiPwd;
/// 二维码配置网络
/// @param wifiName wifi名称
/// @param wifiPwd wifi密码
/// @return 二维码信息字符串
-(NSString *)JVSCreateQRStr:(NSString*)wifiName wifiPwd:(NSString*)wifiPwd;
/// 声波配置网络
/// @param wifiName wifi名称
/// @param wifiPwd wifi密码
/// @param count 发送次数
- (void)JVSSendSoundWave:(NSString *)wifiName wifiPwd:(NSString *)wifiPwd count:(int)count;
/// 停止声波配置网络
- (void)JVSStopSendSoundWave;
16、其他
16.1 ACC文件录音及播放
录制ACC文件
///开始采集声音到文件(AAC编码格式ADTS文件格式),仅支持手机端,不能与语音对讲功能同时使用 /// @param channels 通道数,目前仅支持1通道 /// @param sample_rate 采样率,支持8000、16000 /// @param sample_bits 采样位宽,支持8、16 /// @param fullname aac文件路径 - (void)playerStartCollectSoundToAACFile:(int)channels sample_rate:(int)sample_rate sample_bits:(int)sample_bits fullname:(NSString *)fullname; ///停止采集声音,结束文件写入 - (void)playerStopCollectSound;
播放ACC文件
/// 播放aac格式的声音文件(AAC编码格式ADTS文件格式),仅支持手机端,不能与语音对讲功能同时使用 /// @param channels 通道数,目前仅支持1通道 /// @param sample_rate 采样率,支持8000、16000 /// @param sample_bits 采样位宽,支持8、16 /// @param fullname aac文件路径 - (void)playerPlayAACFile:(int)channels sample_rate:(int)sample_rate sample_bits:(int)sample_bits fullname:(NSString *)fullname; ///停止播放aac声音文件 - (void)playerStopPlayAACFile;
16.2 图片解密
/// 图片解密(返回图片数据)
///@param pJav 需要解密的图片
///@param n_size n_size
///@param dec_key key
///@param dec_iv iv
///@param buf 解密后的图片数据
- (int)JVSDecDataImage:(unsigned char*)pJav n_size:(int)n_size dec_key:(NSString *)dec_key dec_iv:(NSString *)dec_iv buf:(unsigned char*)buf;