如何在通话前进行设备检测

更新时间:2025-03-24 01:46:52

本文将为您介绍如何实现在通话前对设备进行检测。

功能介绍

ARTC SDK提供了通话前设备检测功能,旨在对本地关键音频与视频设备进行全面检测,包括麦克风、扬声器和摄像头。在正式开启通话之前,用户能够提前识别潜在的设备异常状况,从而避免在实际通话过程中因设备突发故障而陷入难以迅速定位问题根源的困境,确保通话过程的流畅与高效稳定。

功能实现

一、麦克风检测

启动麦克风,若未检测到任何异常反馈,且麦克风采集音量检测正常,则麦克风设备正常可用。

1. 启动麦克风

通过调用startAudioCaptureTest接口启动麦克风采集。

Android
iOS
Windows
/**
 * @brief 通话前开启音频采集设备检测
 * @details 此接口可以控制打开音频采集检测
 * - 通过{@link AliRtcAudioVolumeObserver::onTestAudioVolumeCallback}判断采集是否正常
 * @return 
 * - 0: 成功
 * - 非0: 返回错误码
 * @note 只能入会前{@link joinChannel}调用此接口
 */
public abstract int startAudioCaptureTest();
/**
 * @brief 通话前,开启音频采集设备检测
 * @details 此接口可以控制打开音频采集
 * - 通过{@link onTestAudioVolumeCallback}判断采集是否正常
 * @note 只能入会前{@link joinChannel}调用此接口
 */
- (void)startAudioCaptureTest;
/**
 * @brief 通话前开启音频采集测试
 * @details 此接口可以控制打开音频采集测试
 * - 通过{@link AliEngineEventListener::OnTestAudioVolumeCallback}判断采集是否正常
 * @return
 * - 0: 成功
 * - 非0: 返回错误码
 * @note 只能入会前{@link JoinChannel}调用此接口
 */
virtual int StartAudioCaptureTest() = 0;

2. 检测麦克风设备是否异常

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

Android
iOS
Windows
/**
 * @brief 本地设备异常回调
 * @param deviceType 设备类型, 参考{@link AliRtcEngine.AliRtcEngineLocalDeviceType}
 * @param exceptionType 设备异常类型, 参考{@link AliRtcEngine.AliRtcEngineLocalDeviceExceptionType}
 * @param msg 异常时携带的信息
 * @note 此回调标识了内部无法恢复了设备异常,收到此回调时用户需要检查设备是否可用
 */
public void OnLocalDeviceException(AliRtcEngine.AliRtcEngineLocalDeviceType deviceType, AliRtcEngine.AliRtcEngineLocalDeviceExceptionType exceptionType, String msg){}
/**
 * @brief 本地设备异常回调
 * @param deviceType 设备类型, 参考{@link AliRtcLocalDeviceType}
 * @param exceptionType 设备异常类型, 参考{@link AliRtcLocalDeviceExceptionType}
 * @param msg 异常时携带的信息
 * @note 此回调标识了内部无法恢复了设备异常,收到此回调时用户需要检查设备是否可用
 */
- (void)onLocalDeviceException:(AliRtcLocalDeviceType)deviceType exceptionType:(AliRtcLocalDeviceExceptionType)exceptionType message:(NSString *_Nullable)msg;
/**
 * @brief 本地设备异常回调
 * @param deviceType 设备类型, 参考{@link AliEngineLocalDeviceType}
 * @param exceptionType 设备异常类型, 参考{@link AliEngineLocalDeviceExceptionType}
 * @param msg 异常时携带的信息
 * @note 此回调标识了内部无法恢复了设备异常,收到此回调时用户需要检查设备是否可用
 */
virtual void OnLocalDeviceException(AliEngineLocalDeviceType deviceType, AliEngineLocalDeviceExceptionType exceptionType, const char* msg){};

3. 检测麦克风采集音量

通过监听如下回调,获取麦克风采集到声音的音量,如果数据无异常则麦克风正常,可用于通话。

