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