采集

本章节主要介绍音视频数据采集相关的功能。默认是SDK接管采集,开发者也可以选择自己控制采集也就是自定义音视频数据输入。

清晰度档位支持 清晰度设置默认是480P 支持的清晰度设置包括:720P540P480P360P352*288176*144

帧率档位支持 帧率设置默认是15fps 支持的帧率设置包括:5fps10fps15fps20fps25fps

本地摄像头预览就绪回调

本地摄像头预览就绪回调,通过此接口进行本地预览显示

@protocol NIMNetCallManagerDelegate <NSObject>
/**
 *  本地摄像头预览就绪
 *
 *  @param displayView 本地摄像头预览层
 */
- (void)onLocalDisplayviewReady:(UIView *)displayView;
@end
参数 类型 说明
displayView UIView 本地摄像头预览层
- (void)onLocalDisplayviewReady:(UIView *)displayView
{
    if (self.localPreView) {
        [self.localPreView removeFromSuperview];
    }
    self.localPreView = displayView;
    displayView.frame = self.localVideoView.bounds;
    [self.localVideoView addSubview:displayView];
}

获取本地摄像头预览层

主动获取本地摄像头预览层

@protocol NIMNetCallManager <NSObject>
/**
 *  获得当前视频通话的本地预览层
 *
 *  @return 预览层
 */
- (nullable UIView *)localPreview;
@end
UIView *preview = [[NIMAVChatSDK sharedSDK].netCallManager localPreview];

开始视频采集

打开摄像头,开始采集

@protocol NIMNetCallManager <NSObject>
/**
 *  开始视频采集。用于需要在开始音视频通话之前开启视频采集的场景
 *
 *  @param param  视频采集参数
 *
 *  @return 开始是否成功
 *
 *  @discussion 视频采集开始以后无法再调用该接口进行更新设置。需要先停止采集以后才能再次开始
 */
- (BOOL)startVideoCapture:(NIMNetCallVideoCaptureParam *)param;
@end
参数 类型 说明
param NIMNetCallVideoCaptureParam 视频采集参数
//初始化采集参数
_videoParam = [[NIMNetCallVideoCaptureParam alloc]init];
//开始采集
[[NIMAVChatSDK sharedSDK].netCallManager startVideoCapture:_videoParam];

停止视频采集

关闭摄像头,停止采集

@protocol NIMNetCallManager <NSObject>
/**
 *  停止视频采集。用于在网络通话的自动停止视频采集选项 stopVideoCaptureOnLeave 未开启时主动管理采集的关闭操作
 */
- (void)stopVideoCapture;
@end
//停止采集
[[NIMAVChatSDK sharedSDK].netCallManager stopVideoCapture];

视频采集参数

在发起、接受和加入音视频时,通过 NIMNetCallVideoCaptureParam 设置采集相关的参数

参数 类型 说明
preferredVideoQuality NIMNetCallVideoQuality 期望的发送视频质量, SDK 可能会根据具体机型运算性能和协商结果调整为更合适的清晰度,导致该设置无效(该情况通常发生在通话一方有低性能机器时)
videoCrop NIMNetCallVideoCrop 视频裁剪, 可以指定为 16:9、4:3 和 1:1 裁剪,默认 16:9
format NIMNetCallVideoCaptureFormat 视频采集画面格式, 默认是 420f, 支持 yuv (420f 和 420v) 和 ARGB,如果需要 SDK 回调采集到的视频数据并且对数据格式有要求,可以设置该参数
startWithBackCamera BOOL 使用后置摄像头开始视频, 默认是 前置
startWithCameraOn BOOL 初始打开摄像头, 默认是 YES, 如果你希望在开始视频采集以后 SDK 不开始运行摄像头,然后再通过摄像头开关接口单独开启摄像头,可以把该参数指定为 NO
videoCaptureOrientation NIMVideoOrientation 视频采集方向. 该设置会改变采集到的视频画面的角度, 主要用于支持互动直播时的横屏直播: 主播以各种角度手持设备直播, 并设置为该角度的 '视频采集方向', 拉流播放器就可以以正常的角度观看直播
videoFrameRate NIMNetCallVideoFrameRate 视频发送帧率 默认是 15 FPS , 用于开发者不满足于默认视频帧率时传入更期望的帧率
videoHandler NIMNetCallVideoSampleBufferHandler 本地采集的视频数据回调,供上层实现美颜等图像处理相关功能
isSupportedManualFocusFrame BOOL 设置默认的手动对焦框
highPreviewQuality BOOL 高视频预览质量,默认为 NO, 打开后将提供高质量的本地视频预览,在较老的机器上可能会影响性能
videoProcessorParam NIMNetCallVideoProcessorParam 视频前处理参数,如需开启前处理请指定该参数,不指定将不开启前处理