Android
iOS
Windows
/**
 * @brief 通话前检测,音量信息回调
 * @param volume 音量
 */
public void OnTestAudioVolume(int volume) {}
/**
 * @brief 通话前音频采集检测的音量回调
 * @param volume 音量
 */
- (void)onTestAudioVolumeCallback:(int)volume;
/**
 * @brief 通话前音频采集检测的音量回调
 * @param volumn 音量
 */
virtual void OnTestAudioVolumeCallback(int volumn) {}

4. 停止麦克风检测

用户在确认麦克风是否正常后,需要调用stopAudioCaptureTest接口停止检测。

Android
iOS
Windows
/**
 * @brief 关闭音频采集检测
 * @return 
 * - 0: 成功
 * - 非0: 返回错误码
 * @note 只能入会前{@link joinChannel}调用此接口
 */
public abstract int stopAudioCaptureTest();
/**
 * @brief 关闭音频采集检测
 * @note 只能入会前{@link joinChannel}调用此接口
 */
- (void)stopAudioCaptureTest;
/**
 * @brief 关闭音频采集测试
 * @return
 * - 0: 成功
 * - 非0: 返回错误码
 * @note 只能入会前{@link JoinChannel}调用此接口
 */
virtual int StopAudioCaptureTest() = 0;

二、扬声器检测

播放一个音频文件。如果可以听到相应的音频,则扬声器设备正常,可用于通话。

1. 播放音频文件

调用playAudioFileTest播放一个用户用于测试的音频文件。如果可以听到相应的音频,则扬声器设备正常。

Android
iOS
Windows
/**
 * @brief 播放音频文件
 * @param filePath 文件路径
 * @return
 * - =0 成功
 * - <0 失败
 * @note 只能入会前{@link joinChannel}调用此接口
 */
public abstract int playAudioFileTest(String filePath) ;
/**
 * @brief 播放音频文件
 * @param filePath 文件路径
 * @return
 * - =0 成功
 * - <0 失败
 * @note 只能入会前{@link joinChannel}调用此接口
 */
- (int)playAudioFileTest:(NSString *_Nonnull)filePath;
/**
 * @brief 播放音频文件
 * @param filePath 文件路径
 * @return
 * - =0 成功
 * - <0 失败
 * @note 只能入会前{@link JoinChannel}调用此接口
 */
virtual int PlayAudioFileTest(const char* filePath) = 0;

2. 检测扬声器是否异常

通过如下回调检测设备是否异常,若未检测到任何异常反馈,且可以听到相应的音频,则扬声器设备正常。

Android
iOS
Windows
/**
 * @brief 本地设备异常回调
 * @param deviceType 设备类型, 参考{@link AliRtcEngine.AliRtcEngineLocalDeviceType}
 * @param exceptionType 设备异常类型, 参考{@link AliRtcEngine.AliRtcEngineLocalDeviceExceptionType}
 * @param msg 异常时携带的信息
 * @note 此回调标识了内部无法恢复了设备异常,收到此回调时用户需要检查设备是否可用
 */
public void OnLocalDeviceException(AliRtcEngine.AliRtcEngineLocalDeviceType deviceType, AliRtcEngine.AliRtcEngineLocalDeviceExceptionType exceptionType, String msg){}
/**
 * @brief 本地设备异常回调
 * @param deviceType 设备类型, 参考{@link AliRtcLocalDeviceType}
 * @param exceptionType 设备异常类型, 参考{@link AliRtcLocalDeviceExceptionType}
 * @param msg 异常时携带的信息
 * @note 此回调标识了内部无法恢复了设备异常,收到此回调时用户需要检查设备是否可用
 */
- (void)onLocalDeviceException:(AliRtcLocalDeviceType)deviceType exceptionType:(AliRtcLocalDeviceExceptionType)exceptionType message:(NSString *_Nullable)msg;
/**
 * @brief 本地设备异常回调
 * @param deviceType 设备类型, 参考{@link AliEngineLocalDeviceType}
 * @param exceptionType 设备异常类型, 参考{@link AliEngineLocalDeviceExceptionType}
 * @param msg 异常时携带的信息
 * @note 此回调标识了内部无法恢复了设备异常,收到此回调时用户需要检查设备是否可用
 */
