0

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

4

1 に答える 1

2

一般には、特定の を使用して を にプッシュTimedEventQueueするメカニズムです。の最後に、に関連付けられた関数が呼び出され、何らかの機能が実行されます。との関係に来て、この関係の概要を以下に示します。eventqueuetimeouttimeouteventAwesomePlayerTimedEventQueue

Android では、AwesomePlayerはプレーヤー エンジンのコア実装であり、関連するパスを生成しvideoて追跡し、エンジンの全体的な機能を支援します。audioplayer

これに加えて、トラックのSINK 、つまり実装と表示パイプライン ieの間のブリッジAwesomePlayerとして機能します。に入る前に、操作の概要を以下に示します。videoOMXCodecvideo decoderSurfaceTextureTimedEventQueue

playerエンジンはモデルで動作し、pull呼び出しAwesomePlayerを通じてデコーダーからビデオ フレームを取得しreadます。ビデオ フレームが利用可能になると、フレームのAV Synchronizationタイミングを決定するロジックが表示されrenderます。フレームをレンダリングする準備が整うと、呼び出しSurfaceTextureを通じてモジュールに渡されます。mVideoRenderer->render

TimedEventQueueでは、AwesomePlayerこの概念を使用して前述の機能を実現しています。aが呼び出さstartれると、 apostVideoEvent_l()が呼び出されます。デフォルトでは、このイベントがトリガーされるまでの時間遅延が Android ツリーに実装されています。このイベントがトリガーされると、対応する関数が呼び出されます。この場合、onVideoEventが呼び出され、ブロッキングread呼び出しが続行されます。

ビデオ バッファを受信した後、ビデオ フレームがオーディオ トラックのタイムスタンプより 10 ミリ秒早い場合、別のフレームpostVideoEvent_l(10000)がトリガーされ、このスレッドが 10 ミリ秒以上スリープ状態になり、その後onVideoEvent再びトリガーされます。

同様に、ビデオ フレームが になった後、rendered別のフレームがAwesomePlayerトリガーされ、デフォルトの期間postVideoEvent_l()スリープし、戻ってきて再び通話をブロックします。read

于 2013-03-28T01:47:12.867 に答える