android转流媒体,android 4.4中的流媒体渲染过程
第一次寫blog,只是為了記下學習的過程。android中東西很多,架構和流程都很復雜,經常發現以前學習過的很多東西,即使當時看明白沒多久就忘記了,只能重新拾起再看。
于是想起blog這個東東,寫下來總不會忘記,也和別人一起共享。
以下基于android 4.4 KK簡單地描述下流媒體的渲染過程,第一次寫沒有太多經驗,主要涉及到的模塊有nuplayer, nuplayerrenderer等
1 NuPlayer.cpp 中的 onMessageReceived,這是nuplayer的消息處理邏輯,其中有
-->消息處理邏輯: ?? what == ACodec::kWhatDrainThisBuffer??? //從OMX DL層來的消息,ACodec間接轉發,解碼已經完成,讓IL取走解碼數據,就是拿去顯示
-->這個消息里調用 :renderBuffer(audio, codecRequest);??? //調用nuplayer中的渲染函數renderBuffer
2 renderBuffer ,進行一些簡單檢查,當前是否合適去顯示
-->調用render的queueBuffer
3 NuplayerRenderer::queueBuffer
-->簡單地封裝一個kWhatQueueBuffer消息并發送
4 在renderer中的onMessageReceived中接收kWhatQueueBuffer消息
-->調用onQueueBuffer函數
5 onQueueBuffer函數
-->核心就是根據發送來的消息是audio還是video,進行對應的處理。如果是audio就把當前ABuffer放進audio隊列,video就把ABuffer放進video 隊列
這里主要關心的是video,所以關注postDrainVideoQueue函數
6?postDrainVideoQueue函數
-->主要就是封裝kWhatDrainVideoQueue消息并發送,包括了一些額外處理
7 在onMessageReceived中處理kWhatDrainVideoQueue
-->調用onDrainVideoQueue函數,真正的處理函數
-->調用postDrainVideoQueue函數,再次post,形成一個循環,直到處理結束?
8 onDrainVideoQueue函數
--> 調用 mSoftRenderer->render,使用software render去渲染圖像,渲染過程就是把數據拷貝到native window中的過程
-->這個函數里面會做一些判斷,如果當前需要渲染的幀已經落后音頻太多,則把當前幀做丟棄處理。這時候屏幕上就看到不連續的畫面了,俗稱掉幀。
9 Software Renderer
-->這個里面邏輯不是太多,就是一些簡單地判斷當前視頻數據的格式,然后做一些轉換,轉換成native win或者平臺能夠支持的格式 ,然后拷貝到native window。這里面有關stride的東西一直沒完全弄懂,尤其是那個c_stride,c_size。我知道stride是像素寬度對齊到4、8、16邊界后的值,但是源碼里的c_stride, c_size實在沒弄明白,有明白的請幫忙解釋一二。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的android转流媒体,android 4.4中的流媒体渲染过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTML animate()动画更改多个
- 下一篇: 【Pytorch神经网络理论篇】 09