virtual void OnLocalDeviceException(AliEngineLocalDeviceType deviceType, AliEngineLocalDeviceExceptionType exceptionType, const char* msg){};

3. 停止播放音频文件

用户在确认扬声器是否正常后,需要调用stopAudioFileTest接口停止播放音频文件。

Android
iOS
Windows
/**
 * @brief 停止播放音频文件
 * @return
 * - =0 成功
 * - <0 失败
 * @note 只能入会前{@link joinChannel}调用此接口
 */
public abstract int stopAudioFileTest();
/**
 * @brief 停止播放音频文件
 * @return
 * - =0 成功
 * - <0 失败
 * @note 只能入会前{@link joinChannel}调用此接口
 */
- (int)stopAudioFileTest;
/**
 * @brief 停止播放音频文件
 * @return
 * - =0 成功
 * - <0 失败
 * @note 只能入会前{@link JoinChannel}调用此接口
 */
virtual int StopAudioFileTest() = 0;

三、摄像头检测

设置本地预览显示视图,启动摄像头开始预览,若没有异常回调,且画面显示正常,则摄像头正常,可用于通话。

1. 设置本地预览显示视图

开启摄像头预览之前,需要调用setLocalViewConfig设置显示视图。

Android
iOS
Windows
/**
 * @brief 设置本地预览显示视图
 * @param viewConfig 本地视频显示属性, 详细见{@link com::alivc::rtc::AliRtcEngine::AliRtcVideoCanvas}
 * @param track  只支持 {@link AliRtcVideoTrack#AliRtcVideoTrackCamera} 和 {@link AliRtcVideoTrack#AliRtcVideoTrackScreen}
 * @return
 * - 0 : 成功
 * - < 0 : 失败
 * @note 支持joinChannel之前和之后切换窗口。如果canvas或者{@link AliRtcVideoCanvas#view}为null,则停止显示。
 *       如果需要重新设置{@link AliRtcVideoCanvas#renderMode},请保持canvas中其他属性不变,仅修改
 *       {@link AliRtcVideoCanvas#renderMode}。
 *       如果需要重新设置{@link AliRtcVideoCanvas#mirrorMode},请保持canvas中其他属性不变,仅修改
 *       {@link AliRtcVideoCanvas#mirrorMode}。
 */
public abstract int setLocalViewConfig(AliRtcVideoCanvas viewConfig, AliRtcVideoTrack track);
/**
 * @brief 设置本地预览显示视图
 * @param viewConfig 本地视频显示属性, 详细见 {@link AliVideoCanvas}
 * @param track  只支持 {@link AliRtcVideoTrackCamera} 和 {@link AliRtcVideoTrackScreen}
 * @return
 * - 0 : 成功
 * - < 0 : 失败
 * @note 支持joinChannel之前和之后切换窗口。如果canvas或者 {@link AliVideoCanvas::view} 为nil,则停止显示。
 *       如果需要重新设置 {@link AliVideoCanvas::renderMode},请保持canvas中其他属性不变,仅修改
 *       {@link AliVideoCanvas::renderMode}。
 *       如果需要重新设置 {@link AliVideoCanvas::mirrorMode},请保持canvas中其他属性不变,仅修改
 *       {@link AliVideoCanvas::mirrorMode}。
 */
- (int)setLocalViewConfig:(AliVideoCanvas *_Nullable)viewConfig forTrack:(AliRtcVideoTrack)track;
/**
 * @brief 设置本地预览显示视图
 * @param renderConfig 本地视频显示属性, 详细见 {@link AliEngineVideoCanvas}
 * @param track  只支持 {@link AliEngineVideoTrackCamera} 和 {@link AliEngineVideoTrackScreen}
 * @return
 * - 0: 成功
 * - 非0: 失败
 * @note 支持joinChannel之前和之后切换窗口。如果 {@link AliEngineVideoCanvas::displayView} 为null,则停止显示。
 *       如果需要重新设置{@link AliEngineVideoCanvas::renderMode},请保持renderConfig中其他属性不变,仅修改
 *       {@link AliEngineVideoCanvas::renderMode}。
 *       如果需要重新设置{@link AliEngineVideoCanvas::mirrorMode},请保持renderConfig中其他属性不变,仅修改
 *       {@link AliEngineVideoCanvas::mirrorMode}。
 */
