メモ: Stream Access Points
更新日: 2012年11月12日

以下はISO/IEC 14496-12:2012 Corrected version Annex Iにて記述される、Stream Access Point (以下SAP)の定義の和訳・意訳(?)である。 ISO Base Mediaにおけるストリームアクセスの区分・区別・識別の理解の一助となれば幸いである。 なお、presentation timeは適当な訳語が存在しないので、technical term(専門用語)として扱い、そのままとしている。
Annex I
Stream Access Points
I.1 導入 このAnnex (付録文書) はStream Access Point (SAP)を定義し、6系統のSAPを明文化するものである。 Stream Access Point (SAP)はメディアストリームのコンテナへのランダムアクセスを可能にするものである。 一つのコンテナは、各々があるメディアの型式によって連続するメディアの符号化された形態であるメディアストリームを、一つまたはそれ以上含むことができる。 SAPは、 (a) コンテナ内のその位置以降より開始した情報、 及び (b) コンテナ内もしくは外部の利用可能な他の部分からの初期化データ のみを使用して、識別されたメディアストリームの再生を可能にするコンテナ上の位置である。 派生規格は、コンテナ上のSAPにアクセスする際に初期化データが必要なのかどうかを明記すべきであり、またその初期化データにどのようにアクセスすべきなのかを明記すべきである。 I.2 SAP properties TSAP: TSAPとは、TSAPに等しいか、またはそれよりも大きいpresentation timeを持つメディアストリーム中の全てのアクセスユニットが、 ビットストリーム上のISAPから始まるデータを使用し且つISAP以前のデータを使用しないで正しく復号できるような、 メディアストリーム中の任意のアクセスユニットの中で最も早期のpresentation timeである。 ISAP: ISAPとは、TSAPに等しいか、またはそれよりも大きいpresentation timeを持つメディアストリーム中の全てのアクセスユニットが、 ビットストリーム上のISAPから始まるデータを使用し且つISAP以前のデータを使用しないで正しく復号できるような、 ビットストリーム上の最大の位置である。 ISAU: ISAUとは、TSAPに等しいか、またはそれよりも大きいpresentation timeを持つメディアストリーム中の全てのアクセスユニットが、 あるアクセスユニットと復号順でそれに続くアクセスユニットを使用して且つ復号順でそれ以前のアクセスユニットを使用しないで正しく復号できるような、 メディアストリーム内の復号順でみた場合の最近傍となるアクセスユニットのビットストリー ム上の開始位置である。 注: ISAUは常にISAPに等しいか、それよりも大きいものとする。 TDEC: TDECとは、ビットストリーム上のISAUから始まるデータを使用し且つISAU以前のデータを使用しないで正しく復号できるような、メディアストリームの任意のアクセスユニットの中で最も早期のpresentation timeである。 TEPT: TEPTとは、ビットストリーム上のISAUから始まるメディアストリームの任意のアクセスユニットの中で最も早期のpresentation timeである。 ※ TEPTはTASP, TDEC及びTPTFのどれよりも小さいか、または等しい。 TPTF: TPTFとは、ビットストリーム上のISAUから始まるメディアストリームの、復号順でみた場合の最初のアクセスユニットのpresentation timeである。 I.3 SAP types 現在のところ、6つのSAPの型式(タイプ)が定義されている。 Type 1: TEPT = TDEC = TSAP = TPTF 最も簡単(シンプル)なSAPである。 いわゆるClosed GOPが形成するSAPである。 但し、復号順でみた最初のアクセスユニットから復号する場合、それに続くどのアクセスユニットよりも先行して表示されるケースである。 Type 2: TEPT = TDEC = TSAP < TPTF Closed GOPが形成するSAPでも復号順でみた最初のアクセスユニットから復号する場合、 それに続くアクセスユニットのいずれかが、最初に復号したアクセスユニットよりも先行して表示されるケースである。 これはH.264においては、負のPOCが存在する場合に起こるケースである。(IDRピクチャよりも先行して表示されるピクチャは、負のPOCを持つ。) Type 3: TEPT < TDEC = TSAP <= TPTF いわゆるOpen GOPが形成するSAPである。 ISAUに復号順で続くアクセスユニットのいくつかが、ISAUより復号を開始した場合に正しく復号できない。 メディアストリームがOpen GOPまたはClosed GOPのSAPのみから成る場合、 ISAU (ISAU0とする) の復号順でみて直前のアクセスユニットに対応するSAPとなるISAUから復号を開始すれば、 復号順でみてISAU0に続くアクセスユニットが正しく復号できる。 Type 4: TEPT <= TPTF < TDEC = TSAP いわゆるGradual Decoder Refresh (漸次デコーダリフレッシュ)である。 P[0]P[1]P[2]P[3] とアクセスユニットが4個並んでいて(復号および表示順序は同じものとする)、 P[0]から復号を開始するとP[2]及びP[3]のアクセスユニットが正 しく復号できる場合、 P[0]がISAUであり、P[2]がTSAPを持つアクセスユニットである。 Type 5: TEPT = TDEC < TSAP TDECは、メディアストリームの正しく復号出来るアクセスユニットうち最早期のpresentation timeということなので、 今、I[0]P[1]P[2]という3個のアクセスユニットが並んでいた場合(復号および表示順序は同じものとする)、 P[2]がI[0]さえ正しく復号できれば正しく復号できるとして、P[1]はI[0]を正しく復号しても正しく復号できない場合、 TSAPを持つアクセスユニットはP[2]であり、TDECを持つアクセスユニットはI[0]ということになる。 Type 6: TEPT < TDEC < TSAP オマケ ・random access point (RAP) SAP type 1, 2または3であるISAUで開始するサンプル。 ・random access recovery point SAP type 4のTSAPに等しいpresentation timeを持つサンプル。 ・sync sample SAP type 1または2であるISAUで開始するサンプル。 注意: 格納されるメディアの形式によっては、sync sampleの定義がより精細に与えられることがある。 Q. ISAPとISAUの違いは? A. Appendix Iだけを読むと、その違いをイメージするのは難しいかもしれませんが、8.16.3 Segment Index Boxの定義を読むとイメージ出来ると思います。 the ISAP is a position exactly pointing to the start of a top-level box, such as a movie fragment box 'moof' [ISAPは、movie fragment box 'moof'のような、まさしくトップレベルボックスの開始を指し示す位置である。] と書かれているので、ISAPはビットストリーム単位で見ているのに対してISAUはアクセスユニット単位でSAPを見ていることが分かるのではないでしょうか。 Q. ISAUが上手くイメージ出来ないので、具体例が欲しい。 A. 今、 I[0]P[1]I[2]P[3]とアクセスユニットが4個並んでいるとします。 ここで、I[0]から復号を開始すればI[0]P[1]I[2]P[3]が全て正しく復号でき、また、I[2]から復号を開始すればI[2]P[3]が正しく復号できるとします。 また、P[1]から復号を開始してもP[1]は正しく復号できませんし、P[3]から復号を開始してもP[3]が正しく復できないものとします。 この場合、P[1]にとってのISAUはI[0]であり、P[3]にとってのISAUはI[2]となります。 I[0]はP[3]のISAUにはなりません。何故なら、I[0]はP[3]を正しく復号出来る__最近傍__の復号開始点ではないからです。 ・規格の不明瞭な点 ぶっちゃけ、ISAPがよくわからない。(ぁ) 8.16.3 Segment Index Boxのところを読めばわかると思うが、この仕様書(14496-12:2012)をベースとしたSegmentに対して ・ISAPは、movie fragment box 'moof'のような、まさしくトップレベルボックスの開始を指し示す位置である。 と書かれている。 Segmentは (a) movie boxとそれに関連づけられたメディアデータ及び関連づけられた他のboxから成る。 または (b) movie fragment boxesとそれらに関連づけられたメディアデータ及び関連づけられた他のboxから成る。 と書かれている。 従って、これらを総合して定義の意味するところを考えると、ISAPは'moov'の開始位置を示すことにならないか?となる。 しかしこれらは上述のSAP typesの定義と矛盾するところではないか?となれば、ここにおいてISAPが'moof'の開始点という要求を導いたものは何か?となる。 何故、movie fragmentの最初のアクセスユニットの開始点ではダメなのか? そもそも'mdat'が'moov'に先行した場合はどうなるのか? また、 For segments based on this specification (i.e. based on movie sample tables or movie fragments): の件がSegment Index Boxを使用した場合のみ適用される制約なのかも不明な点だ。 これに関する一番引っ掛かる点は、SAP type 4に関するroll_distance > 0であるケースのみの記述である。 MDCTベースの音声コーデックにおけるpre-roll由来の負のroll_distanceの場合ではこれは該当しないのか? 要するに、以前よりは厳格な用語の定義がなされたが、仕様書を総じての選択すべき定義が分からんという状況。 誰か分かる人が居たら情報を希望する。