webrtc音頻引擎模塊之 audio_device介紹

 audio_device模塊的目錄結構如下:

  

    1,include 文件夾是該工程的庫包含導出文件;

    2,android、ios、linux、mac、win文件夾分別對應於相應設備已經操作系統,該部分主要完成音頻的錄音和播放處理,部分設備也會進行混音處理;  下面以windows系統爲例做主要的介紹:

  

        2.1, audio_device_core_win(.cc/h)和audio_device_wave_win(.cc/h),這兩個模塊的功能相同,都主要用於設備的控制管理,如果設備的選擇、開始錄音、停止錄音、開始播放、停止播放、麥克風靜音等相關操作的實現;

          不同的是audio_device_core_win直接通過com接口操作音頻系統底層;而audio_device_wave_win是直接調用現成的SDK操作音頻。 如果windows操作系統支持直接操作音頻系統底層將會調用audio_device_core_win模塊,否則調用audio_device_wave_win模塊。如下面代碼:

       

  if (AudioDeviceWindowsCore::CoreAudioIsSupported())
        {
            // create *Windows Core Audio* implementation
            ptrAudioDevice = new AudioDeviceWindowsCore(Id());
            WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "Windows Core Audio APIs will be utilized");
        }
        else
        {
            // create *Windows Wave Audio* implementation
            ptrAudioDevice = new AudioDeviceWindowsWave(Id());
            if (ptrAudioDevice != NULL)
            {
                // Core Audio was not supported => revert to Windows Wave instead
                _platformAudioLayer = kWindowsWaveAudio;  // modify the state set at construction
                WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "Windows Core Audio is *not* supported => Wave APIs will be utilized instead");
            }
        }

        2.2,audio_device_utility_win(.cc/h),公用方法的文件,只有簡單的幾個函數,可以不太深究;

        2.3,audio_mixer_manager_win(.cc/h),該模塊主要用於數據的管理操作,以及音頻的混音播放處理。


    3,dummy文件夾,是模擬設備的調用處理,裏面沒有什麼實際源碼;

    4,上圖能看到的“.cc”和“.h”是該模塊的業務處理核心。

      4.1,audio_device_buffer,音頻的數據處理,捕獲的音頻的回調數據,需要播放的音頻處理業務。

      4.2,audio_device_config,配置處理,使用默認的即可。

      4.3,audio_device_generic,通用模塊,也就是該模塊消除了設備的無關性,每個設備模塊都會繼承該模塊, windows操作繼承該模塊的爲 audio_device_core_win和audio_device_wave_win。

      4.4,audio_device_impl,接口模塊,外部使用的接口模塊;

      4.5,audio_device_utility,通用模塊,主要提供通用的函數與定義。


   

       


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章