# 设备管理
Juphoon RTC SDK 支持设备设置摄像头相关参数与配置,并在提供进入会议前的视频设备测试方法。
# 1. 音频设备管理
在音频场景中,您可能需要根据实际的场地情况选择音频的采集设备和播放设备。
# 音频输入设备
调用 getAudioInputs (opens new window) 和 getOpenedAudioInputs (opens new window) 来分别获取所有音频输入设备列表和使用中的音频输入设备列表。
/**
* 获取所有音频输入设备列表
*
* @return 音频输入设备列表
*/
public abstract List<JRTCMediaDeviceAudio> getAudioInputs();
/**
* 获取使用中的音频输入设备列表
*
* @return 使用中的音频输入设备列表
*/
public abstract List<JRTCMediaDeviceAudio> getOpenedAudioInputs();
# 默认音频输入设备
在加入房间前,您可以通过设置 setDefaultAudioInput (opens new window) 来设置当前需要使用的音频输入的设备,不设置则随机使用一个有效的音频输入设备。
/**
* 设置默认音频输入设备,可以在业务进行前设置
*/
public abstract void setDefaultAudioInput(JRTCMediaDeviceAudio audioInput);
# 音频输入设备变化回调
您可以通过实现 onAudioInputDeviceChanged (opens new window) 接口,可监听当前音频输入设备切换的回调。
/**
* 当前音频输入设备切换回调
*
* @param audioInput 音频输入设备
*/
void onAudioInputDeviceChanged(JRTCMediaDeviceAudio audioInput);
# 音频输入音量变化通知
音频输入音量的监听,您可以通过实现 onAudioInputVolumeChanged (opens new window) 接口监听。
/**
* 音频输入音量变化通知
*
* @param volume 音量值 0 - 100
* @param volumeStatus 音量状态
* - {@link JRTCEnum#VOLUME_STATUS_NONE VOLUME_STATUS_NONE} : 无声音
* - {@link JRTCEnum#VOLUME_STATUS_VERY_LOW VOLUME_STATUS_VERY_LOW} : 很低
* - {@link JRTCEnum#VOLUME_STATUS_LOW VOLUME_STATUS_LOW} : 低
* - {@link JRTCEnum#VOLUME_STATUS_MID VOLUME_STATUS_MID} : 中
* - {@link JRTCEnum#VOLUME_STATUS_HIGH VOLUME_STATUS_HIGH} : 高
* - {@link JRTCEnum#VOLUME_STATUS_VERY_HIGH VOLUME_STATUS_VERY_HIGH} : 很高
*/
void onAudioInputVolumeChanged(int volume, @JRTCEnum.VolumeStatus int volumeStatus);
# 打开/关闭音频输入设备
在通话中通过调用 stopAudioInput (opens new window) 关闭当前音频输入设备,startAudioInput (opens new window) 打开指定音频输入设备,可以完成切换音频设备的操作。
/**
* 打开音频输入设备
*
* @param audioInput 音频输入设备
* @return 接口调用结果
* - true: 接口调用成功
* - false: 接口调用异常
*/
public abstract boolean startAudioInput(JRTCMediaDeviceAudio audioInput);
/**
* 关闭音频输入设备
*
* @param audioInput 音频输入设备
* @return 接口调用结果
* - true: 接口调用成功
* - false: 接口调用异常
*/
public abstract boolean stopAudioInput(JRTCMediaDeviceAudio audioInput);
/**
* 关闭当前所有打开的音频输入设备
*
* @return 接口调用结果
* - true: 接口调用成功
* - false: 接口调用异常
*/
public abstract boolean stopAllAudioInputs();
# 查看音频设备是否打开
查看音频设备是否开启,包括输入和输出音频设备
/**
* 音频设备是否打开
*/
public abstract boolean isAudioStart();
# 获取麦克风音量级别
打开音频采集后就可以实时调用 getMicLevel (opens new window) 接口获取当前的采集音量级别,与通话状态无关。
/**
* 获取当前本地音量级别,音量级别范围为0-100,用以测试设备
* 目前只在开始麦克风检测,或者当房间内有输入音频时,才能获取到有效的音量级别
*
* @return 麦克风音量级别,返回-1获取失败
*/
public abstract int getMicLevel();
示例代码:
//获取本地音量采集级别
mediaDevice.getMicLevel();
# 音频输出设备
调用 getAudioOutputs (opens new window) 和 getOpenedAudioOutput (opens new window) 来分别获取所有音频输入设备列表和使用中的音频输入设备列表。
/**
* 获取所有音频输出设备列表
*
* @return 音频输出设备列表
*/
public abstract List<JRTCMediaDeviceAudio> getAudioOutputs();
/**
* 获取使用中的音频输出设备
*
* @return 使用中的音频输出设备
*/
public abstract JRTCMediaDeviceAudio getOpenedAudioOutput();
# 默认音频输出设备
在加入房间前,您可以通过设置 setDefaultAudioOutput (opens new window) 属性来设置音频输出的设备。
/**
* 设置默认音频输出设备,可以在业务进行前设置
*/
public abstract void setDefaultAudioOutput(JRTCMediaDeviceAudio audioOutput);
# 音频输出设备变化回调
您可以通过实现 onAudioOutputDeviceChanged (opens new window) 接口监听。
/**
* 当前音频输出设备切换回调
*
* @param audioOutput 音频输出设备
*/
void onAudioOutputDeviceChanged(JRTCMediaDeviceAudio audioOutput);
# 打开/关闭音频输出设备
在通话中调用 stopAudioOutput (opens new window) 关闭当前音频输出设备,startAudioOutput (opens new window) 打开指定音频输出设备,可以完成切换音频输出设备的操作。
/**
* 打开音频输出设备
*
* @param audioOutput 音频输出设备
* @return 接口调用结果
* - true: 接口调用成功
* - false: 接口调用异常
*/
public abstract boolean startAudioOutput(JRTCMediaDeviceAudio audioOutput);
/**
* 关闭当前打开的音频输出设备
*
* @return 接口调用结果
* - true: 接口调用成功
* - false: 接口调用异常
*/
public abstract boolean stopAudioOutput();
# 获取扬声器音量级别
打开音频输出后就可以实时调用 getSpkLevel (opens new window) 接口获取当前的扬声器的音量级别,上层可根据数值进行展示和调整,与通话状态无关。
/**
* 获取当前扬声器音量级别,音量级别范围为0-100,用以测试设备
* 目前只在开始扬声器检测,或者当房间内有输出音频时,才能获取到有效的音量级别
*
* @return 扬声器音量级别,返回-1获取失败
*/
public abstract int getSpkLevel();
示例代码:
// 获取本地扬声器的音量级别
mediaDevice.getSpkLevel();
# 操作 loopback 采集
调用 enableLoopback (opens new window) 接口,使用设备的系统声音作为通话内音频输入。使用场景:通话一端给另一端分享本地系统音频。
/**
* 开启/关闭 loopback 音频采集
*
* @param enable 开启/关闭
* @return 接口调用结果
* - true: 接口调用成功
* - false: 接口调用异常
*/
public abstract boolean enableLoopback(boolean enable)
# 检测音频设备是否正常
调用 startAudioTest (opens new window) 和 stopAudioTest (opens new window) 对音频设备进行开始检测和停止检测。
/**
* 检测音频设备是否正常
*
* @param type 音频设备类型
* @param fileName 测试扬声器时播放的文件路径,测试麦克风时传 null 即可
* @param audioDevice 测试的音频设备,输入设备或者输出设备
* @return 方法调用是否成功
* @see DeviceTestType
* @see DeviceTestType
*/
public abstract boolean startAudioTest(@DeviceTestType int type, String fileName, JRTCMediaDeviceAudio audioDevice);
/**
* 停止检测音频设备
* 注意:开启某项音频设备检测完成后,需停止对应的测试,避免影响后续的音频设备的使用
*
* @param type 音频设备类型
* @return 方法是否调用成功
* @see DeviceTestType
*/
public abstract boolean stopAudioTest(@DeviceTestType int type);
# 开启或关闭本地麦克风的增益(软件增益)
enableMicAgc (opens new window)开启或关闭本地麦克风的增益(软件增益),默认开启。
if (room.enableMicAgc(!micAgc)) {
micAgc = !micAgc;
String txt = micAgc ? "关闭麦克风增益" : "开启麦克风增益";
// ......
} else {
JOptionPane.showMessageDialog(null, mMicAgc ? "关闭失败" : "开启失败", null, JOptionPane.ERROR_MESSAGE);
}
# 本地文件音频源输入完成回调
本地文件音频源输入完成回调onFileAudioInputDidFinish (opens new window)
@Override
public void onFileAudioInputDidFinish() {
}
# 2. 视频设备管理
在视频场景中,您可能需要根据实际的情况选择视频的采集设备,以及相关的采集参数。
# 获取摄像头列表
/**
* 获取摄像头列表
*
* @return 摄像头列表
*/
public abstract List<JRTCMediaDeviceCamera> getCameras();
示例代码:
// 获取所有可用的摄像头列表
List<JRTCMediaDeviceCamera> cameras = mediaDevice.getCameras();
# 获取当前已经开启摄像头列表
/**
* 获取当前打开的摄像头列表
*
* @return 当前打开的摄像头列表
*/
public abstract List<JRTCMediaDeviceCamera> getOpenedCameras();
# 摄像头采集属性
开启本地视频渲染之前,设置摄像头的采集参数。
/**
* 设定摄像头分辨率
* <p>
* 在调用 {@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 内部会默认打开本地摄像头,不需要单独调用该接口。
/**
* 开启指定摄像头
*
* @return 接口调用结果
* - true: 接口调用成功
* - 若调用此方法前摄像头已打开,不会收到回调通知
* - 若调用此方法前摄像头未打开,会收到 {@link JRTCMediaDeviceCallback#onCameraUpdate onCameraUpdate} 回调
* - false: 接口调用异常
*/
public abstract boolean startCamera(JRTCMediaDeviceCamera camera);
/**
* 关闭指定摄像头
*
* @return 接口调用结果
* - true: 接口调用成功
* - 调用此方法前摄像头未打开,不会收到回调通知
* - 调用此方法前摄像头已打开,会收到 {@link JRTCMediaDeviceCallback#onCameraUpdate onCameraUpdate} 回调
* - false: 接口调用异常
*/
public abstract boolean stopCamera(JRTCMediaDeviceCamera camera);
/**
* 关闭当前打开的所有摄像头
*
* @return 调用是否成功
* - true:正常执行调用流程,存在以下两种场景:
* - 若调用此方法前摄像头已打开,会收到 {@link JRTCMediaDeviceCallback#onCameraUpdate onCameraUpdate} 回调
* - 若调用此方法前摄像头未打开,不会收到通知
* - false:调用失败
*/
public abstract boolean stopAllCameras();
示例代码:
// 打开本地摄像头
mediaDevice.startCamera();
// 关闭本地摄像头
mediaDevice.stopCamera();
# 是否有摄像头打开
/**
* 是否有摄像头打开
*/
public abstract boolean isCameraOpen();
# 切换摄像头
/**
* 切换摄像头
* <p>
* - 调用此方法时要保证摄像头已打开,否则将直接返回 false
* - 设备拥有两个以上摄像头,否则将直接返回 false
*
* @return 接口调用结果
* - true: 接口调用成功
* - false: 接口调用异常
*/
public abstract boolean switchCamera(JRTCMediaDeviceCamera oldCamera, JRTCMediaDeviceCamera newCamera);
示例代码:
//摄像头0切换到摄像头1
mediaDevice.switchCamera(mediaDevice.getCameras().get(0), mediaDevice.getCameras().get(1));
# 摄像头变化回调
通过实现 onCameraUpdate (opens new window) 接口监听摄像头变化
/**
* 摄像头变化回调
*
* 摄像头状态发生变化会收到此回调,例如打开、关闭、切换摄像头
*/
void onCameraUpdate();
# 第三方网络摄像头
# 登录
loginIPCamera (opens new window)第三方网络摄像头登录,第三方网络摄像头登录参数JRTCIPCameraLoginParam (opens new window)
JRTCIPCameraLoginParam param = new JRTCIPCameraLoginParam();
/**
* 设置网络摄像头得ip
*
* @param ip ip
*/
param.setIp(String ip);
/**
* 第三方摄像头所使用端口
*
* @param port 端口号
*/
param.setPort(int port);
/**
* 第三方摄像头登录用户名
*
* @param user 用户名
*/
param.setUser(String user);
/**
* 第三方摄像头登录密码
*
* @param password 登录密码
*/
param.setPassword(String password);
/**
* 标记摄像头厂商
*
* @param manufacturer 摄像头厂商
* - {@link #@JRTCMediaDevice.MANUFACTURER_NONE MANUFACTURER_NONE} : 未获取到厂商
* - {@link #@JRTCMediaDevice.MANUFACTURER_NORMAL MANUFACTURER_OTHER} : 普通摄像头/其他摄像头厂商
* - {@link #@JRTCMediaDevice.MANUFACTURER_HIK MANUFACTURER_HIK} : 海康摄像头厂商
*/
param.setManufacturer(@JRTCMediaDevice.ManufacturerType int manufacturer);
厂商介绍ManufacturerType (opens new window)
/**
* 未获取到厂商
*/
public static final int MANUFACTURER_NONE = 0;
/**
* 通常摄像头
*/
public static final int MANUFACTURER_NORMAL = 1;
/**
* 海康摄像头厂商
*/
public static final int MANUFACTURER_HIK = 2;
/**
* 大华摄像头厂商
*/
public static final int MANUFACTURER_DAHUA = 3;
# 登出
logoutIPCamera (opens new window)第三方网络摄像头登出,登出第三方网络摄像头得参数对象JRTCIPCameraLogoutParam (opens new window)
JRTCIPCameraLogoutParam param = new JRTCIPCameraLogoutParam();
/**
* 摄像头id
*
* @param cameraId 摄像头id
*/
param.setCameraId(String cameraId);
/**
* 标记摄像头厂商
*
* @param manufacturer 摄像头厂商
* - {@link #@JRTCMediaDevice.MANUFACTURER_NONE MANUFACTURER_NONE} : 未获取到厂商
* - {@link #@JRTCMediaDevice.MANUFACTURER_NORMAL MANUFACTURER_OTHER} : 普通摄像头/其他摄像头厂商
* - {@link #@JRTCMediaDevice.MANUFACTURER_HIK MANUFACTURER_HIK} : 海康摄像头厂商
*/
param.setManufacturer(@JRTCMediaDevice.ManufacturerType int manufacturer);
厂商介绍ManufacturerType (opens new window)
/**
* 未获取到厂商
*/
public static final int MANUFACTURER_NONE = 0;
/**
* 通常摄像头
*/
public static final int MANUFACTURER_NORMAL = 1;
/**
* 海康摄像头厂商
*/
public static final int MANUFACTURER_HIK = 2;
/**
* 大华摄像头厂商
*/
public static final int MANUFACTURER_DAHUA = 3;
# 状态变化通知
onIPCameraChange (opens new window)第三方网路摄像头状态变化通知
JRTCMediaDevice.JRTCMediaDeviceCamera camera 摄像头信息
int state 状态
- {@link JRTCMediaDevice#IP_CAMERA_CONNECTED IP_CAMERA_CONNECTED} : 1,已连接
- {@link JRTCMediaDevice#IP_CAMERA_DISCONNECTED IP_CAMERA_DISCONNECTED} : 2,已断开