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

38次阅读

共计 3485 个字符,预计需要花费 9 分钟才能阅读完成。

前言:

为了保障实时通信体验,通话前能够进行网络与设施的检测,提前辨认并排查问题。

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

本文将介绍如何应用 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 及以上版本:监听 onLocalDeviceExceptionOccurred 回调检测设施是否异样。
/**
 * 本地设施异样告诉
 * 
 * 反对版本: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 及以上版本:监听 onLocalDeviceExceptionOccurred 回调检测设施是否异样。
/**
 * 本地设施异样告诉
 * 
 * 反对版本: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 参考列表

办法 形容
startPreview 启动本地预览
onDeviceError 设施异样告诉
startSoundLevelMonitor 启动音量变动监控
onMediaPlayerStateUpdate 播放器播放状态回调

常见错误码

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

正文完
 0