Stagefright中關於audio的部分是交由AudioPlayer來處理,它是在AwesomePlayer::play_l中被建立的。
(1) 當上層應用程式要求播放影音時,AudioPlayer同時被建立出來,並且被啟動
|
|
(2) AudioPlayer在啟動的過程中會先去讀取第一筆解碼後的資料,並且開啟audio output
|
|
從AudioPlayer::start的程式碼來看,AudioPlayer似乎並沒有將mFirstBuffer傳給audio output。
(3) 開啟audio output的同時,AudioPlayer會將callback函式設給它,之後每當callback函式被呼叫,AudioPlayer便去audio decoder讀取解碼後的資料
|
|
解碼後audio資料的讀取就是由callback函式所驅動,但是callback函式又是怎麼由audio output去驅動的,目前從程式碼上還看不出來。另外一方面,從上面的程式片段可以看出,fillBuffer將資料(mInputBuffer)複製到data之後,audio output應該會去取用data。
(5) 至於audio decoder的工作流程則和video decoder相同,可參閱《Stagefright (4) - Video Buffer傳輸流程》

本文详细介绍了Android系统中Stagefright框架音频处理的过程。从AudioPlayer组件的创建与启动开始,逐步解析了音频解码后的数据读取、音频输出开启及回调机制,并对比了音频解码器与视频解码器的工作流程。
2848

被折叠的 条评论
为什么被折叠?