virtual int SetLocalViewConfig(AliEngineVideoCanvas renderConfig,
AliEngineVideoTrack track) = 0;

2. 开启摄像头预览

调用startPreview开启摄像头预览。

Android
iOS
Windows
/**
 * @brief 开启本地视频预览
 * @details 开启本地视频预览并自动打开摄像头
 * @return
 * - 0 : 成功
 * - < 0 : 失败
 * @note 如果没有调用{@link #setLocalViewConfig}设置显示的view,则无法预览,但不影响推流。
 * 可以在{@link #joinChannel}之前就开启预览会自动打开摄像头。
 */
public abstract int startPreview();
/**
 * @brief 开启本地视频预览
 * @return
 * - 0 : 成功
 * - <0 : 失败
 * @note 如果没有调用 {@link setLocalViewConfig:forTrack:} 设置显示的view,则无法预览。
 * 可以在 {@link joinChannel:name:onResultWithUserId:} 之前就开启预览会自动打开摄像头。
 */
- (int)startPreview;
/**
 * @brief 开启本地视频预览
 * @return
 * - 0: 成功
 * - 非0: 失败
 * @note 如果没有调用 {@link SetLocalViewConfig} 设置显示的view,则无法预览。
 *       可以在{@link JoinChannel}之前就开启预览会自动打开摄像头。
 */
virtual int StartPreview(int width = 0, int height = 0) = 0;

3. 检测摄像头是否异常

通过如下回调检测设备是否异常,如果没有异常反馈,且预览画面显示正常,则摄像头设备正常。

Android
iOS
Windows
/**
 * @brief 本地设备异常回调
 * @param deviceType 设备类型, 参考{@link AliRtcEngine.AliRtcEngineLocalDeviceType}
 * @param exceptionType 设备异常类型, 参考{@link AliRtcEngine.AliRtcEngineLocalDeviceExceptionType}
 * @param msg 异常时携带的信息
 * @note 此回调标识了内部无法恢复了设备异常,收到此回调时用户需要检查设备是否可用
 */
public void OnLocalDeviceException(AliRtcEngine.AliRtcEngineLocalDeviceType deviceType, AliRtcEngine.AliRtcEngineLocalDeviceExceptionType exceptionType, String msg){}
/**
 * @brief 本地设备异常回调
 * @param deviceType 设备类型, 参考{@link AliRtcLocalDeviceType}
 * @param exceptionType 设备异常类型, 参考{@link AliRtcLocalDeviceExceptionType}
 * @param msg 异常时携带的信息
 * @note 此回调标识了内部无法恢复了设备异常,收到此回调时用户需要检查设备是否可用
 */
- (void)onLocalDeviceException:(AliRtcLocalDeviceType)deviceType exceptionType:(AliRtcLocalDeviceExceptionType)exceptionType message:(NSString *_Nullable)msg;
/**
 * @brief 本地设备异常回调
 * @param deviceType 设备类型, 参考{@link AliEngineLocalDeviceType}
 * @param exceptionType 设备异常类型, 参考{@link AliEngineLocalDeviceExceptionType}
 * @param msg 异常时携带的信息
 * @note 此回调标识了内部无法恢复了设备异常,收到此回调时用户需要检查设备是否可用
 */
virtual void OnLocalDeviceException(AliEngineLocalDeviceType deviceType, AliEngineLocalDeviceExceptionType exceptionType, const char* msg){};
  • 本页导读 (1)
  • 功能介绍
  • 功能实现
  • 一、麦克风检测
  • 二、扬声器检测
  • 三、摄像头检测
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等