日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android转流媒体,android 4.4中的流媒体渲染过程

發布時間:2024/7/5 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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中的流媒体渲染过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。