Closed18
MPEG

AVPlayer より低レイヤの VideoToolBox

特殊再生は早送りとかの部分

MPEG とは?
Moving Picture Experts Group
グループ名がそのまま使われ続けている

例えば、 MP4 のコンテナに
動画コーデックと音声コーデックはそれぞれ配置される

デマルチプレクサで動画と音声を分離してそれぞれデコードする

タイミング制御でレンダリングする前に音声と動画の同期を取る
AirPlay で動画と音声がずれるのは、このタイミング制御がうまく効いていないということか

VideoToolBox の実装が C ベースなので、ポインタ型で渡してあげる必要がある
Swift でポインタを扱うには UnsafeMutablePointer
を使う

動き補償予測で、差分だけデータを持つことによって、圧縮効率を高めている
そのため、デコードされる順番も再生順とは異なる
GOP(Group Of Pictures)
- Iフレーム
- Pフレーム
- Bフレーム

人間は映像よりも音声の乱れに敏感なので、音声を中心にタイミング制御していく

システムクロックを元にフレームバッファに出力して、それを元にレンダリングしていく

メモリに限りがあるので、 PTS はデータ読み込みをフロー制御する

CoreMedia でシステムクロックを扱う場合は CMClock を使う

特殊再生ではフレームの時間を取得して条件に応じて表示をスキップする

AVFoundation のレイヤーでは Iフレームだけを取り出すのは難しい

AVPlayer が動かない競合するような場面で CoreMedia を使えるかもしれない
このスクラップは2024/08/30にクローズされました