切换视频质量

可以在视频通话过程中实时切换视频质量。

@protocol NIMNetCallManager <NSObject>
/**
 *  通话中切换视频质量
 *
 *  @param quality 期望的视频质量
 *
 *  @return 是否设置成功. 如果用户尚未加入, 则无法设置
 */
- (BOOL)switchVideoQuality:(NIMNetCallVideoQuality)quality;
@end
参数 类型 说明
quality NIMNetCallVideoQuality 期望的视频质量
//切换视频质量
[[NIMAVChatSDK sharedSDK].netCallManager switchVideoQuality:preferredVideoQuality];

动态设置采集方向

动态设置采集方向

@protocol NIMNetCallManager <NSObject>
 /**
 *  设置视频采集方向
 *
 *  @param orientation  需要设置的方向
 *
 *  @return 设置是否成功
 *
 *  @discussion 用于互动直播场景。只能在开始视频采集以后调用
 */
- (BOOL)setVideoCaptureOrientation:(NIMVideoOrientation)orientation;
@end
参数 类型 说明
orientation NIMVideoOrientation 需要设置的方向
//改变视频采集方向
[[NIMAVChatSDK sharedSDK].netCallManager setVideoCaptureOrientation:newOrientation];

动态设置摄像头开关

@protocol NIMNetCallManager <NSObject>
/**
 *  设置摄像头关闭
 *
 *  @param disable 是否关闭
 *
 *  @return 设置是否成功
 *
 *  @discussion 仅支持当前为视频模式时进行此设置, 切换网络通话类型将丢失该设置
 */
- (BOOL)setCameraDisable:(BOOL)disable;
@end
参数 类型 说明
disable BOOL 是否关闭
  //打开摄像头
  [[NIMAVChatSDK sharedSDK].netCallManager setCameraDisable:NO];

动态切换前后摄像头

动态切换前后摄像头

@protocol NIMNetCallManager <NSObject>
/**
 *  切换网络通话摄像头
 *
 *  @param camera 选择的摄像头
 *
 *  @discussion 切换网络通话类型将丢失该设置
 */
- (void)switchCamera:(NIMNetCallCamera)camera;
@end
参数 类型 说明
camera NIMNetCallCamera 选择的摄像头
//切换为前摄像头
[[NIMAVChatSDK sharedSDK].netCallManager switchCamera:NIMNetCallCameraFront];

动态开关闪光灯

动态开关闪光灯

@protocol NIMNetCallManager <NSObject>
/**
 设置闪光灯开关

 @param isFlashOn  是否开启闪光灯
 */
- (void)setCameraFlash:(BOOL)isFlashOn;
@end
参数 类型 说明
isFlashOn BOOL 是否开启闪光灯
//打开闪光灯
[[NIMAVChatSDK sharedSDK].netCallManager setCameraFlash:YES];

动态调节摄像头焦距

动态调节摄像头焦距

@protocol NIMNetCallManager <NSObject>
/**
 改变焦距 实际放大倍数

 @param scale 放大倍数
 */
- (void)changeLensPosition:(float)scale;
@end
参数 类型 说明
scale float 放大倍数
//放大2倍
[[NIMAVChatSDK sharedSDK].netCallManager changeLensPosition:2.0];

获取摄像头放大倍数

获取摄像头放大倍数

@protocol NIMNetCallManager <NSObject>
/**
 获取摄像头支持的最大放大倍数

 *  @return 放大倍数
 */
- (CGFloat)getMaxZoomScale;
@end
//获取摄像头支持的最大放大倍数
CGFloat maxZoomScale = [[NIMAVChatSDK sharedSDK].netCallManager getMaxZoomScale];

