首页 > 其他分享 >音视频通话前的网络及设备检测该如何操作?

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

时间:2023-09-27 11:37:49浏览次数:40  
标签:麦克风 检测 param 音视频 通话 错误码 权限 设备

 

前言:

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

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

本文将介绍如何使用 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. 检测麦克风收音数据”),且麦克风收音数据检测正常,则麦克风设备可用。

/**
* 音视频设备错误通知
* @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. 检测画面是否正常”),且画面显示正常,则设备可用。

/**
* 音视频设备错误通知
* @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 参考列表

方法

描述

​startPreview​

启动本地预览

​onDeviceError​

设备异常通知

​startSoundLevelMonitor​

启动音量变化监控

​onMediaPlayerStateUpdate​

播放器播放状态回调

四、常见错误码

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

 

标签:麦克风,检测,param,音视频,通话,错误码,权限,设备
From: https://www.cnblogs.com/zegoinfo/p/17732262.html

相关文章

  • 音视频通话前的网络及设备检测该如何操作?
    前言:为了保证实时通信体验,通话前可以进行网络与设备的检测,提前识别并排查问题。网络检测:检测网络环境,可用于判断或预测网络环境是否适合推/拉指定码率的流。 设备检测:检测本地麦克风、摄像头以及扬声器是否能正常工作。本文将介绍如何使用ZEGOSDK接口,实现上述两个角度的检测。......
  • 8.7 父进程检测反调试
    首先这是一种比较奇特的反调试思路,通过检测自身父进程来判定是否被调试,原理非常简单,我们的系统在运行程序的时候,绝大多数应用程序都是由Explorer.exe这个父进程派生而来的子进程,也就是说如果没有被调试其得到的父进程就是Explorer.exe的进程PID,而如果被调试则该进程的父进程PID就......
  • 8.9 RDTSC时钟检测反调试
    RDTSC时钟检测同样可实现反调试检测,使用时钟检测方法是利用rdtsc汇编指令,它返回至系统重新启动以来的时钟数,并且将其作为一个64位的值存入EDX:EAX寄存器中,通过运行两次rdstc指令,然后计算出他们之间的差值,即可判定对方是否在调试我们的程序。可以利用时钟检测技术来检测程序是否被......
  • 未连接:有潜在的安全问题 Firefox 检测到潜在的安全威胁,并因xxxx 要求安全连接而没有
    重新安装电脑系统后,用火狐浏览器访问公司网站,出现登录框提示:未连接:有潜在的安全问题 Firefox检测到潜在的安全威胁,并因xxxx要求安全连接而没有继续。不过此时使用edge就是正常的。如果坚持使用火狐,解决办法:只需要在浏览器中输入:about:config回车,然后设置security.......
  • 成功实现FaceTime语音,FaceTime视频,FaceTime数据筛选,检测手机号是否开通FaceTime的
    FaceTime是苹果公司iOS和macOS(以前称MacOSX或OSX)内置的一款视频通话软件,通过Wi-Fi或者蜂窝数据接入互联网,在两个装有FaceTime的设备之间实现视频通话。其要求通话双方均具有装有FaceTime的苹果设备,苹果ID以及可接入互联网的3G/4G/5G或者Wi-Fi网络。 一、Windows电脑上部署......
  • 磁盘坏道检测脚本
    磁盘坏道检测脚本说明:hp服务器有一定概率执行命令会卡主,#!/bin/bash#utf-8#说明:其他型号服务器获取raid信息通过MegaCli#说明:HP服务器获取raid信息通过hpacucli#安装包信息定义HP_SSACLI_COMMAND_RPM_NAME="hpacucli-9.40-12.0.x86_64.rpm"HP_SSACLI_COMMAND_RP......
  • 基于图像形态学处理的目标几何形状检测算法matlab仿真
    1.算法运行效果图预览  2.算法运行软件版本matlab2022a 3.算法理论概述      目标几何形状检测是计算机视觉领域中的重要任务之一,旨在从图像中自动识别和定位不同的几何形状,例如矩形、圆形、三角形等。这些形状检测在许多领域中都具有广泛的应用,如工业自动化......
  • 静态路由与BFD联动实现快速检测链路状态使路由表快速收敛
     实现目的:1.默认情况,PC1和PC2之间的通信使用AR1-AR9-AR10-AR2链路通信(主链路),当AR1-AR9-AR10-AR2链路中任何一点的链路断开后,路由会以毫秒级速度切换到AR1-AR3-AR2(备链路),实现网络的连通性。2.当主链路恢复后,路由又切回到主线路。 实验前的配置基础:1.配置PC和路由器端口IP;2......
  • Applescript脚本实现全自动无痕检测手机号码是否注册iMessage的原理
    一、检测数据的两种方式:1.人工筛选,将要验证的号码输出到文件中,以逗号分隔。再将文件中的号码粘贴到iMessage客户端的地址栏,iMessage客户端会自动逐个检验该号码是否为iMessage账号,检验速度视网速而定。红色表示不是iMessage账号,蓝色表示iMessage账号。2.编写脚本控制Macos/iphon......
  • 浏览器开发者工具打开检测
    目录方法一console.log方法二:debugger方法三:console.table方法四:内容宽度总结方法一console.log在safari中,如果打开了控制台,console.log打印日期实例、函数实例、正则实例会触发两次toString方法,那么可以重写toString方法检测是否打开了控制台。letcount=0;constt......