为了保证实时通话体验,通话前可以进行网络与设备的检测,提前识别并解决问题。
本文将介绍如何使用 ZEGO SDK 接口,实现上述两个角度的检测。
在实现通话前网络/设备检测功能之前,请确保:
请参考 网络与性能 进行操作。
麦克风设备检测流程如下图所示:
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) {
//101 为 requestCode,可以是任何大于 0 的数字,会透传到权限请求结果回调 onRequestPermissionsResult
requestPermissions(permissionNeeded, 101);
}
}
3. 检测麦克风是否可用
通过如下回调检测设备是否异常,若未检测到任何异常反馈(可同步启动 “4. 检测麦克风收音数据”),且麦克风收音数据检测正常,则麦克风设备可用。
onDeviceError
回调检测设备是否异常。/**
* 本地设备异常通知。
*
* 支持版本:2.15.0 及以后。
* 详情描述:本地设备异常。
* 通知时机:当本地音频或视频设备功能出现异常时会触发此回调。
*
* @param exceptionType 设备异常类型。
* @param deviceType 发生异常的设备类型。
* @param deviceID 设备 ID。目前仅支持桌面端设备,用于标识具体的设备;对于移动端设备,此参数将返回空字符串。
*/
public void onLocalDeviceExceptionOccurred(ZegoDeviceExceptionType exceptionType, ZegoDeviceType deviceType, String deviceID){
}
/**
* 音视频设备错误通知。
* @param deviceName 设备类型名称。
* @param errorCode 错误码,请参考常见错误码:https://doc-zh.zego.im/article/4378#7。
*/
void onDeviceError(String deviceName, int errorCode);
4. 检测麦克风收音数据
调用 startSoundLevelMonitor 接口获取麦克风采集到声音的能量值,如果数据无异常则麦克风正常,可用于通话。
engine.startSoundLevelMonitor();
摄像头设备检测流程如下图所示:
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) {
//101 为 requestCode,可以是任何大于 0 的数字,会透传到权限请求结果回调 onRequestPermissionsResult
requestPermissions(permissionNeeded, 101);
}
}
3. 检测摄像头是否可用
通过如下回调检测设备是否异常,若未检测到任何异常反馈(可同步启动“4. 检测画面是否正常”),且画面显示正常,则设备可用。
onDeviceError
回调检测设备是否异常。/**
* 本地设备异常通知。
*
* 支持版本:2.15.0 及以后。
* 详情描述:本地设备异常。
* 通知时机:当本地音频或视频设备功能出现异常时会触发此回调。
*
* @param exceptionType 设备异常类型。
* @param deviceType 发生异常的设备类型。
* @param deviceID 设备 ID。目前仅支持桌面端设备,用于标识具体的设备;对于移动端设备,此参数将返回空字符串。
*/
public void onLocalDeviceExceptionOccurred(ZegoDeviceExceptionType exceptionType, ZegoDeviceType deviceType, String deviceID){
}
/**
* 音视频设备错误通知。
* @param deviceName 设备类型名称。
* @param errorCode 错误码,请参考常见错误码:https://doc-zh.zego.im/article/4378#7。
*/
void onDeviceError(String deviceName, int errorCode);
4. 检测画面是否正常
若此时画面显示正常,则摄像头正常,可用于通话。
播放设备检测流程如下图所示:
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 错误码,详情请参考常见错误码文档:https://doc-zh.zego.im/article/4378#7。
*/
public void onMediaPlayerStateUpdate(ZegoMediaPlayer mediaPlayer, ZegoMediaPlayerState state, int errorCode){}
联系我们
文档反馈