写点什么

音视频通话前的网络及设备检测该如何操作?

作者:ZEGO即构
  • 2022 年 7 月 08 日
  • 本文字数:2481 字

    阅读完需:约 8 分钟

音视频通话前的网络及设备检测该如何操作?

前言:

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

  • 网络检测:检测网络环境,可用于判断或预测网络环境是否适合推/拉指定码率的流。 

  • 设备检测:检测本地麦克风、摄像头以及扬声器是否能正常工作。

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

一、网络检测

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

二、设备检测

2.1 麦克风检测

2.1.1 检测逻辑

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


 2.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. 检测麦克风收音数据”),且麦克风收音数据检测正常,则麦克风设备可用。


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


4. 检测麦克风收音数据


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


engine.startSoundLevelMonitor();
复制代码

2.2 摄像头检测

2.2.1 检测逻辑


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



2.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. 检测画面是否正常”),且画面显示正常,则设备可用。


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


4. 检测画面是否正常


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

2.3 扬声器检测

2.3.1 检测逻辑

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



2.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){}
复制代码

三、API 参考列表

四、常见错误码


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

发布于: 刚刚阅读数: 3
用户头像

ZEGO即构

关注

专注音视频领域19年 2020.04.15 加入

全球领先的音视频云服务商,已为映客、酷狗、喜马拉雅、荔枝、好未来、作业帮、掌门一对一、Live.Me、UpLive、Mico、平安科技等众多行业头部企业提供音视频云服务。

评论

发布
暂无评论
音视频通话前的网络及设备检测该如何操作?_音视频开发_ZEGO即构_InfoQ写作社区