2013-03-27 58 views
0

我想分析在Android中播放視頻時交換的消息流。我這樣做的時候碰到了這張圖片。Android媒體播放器中的事件是什麼意思?

http://img521.imageshack.us/img521/3585/capturehb.png

然後,我經歷了AwesomePlayer和TimedEventQueue源文件去了。在這些文件中我無法得到事件的含義。 任何有關這方面的幫助表示讚賞。
謝謝。

TimedEventQueue源文件的鏈接附在下面。

https://github.com/cozybit/aosp-frameworks-base/blob/master/media/libstagefright/TimedEventQueue.cpp

回答

2

一般來說,TimedEventQueue是通過該event與特定timeout被推入queue的機構。在timeout的末尾,與event相關聯的功能是被調用,其將執行一些功能。關於AwesomePlayerTimedEventQueue的關係,請在下面找到這種關係的概述。

在Android中,AwesomePlayer的核心是實現其滋生的videoaudio音軌相關路徑,並在player發動機的整體運作,幫助玩家引擎。

除此之外,AwesomePlayer用作SINKvideo軌道即橋OMXCodecvideo decoder執行和顯示流水線即SurfaceTexture之間。在進入TimedEventQueue之前,操作的簡要概述如下。

player引擎工作在pull模型和AwesomePlayer從解碼器通過read呼叫拉動視頻幀。一旦有一個視頻幀可用,AV Synchronization邏輯進入圖片,這將決定什麼時候render幀。一旦框架準備好呈現,它將通過mVideoRenderer->render調用傳遞給SurfaceTexture模塊。

來到TimedEventQueue,AwesomePlayer使用這個概念來實現上述功能。當調用start時,調用postVideoEvent_l()。默認情況下,在觸發此事件之後,android樹中會實現一段時間延遲。當這個事件被觸發時,調用相應的函數。在這種情況下,onVideoEvent被調用,然後進行阻塞read調用。

視頻緩衝後收到,如果視頻幀音軌時間戳 10毫秒,然後又postVideoEvent_l(10000)被觸發,這將迫使該線程睡眠10 ms的時間較早,在這之後onVideoEvent再次觸發。

類似地,後一視頻幀是rendered,然後AwesomePlayer將觸發另一postVideoEvent_l()這將睡默認一段時間,再回來與塊中read呼叫。

+0

非常感謝您......如果您爲此主題提供任何參考建議,這將非常有幫助......謝謝...... – Kiran 2013-03-28 19:19:58

+0

@KiranKumarManku通過參考,如果您正在尋找一本書,我個人不知道如果有一本書在這個層面解釋。接下來最好的辦法是閱讀代碼,並繪製自己的理解,或從深入代碼的人那裏獲取相同的信息。這是我在我的評論中試圖捕獲的內容,這是基於我關於此代碼的工作。 – Ganesh 2013-03-28 23:23:08