畅直播
  • iOS
  • Android : Java
  • macOS
  • Windows
  • Web
  • Flutter
  • 产品简介
    • 概述
    • 发布日志
    • 基本概念
    • 产品优势
    • 应用场景
    • 限制说明
    • 升级指南
  • 计费说明
  • 下载
  • 快速开始
  • 直播推流
  • 直播拉流
  • 通信能力
  • 房间能力
  • 音频能力
  • 视频能力
  • 直播能力
  • 其他能力
  • 最佳实践
  • 客户端 API
  • 服务端 API
  • 常用错误码
  • 常见问题
  • 文档中心
  • 畅直播
  • 通信能力
  • 设备检测

设备检测

更新时间:2024-01-02 18:48

1 功能简介

为了保证实时通信体验,通话或直播前可以进行设备检测,提前识别并排查问题。设备检测主要是检测本地麦克风、摄像头以及扬声器是否能正常工作。

2 前提条件

在实现设备检测功能之前,请确保:

3 设备检测

3.1 麦克风检测

3.1.1 检测逻辑

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

3.1.2 对应接口

1. 启动麦克风

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

engine.startPreview();

2. 检测麦克风权限

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);
    }
}

3. 检测麦克风是否可用

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

监听 onLocalDeviceExceptionOccurred 回调检测设备是否异常。

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

}

4. 检测麦克风收音数据

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

engine.startSoundLevelMonitor();

3.2 摄像头检测

3.2.1 检测逻辑

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

3.2.2 对应接口

1. 启动摄像头

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

engine.startPreview();

2. 检测摄像头权限

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);
    }
}

3. 检测摄像头是否可用

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

监听 onLocalDeviceExceptionOccurred 回调检测设备是否异常。

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

}

4. 检测画面是否正常

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

3.3 扬声器检测

3.3.1 检测逻辑

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

3.3.2 对应接口

1. 使用媒体播放器播放音频文件

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

// 1. 创建播放器对象
ZegoMediaPlayer mediaPlayer = engine.createMediaPlayer();
// 2. 加载资源
String resourcePath = "xxx";
mediaPlayer.loadResource(resourcePath, null);
// 3. 播放资源
mediaPlayer.start();

2. 检测是否听到声音

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

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

4 API 参考列表

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

5 常见错误码

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

本篇目录