一般には、特定の を使用して を にプッシュ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