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 を使えるかもしれない
このスクラップは3ヶ月前にクローズされました