# 设备管理
Juphoon RTC SDK 支持设备设置摄像头相关参数与配置,并在提供进入房间前的视频设备测试方法。
# 1. 音频设备管理
在音频场景中,您可能需要根据实际的场地情况选择音频的采集设备和播放设备。
# 音频参数设置
设置 JRTCMediaDeviceAudioParam (opens new window) 音频参数,在加入通话前设置生效,若不设置参数,使用SDK默认值。
参数 | 描述 |
---|---|
audioInputSamplingRate (opens new window) | 音频输入采样率 |
audioOutputSamplingRate (opens new window) | 音频输出采样率 |
audioInputChannelNumber (opens new window) | 音频输入通道数量 |
audioOutputChannelNumber (opens new window) | 音频输出通道数量 |
# 扬声器的开启关闭
/**
* 开启/关闭扬声器
*
* 只有在音频已经启动的情况下调用才会生效
*
* @param enable 开启或关闭扬声器
* - true: 开启
* - false: 关闭
*/
- (void)enableSpeaker:(bool)enable;
示例代码:
// 关闭扬声器(听筒模式)
[_mediaDevice enableSpeaker:false];
// 打开扬声器
[_mediaDevice enableSpeaker:true];
# 获取麦克风音量级别
打开音频采集后就可以调用 getMicLevel (opens new window) 接口获取当前麦克风的采集音量级别,与通话状态无关。
/**
* 获取当前麦克风音量级别,录制音量级别范围为 0 到 100
*
* 目前只在开始麦克风检测,或者当会议上有音频时,才能获取到有效的录制音量级别。
* @return 麦克风音量级别
*/
- (int)getMicLevel;
示例代码:
int micLevel = [_mediaDevice getMicLevel];
# 获取扬声器音量级别
打开音频输出后就可以调用 getSpkLevel (opens new window) 接口获取当钱的扬声器的音量级别,与通话状态无关。
/**
* 获取当前扬声器音量级别,播放音量级别范围为 0 到 100
*
* 目前只在开始扬声器检测,或者当会议上有人讲话时,才能获取到有效的录制音量级别。
* @return 扬声器音量级别
*/
- (int)getSpkLevel;
示例代码:
int spkLevel = [_mediaDevice getSpkLevel];
# 获取当前噪声强度
/**
* 获取当前噪声强度
* 环境平均噪声强度(1s), 检测需要打开麦克风 {@link JRTCMediaDevice.startAudio startAudio} 或者 {@link JRTCMediaDevice.startAudioInput startAudioInput}
* @return 噪声强度
* - -1:获取失败
* - 0-50dB:噪声非常微弱
* - 50-60dB:噪声较弱
* - 60-70dB:噪声较强
* - 70dB以上:噪声非常强
*/
- (int)getAnrNoiseLevel;
# 获取当前信噪比强度
/**
* 获取当前信噪比强度
* 环境平均信噪比强度(1s), 检测需要打开麦克风 {@link JRTCMediaDevice.startAudio startAudio} 或者 {@link JRTCMediaDevice.startAudioInput startAudioInput}
* @return 噪声强度
* - -1:获取失败
* - 0-20dB:噪声明显,语音含糊,较难听清
* - 20-40dB:语音基本能听清,但有一定的噪声
* - 40dB以上:语音非常清晰
*/
- (int)getAnrNoiseRatio;
# 2. 视频设备管理
在视频场景中,您可能需要根据实际的情况选择视频的采集设备,以及相关的采集参数。
# 获取摄像头列表
/**
* 摄像头列表
*/
@property (nonatomic, readonly, nonnull) NSArray<JRTCMediaDeviceCamera*> *cameras;
示例代码:
// 获取所有可用的摄像头列表
NSArray<JRTCMediaDeviceCamera*> *cameras = _mediaDevice.cameras;
# 指定摄像头/指定摄像头采集角度
/**
* 指定要开启的摄像头,在 {@link startCamera} 之前调用
* @param camera 摄像头对象
*/
- (void)specifyCamera:(JRTCMediaDeviceCamera* __nonnull)camera;
/**
* 指定摄像头采集角度,为90的倍数
* @param angle 角度
*/
- (void)specifyCameraAngle:(int)angle;
示例代码:
// 指定要开启的摄像头
[_mediaDevice specifyCamera:_mediaDevice.cameras[0]];
// 指定摄像头采集角度
[_mediaDevice specifyCameraAngle:180];
# 摄像头采集属性
/**
* 设置摄像头采集属性
*
* 在调用开始自身视频渲染前设置即可生效
*
* @param width 采集宽度,默认为 640
* @param height 采集高度,默认为 360
* @param framerate 采集帧速率,默认为 30
*/
- (void)setCameraProperty:(int)width height:(int)height framerate:(int)framerate;
示例代码:
// 设置采集宽1080 高 720 帧率24
[_mediaDevice setCameraProperty:1080 height:720 framerate:24];
# 开启/关闭摄像头
注:直接开启本地视频预览 startCameraVideo (opens new window) ,SDK 内部会默认打开本地摄像头,不需要单独调用该接口。
/**
* 开启摄像头
*
* @note 调用此方法时需要保证默认摄像头不为空,即 @ref defaultCamera 不为空,否则将直接返回 false
*
* @return 接口调用结果
* - true: 接口调用成功
* - 若调用此方法前摄像头已打开,不会收到回调通知
* - 若调用此方法前摄像头未打开,会收到 {@link JRTCMediaDeviceCallback.onCameraUpdate onCameraUpdate} 回调
* - false: 接口调用异常
*/
- (bool)startCamera;
/**
* 关闭摄像头
*
* @return 接口调用结果
* - true: 接口调用成功
* - 调用此方法前摄像头未打开,不会收到回调通知
* - 调用此方法前摄像头已打开,会收到 {@link JRTCMediaDeviceCallback.onCameraUpdate onCameraUpdate} 回调
* - false: 接口调用异常
*/
- (bool)stopCamera;
示例代码:
// 打开摄像头
[_mediaDevice startCamera];
// 关闭摄像头
[_mediaDevice stopCamera];
# 切换摄像头
/**
* 切换摄像头
*
* 内部会根据当前摄像头类型来进行切换
*
* - 调用此方法时要保证摄像头已打开,否则将直接返回 false
* - 设备拥有两个以上摄像头,否则将直接返回 true
* - 满足以上两个条件后,内部会调用 {@link switchCamera: } 接口并提供返回值
*
* @return 接口调用结果
* - true: 接口调用成功
* - false: 接口调用异常
*/
- (bool)switchCamera;
/**
* 切换到指定摄像头
*
* 调用此方法时需要保证摄像头已打开并且摄像头数大于0,否则将直接返回 false
*
* @param camera 摄像头对象
* @return 接口调用结果
* - true: 接口调用成功
* - 摄像头个数 == 1,不会收到回调
* - 摄像头个数 > 1,会收到 {@link JRTCMediaDeviceCallback.onCameraUpdate onCameraUpdate} 回调
* - false: 接口调用异常,不会收到回调
*/
- (bool)switchCamera:(JRTCMediaDeviceCamera* __nonnull)camera;
示例代码:
// 切换摄像头
[_mediaDevice switchCamera];
// 切换至指定摄像头
[_mediaDevice switchCamera:_mediaDevice.cameras[0]];