RTC SDK為您提供音視頻設備測試的方法,您可以在音視頻通話前檢查當前設備上的攝像頭,麥克風以及揚聲器等音視頻設備是否正常工作,以保證音視頻通話質量。通過閱讀本文,您可以了解音視頻設備測試的方法。
攝像頭測試
創建SDK實例后,應用層可以調用接口
getCameraList
,獲取當前設備上所有可用攝像頭,返回設備列表中將同時返回設備ID及設備名稱,應用層可選擇通過設備名稱或設備ID進行判斷,并通過接口SetCurrentCameraName
或SetCurrentCameraID
選中需要測試的設備。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
設置測試攝像頭設備之后,通過
setLocalViewConfig
接口可以設置預覽顯示窗口,然后啟動預覽,即可通過預覽畫面是否正常顯示,判斷當前攝像頭設備是否正常工作。// 設置預覽窗口 AliVideoCanvas canvas; canvas.displayView = /*預覽顯示窗口句柄*/; pEngine->setLocalViewConfig(canvas, AliEngineVideoTrackCamera); // 開啟預覽檢查,確認顯示是否正常 pEngine->startPreview();
麥克風測試
創建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);
開始測試前,通過接口
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()); } }
選中測試設備后,調用麥克風測試接口啟動測試,接口中需要指明測試設備名稱或者設備ID,以及音量回調頻率(傳入0為默認頻率,每20ms回調一次音量)。測試開始后,提示您對麥克風設備說話,并將
OnRecordingDeviceAudioLevel
回調中返回的采集音量值進行展示,判斷當前麥克風設備是否正常工作。// 啟動麥克風設備測試 audioDeviceManager->StartRecordingDeviceTest();
測試完成后,調用接口
StopRecordingDeviceTest
停止麥克風測試,并釋放設備測試功能實例。audioDeviceManager->StopRecordingDeviceTest();
揚聲器測試
創建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);
開始測試前,通過接口
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()); } }
選中測試設備后,調用揚聲器測試接口啟動測試,接口中需要指明測試設備名稱或設備 ID,音量回調頻率(傳入0為默認頻率,每20ms回調一次音量),以及測試使用的音頻文件路徑。開始測試后,可以將
OnPlayoutDeviceAudioLevel
回調中返回的采集音量值進行展示,同時關注揚聲器中播放的測試音頻,判斷當前揚聲器設備是否正常工作。// 啟動播放設備測試 audioDeviceManager->StartPlayoutDeviceTest(wavPath.c_str(), 1, 48000);
說明 目前揚聲器測試播放文件只支持Wave格式,傳入路徑需要為絕對路徑,并保證可以被讀取訪問。測試完成或接收到文件播放結束事件回調后,調用
StopPlayoutDeviceTest
接口停止麥克風測試,并釋放設備測試功能實例。audioDeviceManager->StopPlayoutDeviceTest();