audio的獲取途徑和播放輸出途徑---播放輸出

常見設備有哪些途徑可以獲取音頻和播放輸出音頻的途徑(代碼模塊)?
基於vlc3.0.6源碼:
這裏從vlc源碼來分析例舉一下,vlc,確實是一個功能齊全的多媒體處理系統,在wind、linux、android、ios都有提供相應的版本,其核心結構是共用的一套代碼,採用插件的方式組合起來,可以方便擴展,重點是它是一個開源工程,隨時下載查看其源碼,這裏從vlc源碼來看下,支持哪些途徑獲取音頻和播放輸出音頻。這些音頻源途徑和輸出途徑都是以一個插件的方式運作在vlc系統中,對於我們瞭解常見的音頻通路有一定幫助:
輸出:音頻輸出插件對應模塊代碼在 /modules/audio_output/目錄下
(音頻從decoder解碼器解碼出來,(源碼在/src/input/decoder.c),調用 DecoderPlayAudio() => aout_DecPlay( p_aout, p_audio, i_rate ),即給到audio_output插件的play()接口進行播放,所有這些模塊都是按照 vlc的audio_out接口編寫,接口統一)
audio_output插件:
1.0 adummy.c  這是一個虛擬的輸出插件,什麼事都沒做,沒有實際價值,估計作爲模塊調試用。
2.0 alsa.c  linux下的alsa音頻架構,這個插件使用的是alsa-lib 用戶接口播放音頻,linux下使用alsa-lib播放音頻可參考此插件。
3.0 amem.c 這也是一個虛擬的輸出插件,輸出到內存中。
4.0 audiotrack.c  android 的audiotrack播放音頻,不過vlc這裏是通過c代碼反過來調用android sdk的java代碼,使用android sdk的audiotrack播放。
5.0 auhal.c 這個配合coreaudio_common.c文件,是ios中 CoreAudio,音頻播放
6.0 decklink.cpp  decklink,音頻採集卡,聲卡,這估計是window上使用的,不清楚。
7.0 directsound.c wind上的DirectX微軟公司創建的多媒體編程接口。由C++編程語言實現,玩遊戲的安裝遊戲經常需要這個玩意
8.0 file.c  虛擬的,直接存文件。
9.0 jack.c jackaudio ???什麼玩意?一個音頻庫。[JACK能使用ALSA、PortAudio、CoreAudio、FFADO和OSS作爲硬件層的後端。此外, 還有一個虛擬的驅動(當不需要聲音輸出時是很有用的,例如離線渲染)和一個通過UDP協議的音頻驅動(Audio-over-UDP driver)。它可以運行在Linux、Mac OS XSolarisWindowsFreeBSDOpenBSDNetBSD上] 摘自百度百科。
kai.c  。。。K Audio Interface audio output,恕見識少,找不到相關說明。
10.0 mmdevice.c  Windows Multimedia Device API audio output
11.0 opensles_android.c 安卓上的opensl標準庫,在android開發者文檔中可以找到相關介紹和demo,ndk提供的實現opensl標準的音頻庫,native層播放音頻。
12.0 OOS 早期linux上的音頻系統,從2.6版本開始ALSA成爲Linux內核中默認的標準音頻驅動程序集,OSS則被標記爲廢棄。
13.0 pulse.c  一個音頻庫,官網 https://www.freedesktop.org/wiki/Software/PulseAudio/ 相關介紹 https://www.linuxidc.com/Linux/2019-09/160687.htm[摘自百度百科]PulseAudio是一個聲音服務器,一個後臺進程從一個或多個音源(進程或輸入設備)接受聲音輸入 然後重定向聲音到一個或多個槽(聲卡,遠程網絡PulseAudio服務,或其他進程)。PulseAudio的一個目的通過它是重定向所有聲音流,包括那些試圖訪問硬件的進程(像那些遺留的基於OSS的軟件)。PulseAudio通過提供適配器給那些使用不同的聲音系統,像aRts和ESounD。Linux下的典型方案,用戶提供配置ALSA來使用PulseAudio提供的虛擬設備。儘管應用使用ALSA會將輸出的聲音輸出到PulseAudio,然後PulseAudio會使用ALSA它自己來訪問真正的聲卡. PulseAudio同樣提供它自己的接口給應用程序,用來直接支持PulseAudio
14.0 sndio.c libsndfile 庫,用於讀寫音頻文件的一個c語言庫 官網http://www.mega-nerd.com/libsndfile/ 這裏估計是用來寫文件。
15.0 tizen_audio.c Tizen,是一個操作系統https://www.tizen.org/about 。 針對於移動設備的開源嵌入式系統,類似於google的android, apple的ios, ”泰澤”是基於Linux的開源軟件平臺,可運行在智能手機、平板、上網本、車載信息系統和智能電視上。
泰澤的應用程序接口是基於HTML5和其它web開放標準。除了HTML5應用程序外,泰澤的SDK將包括原生開發工具包。從核心系統到核心應 用,泰澤的整個軟件堆棧都會對外開放。 android使用java,tizen基於web。Tizen 1.0 SDK及源代碼已於2012年4月30日發佈。 這個tizen_audio就是tizen系統上的音頻接口。長見識了,關於這個 Tizen系統,可以看下官網和百科,不知華爲的鴻蒙系統會不會到時候也有支持☺。
16.0 waveout.c wind下的wavout api接口,用來播放音頻。
其它。
上述列舉出來的,涵蓋了wind, linux, android, ios, tizen, 等系統平臺,還包括一些其他的音頻庫作爲輸出。
在android上的播放途徑,有兩個,AudioTrack 用的是c調用java的api.   opensl, NDK native層 播放音頻。
支持的功能和平臺,是真的豐富。

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