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