一般には、特定の を使用して を にプッシュTimedEventQueue
するメカニズムです。の最後に、に関連付けられた関数が呼び出され、何らかの機能が実行されます。との関係に来て、この関係の概要を以下に示します。event
queue
timeout
timeout
event
AwesomePlayer
TimedEventQueue
Android では、AwesomePlayer
はプレーヤー エンジンのコア実装であり、関連するパスを生成しvideo
て追跡し、エンジンの全体的な機能を支援します。audio
player
これに加えて、トラックのSINK 、つまり実装と表示パイプライン ieの間のブリッジAwesomePlayer
として機能します。に入る前に、操作の概要を以下に示します。video
OMXCodec
video decoder
SurfaceTexture
TimedEventQueue
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