自己做網(wǎng)站怎么推廣百度品牌廣告是什么
從前面 AudioTrack、PlaybackThread、輸出流設(shè)備三者的關(guān)系中,我們看到 AudioTrack 把音頻流數(shù)據(jù)送入到對應(yīng)的 PlaybackThread 中,那么應(yīng)用進(jìn)程是如何控制音頻流的開始播放 start()、停止播放 stop()、暫停播放 pause()。這一章節(jié)我們就來繼續(xù)分析。
一、音頻流管理
應(yīng)用進(jìn)程與 AudioFlinger 并不在一個進(jìn)程上,這就需要 AudioFlinger 提供音頻流管理功能,并提供一套通訊接口可以讓應(yīng)用進(jìn)程跨進(jìn)程控制 AudioFlinger 中的音頻流狀態(tài)(通訊接口前面已經(jīng)介紹過)。
AudioFlinger 音頻流管理由 AudioFlinger::PlaybackThread::Track 實現(xiàn),Track 與 AudioTrack 是一對一的關(guān)系,一個 AudioTrack 創(chuàng)建后,那么 AudioFlinger 會創(chuàng)建一個 Track 與之對應(yīng)。PlaybackThread 與 AudioTrack/Track 是一對多的關(guān)系,一個 PlaybackThread 可以掛著多個 Track。
具體來說,AudioTrack 創(chuàng)建后,AudioPolicyManager 根據(jù) AudioTrack 的輸出標(biāo)識和流類型,找到對應(yīng)的輸出流設(shè)備和 PlaybackThread(如果沒有找到的話,則系統(tǒng)會打開對應(yīng)的輸出流設(shè)備并新建一個 PlaybackThread),然后創(chuàng)建一個 Track 并掛到這個 PlaybackThread 下面。
PlaybackThread 有兩個私有成員與此相關(guān):
mTracks:該 PlaybackThread 創(chuàng)建的所有 Track 均添加保存到這個