实时音视频
  • iOS : Objective-C
  • Android
  • macOS
  • Windows
  • HarmonyOS
  • Linux
  • Web
  • 小程序
  • Flutter
  • Electron
  • Unity3D
  • uni-app
  • React Native
  • Cocos Creator
  • 产品简介
  • 下载
  • 体验 App
  • 快速开始
    • 跑通示例源码
    • 集成 SDK
    • 实现视频通话
    • 实时音视频 SDK 与实时语音 SDK 差异
    • 场景化音视频配置
  • 基础功能
  • 进阶功能
  • 最佳实践
  • 常见错误码
  • 服务端 API
  • 客户端 API
  • 常见问题

通话前检测

更新时间:2022-10-27 18:29

1 功能简介

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

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

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

2 前提条件

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

3 网络检测

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

4 设备检测

4.1 麦克风检测

4.1.1 检测逻辑

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

4.1.2 对应接口

1. 启动麦克风

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

[[ZegoExpressEngine sharedEngine] startPreview:nil];

2. 检测麦克风权限

ZEGO SDK 会自动检查麦克风权限。如果用户未授权,则会请求用户同意;如果用户拒绝,则需要用户手动去系统设置里开启权限。

3. 检测麦克风是否可用

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

  • 2.15.0 之前版本:监听 onDeviceError 回调检测设备是否异常。
/// 设备异常通知
/// @param errorCode 错误码,请参考常见错误码文档 
/// @param deviceName 设备类型名称
- (void)onDeviceError:(int)errorCode deviceName:(NSString *)deviceName;
/// 本地设备异常通知
///
/// 支持版本:2.15.0 及以上。
/// 详情描述:本地设备异常。
/// 通知时机:当本地音频或视频设备功能出现异常时会触发此回调。
///
/// @param exceptionType 设备异常类型。
/// @param deviceType 发生异常的设备类型。
/// @param deviceID 设备 ID。目前仅支持桌面端设备,用于标识具体的设备;对于移动端设备,此参数将返回空字符串。
- (void)onLocalDeviceExceptionOccurred:(ZegoDeviceExceptionType)exceptionType deviceType:(ZegoDeviceType)deviceType deviceID:(NSString *)deviceID;

4. 检测麦克风收音数据

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

[[ZegoExpressEngine sharedEngine] startSoundLevelMonitor];

4.2 摄像头检测

4.2.1 检测逻辑

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

4.2.2 对应接口

1. 启动摄像头

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

ZegoCanvas *previewCanvas = [ZegoCanvas canvasWithView:self.previewView];
[[ZegoExpressEngine sharedEngine] startPreview:previewCanvas];

2. 检测摄像头权限

ZEGO SDK 会自动检查摄像头权限。如果用户未授权,则会请求用户同意;如果用户拒绝,则需要用户手动去系统设置里开启权限。

3. 检测摄像头是否可用

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

  • 2.15.0 之前版本:监听 onDeviceError 回调检测设备是否异常。
/// 设备异常通知
/// @param errorCode 错误码,请参考常见错误码文档   
/// @param deviceName 设备类型名称
- (void)onDeviceError:(int)errorCode deviceName:(NSString *)deviceName;
//// 本地设备异常通知
///
/// 支持版本:2.15.0 及以上。
/// 详情描述:本地设备异常。
/// 通知时机:当本地音频或视频设备功能出现异常时会触发此回调。
///
/// @param exceptionType 设备异常类型。
/// @param deviceType 发生异常的设备类型。
/// @param deviceID 设备 ID。目前仅支持桌面端设备,用于标识具体的设备;对于移动端设备,此参数将返回空字符串。
- (void)onLocalDeviceExceptionOccurred:(ZegoDeviceExceptionType)exceptionType deviceType:(ZegoDeviceType)deviceType deviceID:(NSString *)deviceID;

4. 检测画面是否正常

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

4.3 扬声器检测

4.3.1 检测逻辑

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

4.3.2 对应接口

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

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

/// 1. 创建媒体播放器
ZegoMediaPlayer *mediaPlayer = [[ZegoExpressEngine sharedEngine] createMediaPlayer];
/// 2. 加载媒体资源
NSString *resourcePath = "xxx";
[mediaPlayer loadResource: resourcePath callback:^(int errorCode) {
    NSLog(@"Media Player load resource. errorCode: %d", errorCode);
}];
/// 3. 开始播放媒体
[mediaPlayer start];

2. 检测是否听到声音

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

/// 播放器播放状态回调
/// @param mediaPlayer 回调的播放器实例
/// @param state 播放器状态
/// @param errorCode 错误码,详情请参考常用错误码文档
- (void)mediaPlayer:(ZegoMediaPlayer *)mediaPlayer stateUpdate:(ZegoMediaPlayerState)state errorCode:(int)errorCode;

5 API 参考列表

方法 描述
startPreview 启动本地预览
onLocalDeviceExceptionOccurred 本地设备异常通知
startSoundLevelMonitor 启动声浪监控
mediaPlayer:stateUpdate:errorCode: 播放器播放状态回调

6 常见错误码

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