文档中心
ExpressVideoSDK 实时音视频
文档中心
体验 App
SDK 中心
API 中心
常见问题
代码市场
进入控制台
立即注册
登录
中文站 English
  • 文档中心
  • 实时音视频
  • 通信能力
  • 通话前检测

通话前检测

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

功能简介

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

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

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

前提条件

在实现通话前网络/设备检测功能之前,请确保:

  • 已在项目中集成 ZEGO Express SDK,实现基本的实时音视频功能,详情请参考 快速开始 - 集成 和 快速开始 - 实现流程。
  • 已在 ZEGO 控制台 创建项目,并申请有效的 AppID 和 AppSign,详情请参考 控制台 - 项目信息。

网络检测

请参考 网络测速 进行操作。

设备检测

麦克风检测

检测逻辑

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

对应接口

1. 启动麦克风

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

ZegoExpressEngine.instance.startPreview();

2. 检测麦克风权限

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

需要先参考 快速开始 - 集成 中的设置权限,设置好权限。

Android 6.0 在一些比较重要的权限上要求必须申请动态权限,不能只通过 “AndroidMainfest.xml” 文件申请静态权限。因此还需要参考执行如下代码,下面的方法需要 Flutter 工程安装插件 permission_handler。

Permission.microphone.request();

3. 检测麦克风是否可用

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

  • 2.15.0 及以后版本:监听 onLocalDeviceExceptionOccurred 回调检测设备是否异常。
  • 2.15.0 之前版本:监听 onDeviceError 回调检测设备是否异常。
2.15.0 及以后版本 2.15.0 之前版本
class ZegoExpressEngine {

...

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

...

}
class ZegoExpressEngine {

...

/**
 * 音视频设备错误通知。
 * @param errorCode 错误码,请参考常见错误码:https://doc-zh.zego.im/article/5641#7。
 * @param deviceName 设备类型名称。
 */
static void Function(int errorCode, String deviceName)? onDeviceError;

}

4. 检测麦克风收音数据

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

ZegoExpressEngine.instance.startSoundLevelMonitor();

摄像头检测

仅接入实时语音 SDK 或者纯音频场景时,不需要进行摄像头检测,可忽略此章节。

检测逻辑

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

对应接口

1. 启动摄像头

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

ZegoExpressEngine.instance.startPreview();

2. 检测摄像头权限

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

需要先参考 快速开始-集成 中的设置权限,设置好权限。

因为 Android 6.0 在一些比较重要的权限上要求必须申请动态权限,不能只通过 “AndroidMainfest.xml” 文件申请静态权限。因此还需要参考执行如下代码,下面的方法需要Flutter工程安装插件permission_handler。

Permission.camera.request();

3. 检测摄像头是否可用

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

  • 2.15.0 及以后版本:监听 onLocalDeviceExceptionOccurred 回调检测设备是否异常。
  • 2.15.0 之前版本:监听 onDeviceError 回调检测设备是否异常。
2.15.0 及以后版本 2.15.0 之前版本
class ZegoExpressEngine {

...

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

...

}
class ZegoExpressEngine {

...

/**
 * 音视频设备错误通知。
 * @param errorCode 错误码,请参考常见错误码:https://doc-zh.zego.im/article/5641#7。
 * @param deviceName 设备类型名称。
 */
static void Function(int errorCode, String deviceName)? onDeviceError;

}

4. 检测画面是否正常

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

扬声器检测

检测逻辑

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

对应接口

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

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

// 1. 创建播放器对象。
var mediaPlayer = await ZegoExpressEngine.instance.createMediaPlayer();
// 2. 加载资源。
String resourcePath = "xxx";
await mediaPlayer?.loadResource(resourcePath);
// 3. 播放资源。
mediaPlayer?.start();

2. 检测是否听到声音

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

class ZegoExpressEngine {

...

/**
 * 播放器播放状态回调。
 * @param mediaPlayer 回调的播放器实例。
 * @param state 播放器状态。
 * @param errorCode 错误码,请参考常见错误码:https://doc-zh.zego.im/article/5641#7。
 */
static void Function(ZegoMediaPlayer mediaPlayer, ZegoMediaPlayerState state, int errorCode)? onMediaPlayerStateUpdate;

...

}
本篇目录
  • 免费试用
  • 提交工单
    咨询集成、功能及报价等问题
    电话咨询
    400 1006 604
    咨询客服
    微信扫码,24h在线

    联系我们

  • 文档反馈