实时通信前的网络及设备检测,该如何操作?
2022/07/07

为了保证实时通信体验,通话前可以进行网络与设备的检测,提前识别并排查问题。

  • 网络检测:检测网络环境,可用于判断或预测网络环境是否适合推/拉指定码率的流。
  • 设备检测:检测本地麦克风、摄像头以及扬声器是否能正常工作。

本文将介绍如何使用 ZEGO SDK 接口,实现上述两个角度的检测。

网络检测

请参考 网络与性能 进行操作。

设备检测

1 麦克风检测   

1.1 检测逻辑

麦克风设备检测流程如下图所示:

1.2 对应接口

  • 启动麦克风

调用 startPreview 接口在不推流的情况下启动音频采集。

engine.startPreview();
  • 检测麦克风权限

ZEGO SDK 自动检查麦克风权限。

因为 Android 6.0 在一些比较重要的权限上要求必须申请动态权限,不能只通过 “AndroidMainfest.xml” 文件申请静态权限。因此还需要参考执行如下代码,其中 “requestPermissions” 是 “Activity” 的方法。


String[] permissionNeeded = {
    "android.permission.RECORD_AUDIO"};

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    if (ContextCompat.checkSelfPermission(this, "android.permission.RECORD_AUDIO") != PackageManager.PERMISSION_GRANTED) {
        requestPermissions(permissionNeeded, 101);
    }
}
  • 检测麦克风是否可用

通过如下回调检测设备是否异常,若未检测到任何异常反馈(可同步启动 “4. 检测麦克风收音数据”),且麦克风收音数据检测正常,则麦克风设备可用。

2.15.0 之前版本:监听 onDeviceError 回调检测设备是否异常。


/**
* 音视频设备错误通知
* @param deviceName 设备类型名称。返回值参考 {@link com.zego.zegoliveroom.constants.ZegoConstants.DeviceNameType}
* @param errorCode 错误码。返回值参考 {@link com.zego.zegoliveroom.constants.ZegoConstants.DeviceError}
*/
void onDeviceError(String deviceName, int errorCode);

2.15.0 及以上版本:监听 onLocalDeviceExceptionOccurred 回调检测设备是否异常。


/**
 * 本地设备异常通知
 * 
 * 支持版本:2.15.0 及以上。
 * 详情描述:本地设备异常。
 * 通知时机:当本地音频或视频设备功能出现异常时会触发此回调。
 * 
 * @param exceptionType 设备异常类型。
 * @param deviceType 发生异常的设备类型。
 * @param deviceID 设备 ID。目前仅支持桌面端设备,用于标识具体的设备;对于移动端设备,此参数将返回空字符串。
 */
public void onLocalDeviceExceptionOccurred(ZegoDeviceExceptionType exceptionType, ZegoDeviceType deviceType, String deviceID){

}
  • 检测麦克风收音数据

调用 startSoundLevelMonitor 接口获取麦克风采集到声音的能量值,如果数据无异常则麦克风正常,可用于通话。

engine.startSoundLevelMonitor();

2 摄像头检测 

2.1 检测逻辑

摄像头设备检测流程如下图所示:

2.2 对应接口

  • 启动摄像头

调用 startPreview 接口绑定摄像头预览画面的视图,在不推流的情况下启动视频采集并预览。

engine.startPreview();
  • 检测摄像头权限

ZEGO SDK 会自动检查摄像头权限。

因为 Android 6.0 在一些比较重要的权限上要求必须申请动态权限,不能只通过 “AndroidMainfest.xml” 文件申请静态权限。因此还需要参考执行如下代码,其中 “requestPermissions” 是 “Activity” 的方法。


String[] permissionNeeded = {
    "android.permission.CAMERA"};

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    if (ContextCompat.checkSelfPermission(this, "android.permission.CAMERA") != PackageManager.PERMISSION_GRANTED) {
        requestPermissions(permissionNeeded, 101);
    }
}
  • 检测摄像头是否可用

通过如下回调检测设备是否异常,若未检测到任何异常反馈(可同步启动“4. 检测画面是否正常”),且画面显示正常,则设备可用。

2.15.0 之前版本:监听 onDeviceError 回调检测设备是否异常。


/**
* 音视频设备错误通知
* @param deviceName 设备类型名称。返回值参考 {@link com.zego.zegoliveroom.constants.ZegoConstants.DeviceNameType}
* @param errorCode 错误码。返回值参考 {@link com.zego.zegoliveroom.constants.ZegoConstants.DeviceError}
*/
void onDeviceError(String deviceName, int errorCode);

2.15.0 及以上版本:监听 onLocalDeviceExceptionOccurred 回调检测设备是否异常。


/**
 * 本地设备异常通知
 * 
 * 支持版本:2.15.0 及以上。
 * 详情描述:本地设备异常。
 * 通知时机:当本地音频或视频设备功能出现异常时会触发此回调。
 * 
 * @param exceptionType 设备异常类型。
 * @param deviceType 发生异常的设备类型。
 * @param deviceID 设备 ID。目前仅支持桌面端设备,用于标识具体的设备;对于移动端设备,此参数将返回空字符串。
 */
public void onLocalDeviceExceptionOccurred(ZegoDeviceExceptionType exceptionType, ZegoDeviceType deviceType, String deviceID){

}
  • 检测画面是否正常

若此时画面显示正常,则摄像头正常,可用于通话。

3 扬声器检测   

3.1 检测逻辑

播放设备检测流程如下图所示:

3.2 对应接口

  • 使用媒体播放器播放音频文件

调用 ZegoMediaPlayer 接口播放您用于测试的音频文件。

// 1. 创建播放器对象
ZegoMediaPlayer mediaPlayer = engine.createMediaPlayer();
// 2. 加载资源
String resourcePath = "xxx";
mediaPlayer.loadResource(resourcePath, null);
// 3. 播放资源
mediaPlayer.start();
  • 检测是否听到声音

如果可以听到相应的音频,则播放设备正常,可用于通话。调用 onMediaPlayerStateUpdate 接口查看播放器状态回调:


/**
* 播放器播放状态回调
* @param mediaPlayer 回调的播放器实例
* @param state 播放器状态
* @param errorCode 错误码,详情请参考常见错误码文档
*/
public void onMediaPlayerStateUpdate(ZegoMediaPlayer mediaPlayer, ZegoMediaPlayerState state, int errorCode){}

API 参考列表

方法描述
startPreview启动本地预览
onDeviceError设备异常通知
startSoundLevelMonitor启动音量变化监控
onMediaPlayerStateUpdate播放器播放状态回调

常见错误码

当开发者收到 onDeviceError 设备回调不为 0 时,相关的错误码请参考 常见错误码

扫一扫,获取更多服务与支持
热门推荐
H.264 与 H.265 视频编解码器的区别,哪个更好?
2024/07/26
直播产品中的“六边形战士”来了!ZEGO 超低延迟直播,高质量带来新增长!
2024/07/23
什么是抖动?如何使用抖动缓冲区来减少抖动
2024/07/22
热门标签
AI 降噪
AI课堂
ExpressSDK
MSDN
RTI
SEI
webrtc
ZIM
互动白板
即构融资
在线KTV
在线K歌
屏幕共享
录屏采集
数智人
直播技术
范围语音
行业报告
语聊房
语音社交
超分
音视频
音视频开发
音视频技术
音频编码
关注我们
获得更多服务与支持了解价格与优惠 扫码关注我们
关注我们
获得更多服务与支持了解价格与优惠 扫码关注我们