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