动态切换对焦模式

动态切换对焦模式

@protocol NIMNetCallManager <NSObject>
/**
 设置对焦模式

 @param mode  对焦模式
 */
- (void)setFocusMode:(NIMNetCallFocusMode)mode;
@end
参数 类型 说明
mode NIMNetCallFocusMode 对焦模式
//切换为自动对焦模式
[[NIMAVChatSDK sharedSDK].netCallManager setFocusMode:NIMNetCallFocusModeAuto];

设置对焦点

手动对焦,设置对焦点。

@protocol NIMNetCallManager <NSObject>
/**
 手动对焦 设置对焦点

 @param devicePoint 点
 */
- (void)changeNMCVideoPreViewManualFocusPoint:(CGPoint)devicePoint;
@end
参数 类型 说明
devicePoint CGPoint 对焦点坐标(触摸点与预览view宽高的比例)
//假设触摸点相对于预览 view 的坐标是 x = 50; y =100; 预览 view 的 size 为 self.view.frame.size
//触摸点
CGFloat x = 50;
CGFloat y = 100;

//获取对焦点坐标
CGPoint devicePoint = CGPointMake(x/self.view.frame.size.width, y/self.view.frame.size.height);
//对焦
[[NIMAVChatSDK sharedSDK].netCallManager changeNMCVideoPreViewManualFocusPoint:devicePoint];

设置曝光兴趣点

设置曝光兴趣点。

@protocol NIMNetCallManager <NSObject>
/**
 设置曝光兴趣点

 @param devicePoint 点
 */
-(void)changeNMCVideoExposurePointOfInterestPoint:(CGPoint)devicePoint;
@end
参数 类型 说明
devicePoint CGPoint 曝光兴趣点(触摸点与预览view宽高的比例)
//假设触摸点相对于预览 view 的坐标是 x = 50; y =100; 预览 view 的 size 为 self.view.frame.size
//触摸点
CGFloat x = 50;
CGFloat y = 100;

//获取对焦点坐标
CGPoint devicePoint = CGPointMake(x/self.view.frame.size.width, y/self.view.frame.size.height);
//对焦
[[NIMAVChatSDK sharedSDK].netCallManager changeNMCVideoExposurePointOfInterestPoint:devicePoint];

摄像头切换完成回调

摄像头切换完成回调

@protocol NIMNetCallManagerDelegate <NSObject>
/**
 *  摄像头方向切换完成回调
 *
 *  @param cameraType  摄像头方向
 */
-(void)onCameraTypeSwitchCompleted:(NIMNetCallCamera)cameraType;
@end
参数 类型 说明
cameraType NIMNetCallCamera 摄像头方向
- (void)onCameraTypeSwitchCompleted:(NIMNetCallCamera)cameraType
{
    //前置摄像头
    if (cameraType == NIMNetCallCameraFront){
        //刷新UI or 其他操作...
    }
    //后置摄像头
    else{
        //刷新UI or 其他操作...
    }    
}

清晰度切换完成回调

清晰度切换完成回调

@protocol NIMNetCallManagerDelegate <NSObject>
/**
 *  视频清晰度切换完成回调
 *
 *  @param videoQuality  清晰度
 */
- (void)onCameraQualitySwitchCompleted:(NIMNetCallVideoQuality)videoQuality;
@end
参数 类型 说明
videoQuality NIMNetCallVideoQuality 清晰度
- (void)onCameraQualitySwitchCompleted:(NIMNetCallVideoQuality)videoQuality
{
    // 刷新UI or 其他操作...
}

采集方向切换完成回调

采集方向切换完成回调

@protocol NIMNetCallManagerDelegate <NSObject>
/**
 *  本地视频采集方向切换完成回调
 *
 *  @param orientation  采集方向
 */
-(void)onCameraOrientationSwitchCompleted:(NIMVideoOrientation)orientation;
@end
参数 类型 说明
orientation NIMVideoOrientation 采集方向
- (void)onCameraOrientationSwitchCompleted:(NIMVideoOrientation)orientation
{
    // 刷新UI or 其他操作...
}