文档反馈
文档反馈

采集

本章节主要介绍音视频数据采集相关的功能。默认是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];

开始自定义视频采集

开始自定义采集,可以在SDK和自定义采集中切换

@protocol NIMNetCallManager <NSObject>

/**
 *  开始自定义采集。
 *
 *  @param param  自定义视频参数
 *
 *  @return 开始是否成功
 */
- (BOOL)startCustomVideo:(NIMNetCallCustomVideoParam *)param;

@end
参数 类型 说明
videoFrameRate NSUInteger 编码帧率
provideVideoProcess BOOL 提供对自定义输入视频的前处理功能
NIMNetCallCustomVideoParam  *customParam = [NIMNetCallCustomVideoParam alloc] init];
customParam.videoFrameRate = 15;

[[NIMAVChatSDK sharedSDK].netCallManager startCustomVideo:customParam];

停止视频采集

关闭摄像头,停止采集

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

视频采集参数

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

参数 类型 说明
preferredVideoQuality NIMNetCallVideoQuality 期望的发送视频质量, SDK 可能会根据具体机型运算性能和协商结果调整为更合适的清晰度,导致该设置无效(该情况通常发生在通话一方有低性能机器时)
previewVideoQuality NIMNetCallVideoQuality 预览视频质量, 默认 480P SDK内部最低480P等级预览 ,设置该参数将进入预览分辨率与发送分辨率分开设置的模式,此模式表示将通过各自独立的接口来设置分辨率,请见切换预览视频质量方法介绍。
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 视频前处理参数,如需开启前处理请指定该参数,不指定将不开启前处理
captureScreen BOOL 是否开启桌面采集
screenCropRect CGRect 桌面采集范围

切换预览视频质量

可以在视频通话过程中实时切换预览视频质量,第一次切换后将进入预览分辨率与发送分辨率分开设置的模式。 发送分辨率的切换请见switchVideoQuality方法。

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

切换视频质量

可以在视频通话过程中实时切换视频质量,在预览分辨率与发送分辨率分开设置模式中,该方法表示切换发送的视频质量,否则两者一起切换。

@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];

macOS设置桌面采集录屏区域

macOS 设置桌面采集录屏区域, 需要保证桌面采集开关开启。

@protocol NIMNetCallManager <NSObject>

/**
 *  macOS设置桌面采集录屏区域
 *
 *  @param cropRect 采集范围
 */
- (void)setScreenCaptureCropRect:(CGRect)cropRect API_UNAVAILABLE(ios);

@end
参数 类型 说明
cropRect CGRect 桌面采集范围,左下角为(0,0)
[[NIMAVChatSDK sharedSDK].netCallManager setScreenCaptureCropRect:CGRectMake(100,100,100,100)];

macOS鼠标设置桌面采集录屏区域

macOS 鼠标设置桌面采集录屏区域, 需要保证桌面采集开关开启。

@protocol NIMNetCallManager <NSObject>

/**
 *  macOS 鼠标选择桌面采集录屏区域
 *
 *  @discussion 调用该接口之后,即可以在屏幕上选择录屏区域
 */
- (void)setDisplayAndCropRect API_UNAVAILABLE(ios);

@end
参数 类型 说明
cropRect CGRect 桌面采集范围,左下角为(0,0)
[[NIMAVChatSDK sharedSDK].netCallManager setDisplayAndCropRect];

摄像头切换完成回调

摄像头切换完成回调

@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 其他操作...
}

自定义数据输入

该模式将不使用SDK采集,需要自己输入视频数据,通过调用发送接口把视频数据传入SDK进行发送。在发起通话的时候需要指定option 中的 customVideoParam 参数。

参数 类型 说明
videoFrameRate NSUInteger 编码帧率
provideVideoProcess BOOL 提供对自定义输入视频的前处理功能
//开始通话(示例使用点对点模式,使用多人会议模式同理)
- (void)startP2PCall
{
    //初始化option参数
    NIMNetCallOption *option = [[NIMNetCallOption alloc] init];
    option.extendMessage = @"音视频请求扩展信息";
    option.apnsContent = @"通话请求";
    option.apnsSound = @"video_chat_tip_receiver.aac";

    //初始化自定义输入参数
    NIMNetCallCustomVideoParam *customParam = [[NIMNetCallCustomVideoParam alloc]init];
    //打开前处理
    customParam.provideVideoProcess = YES;
    option.customVideoParam = customParam;

    //开始呼叫
    [[NIMAVChatSDK sharedSDK].netCallManager start:callees type:NIMNetCallMediaTypeVideo option:option completion:^(NSError * _Nullable error, UInt64 callID) {
        if (!error) {
            //通话发起成功

        }else{
            //通话发起失败
        }

    }];
}

//自定义采集输出
- (void)didOutputVideoSampleBuffer:(CMSampleBufferRef)sampleBuffer
{
    //自定义模式下 没有开启前处理需要自己显示画面
    if (!self.customParam.provideVideoProcess) {
            //视频画面显示 
            CFRetain(sampleBuffer);
            dispatch_async(dispatch_get_main_queue(), ^{
                if (_bufferDisplayer.status == AVQueuedSampleBufferRenderingStatusFailed) {
                    [_bufferDisplayer flush];
                }

                if ([_bufferDisplayer isReadyForMoreMediaData]) {
                    [_bufferDisplayer enqueueSampleBuffer:sampleBuffer];
                }

                CFRelease(sampleBuffer);
            });
    }

    //发送自定义视频数据
    [[NIMAVChatSDK sharedSDK].netCallManager sendVideoSampleBuffer:sampleBuffer];
}

1.需要指定 meetingoptioncustomVideoParam 参数。并且该参数不能与 videoCaptureParam 同时设置。

2.发送的视频数据最大不能超过720P。

×

反馈成功

非常感谢您的反馈,我们会继续努力做得更好。