功能描述

为保证通话或直播质量,我们推荐在进入频道前进行音视频设备测试,检测麦克风、摄像头等音视频设备能否正常工作。该功能对于有高质量要求的场景,如在线教育等,尤为适用。

实现方法

请确保你已经了解如何实现音视频通话或互动直播。详见快速开始:

参考以下方法测试音视频设备:

  • 调用 StartAudioRecordingDeviceTestStartEchoTest 测试音频采集设备。若想停止测试,调用 StopAudioRecordingDeviceTestStopEchoTest
  • 调用 StartAudioPlaybackDeviceTestStartEchoTest 测试音频播放设备。若想停止测试,调用 StopAudioPlaybackDeviceTestStopEchoTest
  • 调用 StartPreview 方法测试视频设备。若想停止测试,调用 StopPreview
所有测试设备的方法都必须在加入频道之前调用。

音频采集设备测试

  • 用途:测试本地音频采集设备,如麦克风,是否正常工作。
  • 测试方法及原理:调用 StartAudioRecordingDeviceTest 或 StartEchoTest;用户说话,如果采集设备正常工作,SDK 会触发 OnVolumeIndicationHandler 回调并报告音量信息(UID 为 0 表示本地音量)。若想停止测试,调用 StopAudioRecordingDeviceTestStopEchoTest

示例代码

// 适用于 Windows 或 macOS 设备。
public void loadEngine(string appId)
{
    // 初始化 IRtcEngine。
    mRtcEngine = IRtcEngine.GetEngine (appId);
    mRtcEngine.OnVolumeIndication = OnVolumeIndicationHandler;
    // 获取 AudioRecordingDeviceManager 类。
    AudioRecordingDeviceManager audioRecordingDeviceManager = (AudioRecordingDeviceManager)mRtcEngine.GetAudioRecordingDeviceManager();
    // 创建 AudioRecordingDeviceManager 实例。
    audioRecordingDeviceManager.CreateAAudioRecordingDeviceManager();
    // 获取系统中被索引的音频采集设备的总数。
    int count = audioRecordingDeviceManager.GetAudioRecordingDeviceCount();
    // 获取某个被索引的音频采集设备 ID。index 为指定的索引值,必须小于 GetAudioRecordingDeviceCount 的返回值。
    audioRecordingDeviceManager.GetAudioRecordingDevice(0, ref deviceNameA, ref deviceIdA);
    // 通过设备 ID 设置指定的音频采集设备。
    audioRecordingDeviceManager.SetAudioRecordingDevice(deviceIdA);
    // 启用音频音量回调功能。
    mRtcEngine.EnableAudioVolumeIndication(300, 3, true);
    // 开始音频采集设备测试。
    audioRecordingDeviceManager.StartAudioRecordingDeviceTest(300);
    // 停止音频采集设备测试。
    audioRecordingDeviceManager.StopAudioRecordingDeviceTest();
    // 释放 AudioRecordingDeviceManager 实例。
    audioRecordingDeviceManager.ReleaseAAudioRecordingDeviceManager();
}

// 实现音频音量回调接口。
void OnVolumeIndicationHandler(AudioVolumeInfo[] speakers, int speakerNumber, int totalVolume)
{

}
// 适用于 Android 或 iOS 设备。
public void loadEngine(string appId)
{
    // 初始化 IRtcEngine。
    mRtcEngine = IRtcEngine.GetEngine (appId);  
    // 开始音频设备测试。
    mRtcEngine.StartEchoTest(10);
    // 停止音频设备测试。
    mRtcEngine.StopEchoTest();
}

API 参考

音频播放设备测试

  • 用途:测试本地音频播放设备,如外放设备,是否正常工作。
  • 测试方法及原理:调用 StartAudioPlaybackDeviceTest 或 StartEchoTest,并指定播放的音频文件。如果能听到声音,则说明播放设备正常工作。若想停止测试,调用 StopAudioPlaybackDeviceTest 或 StopEchoTest

示例代码

