MP4を理解する
MP4
https://scrapbox.io/files/6417fcdba20576001c8e271f.png
https://qiita.com/satken2/items/d14b4113fe3fb5f5597b
mp4のBoxは、本質的には木構造。
Boxは、Header部(8バイト、オクテット)とData部で構成される。
Header部は、Box自身のバイトサイズを表すsize(4バイト)と、Boxのタイプを表すtype(4バイト)をこの順番で持つ。
Boxが木構造といわれる理由は、Data部にある。
BoxのData部には、子Boxか、Boxの持つデータが入るのである。
size - 8 = Data部のバイトサイズ
https://unoh.github.io/2007/09/12/mp43gpp3gpp2.html
り、リンク切れしてる・・・;;
https://kyoyobanana.blogspot.com/2022/01/mp4.html
Boxの種類について詳しい.
http://matsu623a.blogspot.com/2013/12/mp4.html
1. 映像と音声をズレないよう同期させる
MPEG2ではDTS、PTS、PCRといったタイムスタンプ情報が充実しており同期に関してこれを越えるフォーマットは存在しないと思われる。
MPEG4ではDT(Decoding Time)、CT(Composition Time)というものがそれらに相当する。
2. ランダムアクセスを可能にする
MPEG2システムでは上記時刻情報を元にシークするしかない。ファイルのお尻のほうのPCRから全体の時間を求め、ファイルポインタを大雑把に進めてから細かい探索を行う。
MPEG4では基本的にオフセット情報で管理されているため直接目的の位置に飛べそうだ。
多分moov情報を元にmdat部分を読みに行く必要がある
疑問
Decoding Timeって何
Composition Timeって何
メモ
TimeScale(タイムスケール)は、「トラックにおいて1秒を何分割して表現するのか」を表す。
Duration(デュレーション)はこれを用いた数値で、トラック全体の再生時間が 「何TimeScale」かを表す。
sttsはSampleのデュレーション情報を持っている。
デュレーションを → sttsで → サンプルのindexにする
→ stszで →
→ stscで → チャンクのindexにする
→ stco(co64)で → チャンクのバイトオフセットにする
https://github.com/uupaa/H264.js/wiki/MP4
この説明が一番深く掘られている
http://lib.mpeg.co.jp/libraries/mpeg_labo/winPC_26.html
いろいろなところから参照されている!