RTC SDK为您提供音视频设备测试的方法,您可以在音视频通话前检查当前设备上的摄像头,麦克风以及扬声器等音视频设备是否正常工作,以保证音视频通话质量。通过阅读本文,您可以了解音视频设备测试的方法。

摄像头测试

  1. 创建SDK实例后,应用层可以调用接口getCameraList,获取当前设备上所有可用摄像头,返回设备列表中将同时返回设备ID及设备名称,应用层可选择通过设备名称或设备ID进行判断,并通过接口SetCurrentCameraNameSetCurrentCameraID选中需要测试的设备。

    AliRtcEngine *pEngine = AliRtcEngine::Create("");
    IAliEngineAudioDeviceManager* videoDeviceManager = nullptr;
    pEngine->pInterface(AliEngineInterfaceVideoDeviceManger, &videoDeviceManager);
    
    AliEngineDeviceInfoList cameraList = videoDeviceManager->getCameraList();
    
    #if defined(USE_DEVIC_NAME)
    // 可以通过遍历所有摄像头设备名,查找并设置需要测试的设备
    std::string matchDeviceName = /*测试设备名*/;
    for (size_t i = 0; i != cameraList.deviceNames.size(); ++i)
    {
        AliRtc::String deviceName = cameraList.deviceNames.at(i);
        if(std::string(deviceName.c_str()) == matchDeviceName)
        {
            // 设置测试设备
            videoDeviceManager->SetCurrentCameraName(deviceName);
        }
    }
    #else
    // 可以通过遍历所有摄像头设备ID并查找需要测试的设备
    std::string matchDeviceId = /*测试设备ID*/;
    for (size_t i = 0; i != cameraList.deviceIds.size(); ++i)
    {
        AliRtc::String deviceId = cameraList.deviceIds.at(i);
        if(std::string(deviceId.c_str()) == matchDeviceId)
        {
            // 设置测试设备
            videoDeviceManager->SetCurrentCameraID(deviceId);
        }
    }
    #endif
  2. 设置测试摄像头设备之后,通过setLocalViewConfig接口可以设置预览显示窗口,然后启动预览,即可通过预览画面是否正常显示,判断当前摄像头设备是否正常工作。

    // 设置预览窗口
    AliVideoCanvas canvas;
    canvas.displayView = /*预览显示窗口句柄*/;
    pEngine->setLocalViewConfig(canvas, AliEngineVideoTrackCamera);
    
    // 开启预览检查,确认显示是否正常
    pEngine->startPreview();

麦克风测试

  1. 创建SDK实例后,应用层需要继承RtcEngineEventListener接口,实现OnRecordingDeviceAudioLevel回调,用于接收麦克风测试时返回的音量值。再通过SDK接口SetEngineEventListener创建设备测试实例,并在创建时传入回调监听实例。

    // 继承实现设备测试事件回调
    class EventListener : public RtcEngineEventListener {
      void OnRecordingDeviceAudioLevel(int level) {
        // 处理麦克风测试音量回调
      } override;
    }
    
    // 创建SDK实例及设备测试实例
    RtcEngine *pEngine = RtcEngine::Create("");
    EventListener *listener = new EventListener();
    pEngine->SetEngineEventListener(listener);
  2. 开始测试前,通过接口GetRecordingDeviceList获取当前设备上所有可用麦克风设备,返回设备列表中将同时返回设备ID及设备名称,应用层可选择通过设备名或设备ID判断并选择需要测试的设备。

    RtcEngineAudioDeviceManager* audioDeviceManager = nullptr;
    audioDeviceManager = pEngine->GetAudioDeviceManager();
    RtcEngineDeviceInfoList* audioCaptureList = audioDeviceManager->GetRecordingDeviceList();
    
    // 可以通过遍历所有麦克风设备ID,查找需要测试的设备
    std::string matchDeviceId = /*测试设备ID*/;
    for (size_t i = 0; i != audioCaptureList->GetCount(); ++i)
    {
        RtcEngineDeviceInfo info = audioCaptureList->GetDeviceInfo((uint32_t)i);
        if(info.deviceID.c_str() == matchDeviceId)
        {
            // 设置测试设备
            audioDeviceManager->SetCurrentRecordingDeviceId(info.deviceID.c_str());
        }
    }
  3. 选中测试设备后,调用麦克风测试接口启动测试,接口中需要指明测试设备名称或者设备ID,以及音量回调频率(传入0为默认频率,每20ms回调一次音量)。测试开始后,提示您对麦克风设备说话,并将OnRecordingDeviceAudioLevel回调中返回的采集音量值进行展示,判断当前麦克风设备是否正常工作。

    // 启动麦克风设备测试
    audioDeviceManager->StartRecordingDeviceTest();
  4. 测试完成后,调用接口StopRecordingDeviceTest停止麦克风测试,并释放设备测试功能实例。

    audioDeviceManager->StopRecordingDeviceTest();

扬声器测试

  1. 创建SDK引擎实例后,应用层需要继承RtcEngineEventListener接口,实现OnPlayoutDeviceAudioLevel回调,用于接收扬声器测试时返回的音量值。然后通过SDK接口SetEngineEventListener创建设备测试实例,并在创建时传入回调监听实例。

    // 继承实现设备测试事件回调
    class EventListener : public RtcEngineEventListener {
      void OnPlayoutDeviceAudioLevel(int level) {
        // 处理扬声器测试音量回调
      } override;
    }
    
    // 创建SDK实例及设备测试实例
    RtcEngine *pEngine = RtcEngine::Create("");
    EventListener *listener = new EventListener();
    pEngine->SetEngineEventListener(listener);
  2. 开始测试前,通过接口GetPlayoutDeviceList获取当前设备上所有可用扬声器,返回设备列表中将同时返回设备 ID 及设备名称,应用层可选择通过设备名或设备 ID 判断并选中需要测试的设备。

    RtcEngineAudioDeviceManager* audioDeviceManager = nullptr;
    audioDeviceManager = pEngine->GetAudioDeviceManager();
    RtcEngineDeviceInfoList* audioRenderList = audioDeviceManager->GetPlayoutDeviceList();
    
    // 可以通过遍历所有播放设备ID,查找需要测试的设备
    std::string matchDeviceId = /*测试设备ID*/;
    for (size_t i = 0; i != audioRenderList->GetCount(); ++i)
    {
        RtcEngineDeviceInfo info = audioRenderList->GetDeviceInfo((uint32_t)i);
        if(info.deviceID.c_str() == matchDeviceId)
        {
            // 设置测试设备
            audioDeviceManager->SetCurrentPlayoutDeviceId(info.deviceID.c_str());
        }
    }
    
  3. 选中测试设备后,调用扬声器测试接口启动测试,接口中需要指明测试设备名称或设备 ID,音量回调频率(传入0为默认频率,每20ms回调一次音量),以及测试使用的音频文件路径。开始测试后,可以将OnPlayoutDeviceAudioLevel回调中返回的采集音量值进行展示,同时关注扬声器中播放的测试音频,判断当前扬声器设备是否正常工作。

    // 启动播放设备测试
    audioDeviceManager->StartPlayoutDeviceTest(wavPath.c_str(), 1, 48000);
    
    说明 目前扬声器测试播放文件只支持Wave格式,传入路径需要为绝对路径,并保证可以被读取访问。
  4. 测试完成或接收到文件播放结束事件回调后,调用StopPlayoutDeviceTest接口停止麦克风测试,并释放设备测试功能实例。

    audioDeviceManager->StopPlayoutDeviceTest();