// 适用于 Windows 或 macOS 设备。
public void loadEngine(string appId)
{
    // 初始化 IRtcEngine。
    mRtcEngine = IRtcEngine.GetEngine (appId);
    mRtcEngine.OnVolumeIndication = OnVolumeIndicationHandler;
    // 获取 AudioPlaybackDeviceManager 类。
    AudioPlaybackDeviceManager audioPlaybackDeviceManager = (AudioPlaybackDeviceManager)mRtcEngine.GetAudioPlaybackDeviceManager();
    // 创建 AudioPlaybackDeviceManager 实例。
    audioPlaybackDeviceManager.CreateAAudioPlaybackDeviceManager();
    // 获取系统中被索引的音频播放设备的总数。
    int count = audioPlaybackDeviceManager.GetAudioPlaybackDeviceCount();
    // 获取某个被索引的音频播放设备 ID。index 为指定的索引值,必须小于 GetAudioPlaybackDeviceCount 的返回值。
    audioPlaybackDeviceManager.GetAudioPlaybackDevice(0, ref deviceNameA, ref deviceIdA);
    // 通过设备 ID 设置指定的音频播放设备。
    audioPlaybackDeviceManager.SetAudioPlaybackDevice(deviceIdA);
    // 启用音频音量回调功能。
    mRtcEngine.EnableAudioVolumeIndication(300, 3, true);
    // 开始音频播放设备测试。
    audioPlaybackDeviceManager.StartAudioPlaybackDeviceTest(300);
    // 停止音频播放设备测试。
    audioPlaybackDeviceManager.StopAudioPlaybackDeviceTest();
    // 释放 AudioPlaybackDeviceManager 实例。
    audioPlaybackDeviceManager.ReleaseAAudioPlaybackDeviceManager();
}

// 实现音频音量回调接口。
void OnVolumeIndicationHandler(AudioVolumeInfo[] speakers, int speakerNumber, int totalVolume)
{

}
// 适用于 Android 或 iOS 设备。
public void loadEngine(string appId)
{
    // 初始化 IRtcEngine。
    mRtcEngine = IRtcEngine.GetEngine (appId);  
    // 开始音频设备测试。
    mRtcEngine.StartEchoTest(10);
    // 停止音频设备测试。
    mRtcEngine.StopEchoTest();
}

API 参考

视频设备测试

  • 用途:测试本地视频设备,如摄像头和显示器,是否正常功能。
  • 测试方法及原理:调用 EnableVideoEnableVideoObserver 开启视频模块和视频观测器后,调用 StartPreview,如果能看到本地采集的图像,则说明视频设备正常工作。若想停止测试,调用 StopPreview
  • 为获取原始视频数据,需同时调用 EnableVideoEnableVideoObserver 方法。
  • 在 Unity 中无法获取准确的窗口句柄,Agora 不建议使用 StartVideoDeviceTest 方法测试视频设备。
  • 示例代码

    // 适用于 Windows 或 macOS 设备。
    public void loadEngine(string appId)
    {
        // 初始化 IRtcEngine。
        mRtcEngine = IRtcEngine.GetEngine (appId);
        // 获取 VideoDeviceManager 对象。
        VideoDeviceManager videoDeviceManager = (VideoDeviceManager)mRtcEngine.GetVideoDeviceManager();
        // 创建 VideoDeviceManager 实例。
        videoDeviceManager.CreateAVideoDeviceManager();
        // 获取系统中被索引的视频设备总数。
        videoDeviceManager.GetVideoDeviceCount();
        // 获取某个被索引的视频设备 ID。index 为指定的索引值,必须小于 GetVideoDeviceCount 的返回值。
        videoDeviceManager.GetVideoDevice(0, deviceNameA, deviceIdA);
        // 通过设备 ID 设置指定的视频设备。
        videoDeviceManager.SetVideoDevice(deviceIdA);
        // 开启视频模块。
        int mRtcEngine.EnableVideo();
        // 开启视频观测器。
        int mRtcEngine.EnableVideoObserver();
        // 开启视频预览。
        int mRtcEngine.StartPreview();
        // 停止视频预览。
        int mRtcEngine.StopPreview();
        // 释放 VideoDeviceManager 实例。
        videoDeviceManager.ReleaseAVideoDeviceManager();
    }

    API 参考

    开发注意事项

    • 请确保进行测试时,相应的音视频设备没有被其他应用程序占用。
    • 测试结束后,请务必调用相应的 Stop 方法停止测试,然后再调用 JoinChannelByKey 加入频道。