MPEG 2 - uupaa/H264.js GitHub Wiki
このエントリでは、主に HLS から MPEG-2 TS を取り出し、H.264 と AAC に分解するまでの用語をカバーしています。
地デジや MPEG-2 PS に関する記述はほぼありません。
MPEG-4 の説明も参照してください。
MPEG-2
MPEG-2 System
が初めての方は、まずはwikipedia で概要の把握を行ってください。
-
MPEG-2 System
,System
(多重化方式)- マルチメディアデータをファイルや記録メディアに保存したり、ネットワーク上で伝送するには、 映像と音声を別々に符号化し、符号化データの多重化と同期のための仕組みが必要となります。 この多重化方式(Multiplexing)を System と呼びます
- MPEG-2 の多重化方式は MPEG-2 System, MPEG-4 なら MPEG-4 System と呼ばれます
- MPEG-4 においては、音声データと動画データは 1つの Object(Object Descriptor)として扱われ、 これらを多重化・同期するのが MPEG-4 System の役割になります
-
MPEG-2 Channel
- MPEG-2 では番組(Program) の事を Channel と呼びます。MPEG-2 TS に複数の Program を含める事もできます
-
MPEG-2 PS
- MPEG-2 PS はデータを自由に高速に読み込みができるメディア(DVD, HDD)用の規格です。
- 一方 MPEG-2 TS は、地上波や通信経路などエラーの検出が必要な環境を想定しています。
-
MPEG-2 TS
- MPEG-2 TS には映像/音声以外の余計な情報が含まれるため、保存には向きません。
- MPEG-2 TS は様々なフォーマットの映像を内包できる仕様です。
- MPEG-2 以外にも H.264やAACをペイロードに格納することができます。
- MPEG-2 TS は 13818-1:2000 (ISO/IEC) または H.222.0 (ITU-T Rec) として規格化されています
- H.264 を扱うために拡張された MPEG-2 TS は 13818-1:2000 (E) として規格化されています
-
MPEG-2 TS Packet
- 188 bytes ( 4 bytes header + 184 bytes payload ) のパケットです(地デジでは 192 bytes や 204 bytes に拡張されていたりするそうです)
- 地デジにおける仕様は http://www.arib.or.jp/english/html/overview/doc/2-STD-B31v1_7.pdf (P107)を参照してください
-
MPEG-2 ES
ES
Video ES
Audio ES
(Elementary Stream)- MPEG-1/2/4 の規格に沿うようにエンコードされた状態のVideoやAudioデータをESと呼びます。
ES
には、MPEG-1, MPEG-2, MPEG-4, H.264, VC-1, MP3, AAC, JPEG などを格納することができます。
-
MPEG-2 PES Packet
PES
PES Packet
(Packetized Elementary Stream)ES
を適切なサイズに分割しパケット化したものをPES
と呼びます。パケットの先頭はsync_byte
(0x47
) で始まります。PES
にはいつ再生すれば良いかを示す時刻情報(PTS
)を含む事が可能です- https://en.wikipedia.org/wiki/Packetized_elementary_stream
- MPEG-2 System には2種類のPESのデータフォーマットがあります
- 一つは放送やネットワーク上での転送に向いた
MPEG-2 TS
で、もう一つはHDDやDVDへの保存に向いたMPEG-2 PS
です - PES Packet を更に加工すると ByteStream を得られます。
- Packetized elementary stream
-
MPEG-2 PTS
PTS
(Presentation Time Stamp)PTS
はPES
に含まれている再生時刻に関する 33 bit の情報です。この情報は映像と音声の同期のために必要ですSTC
がPTS
の示す時刻になるとデコード結果を映像や音声として出力します- 時刻に関する情報は
PTS
が最も重要な情報になります、この情報は再生するプレイヤー側に引き渡す必要があります。時刻を示す情報はPTS
他にSTC
とSCR
があります。
-
MPEG-2 STC
STC
(System Time Clock)- システム基準時刻。内部クロック
- MPEG-1 のクロックはすべて90kHz単位です。
STC
,PTS
,SCR
も90KHzを基礎単位とする時刻情報として構成されています - TODO: MPEG-4 System では 90kHz ではない気がする
-
MPEG-2 SCR
SCR
(System Clock Reference)ES
における 33bit のシステムクロック情報です
-
MPEG-2 PSI/SI
PSI/SI
(Program Specific Information / Service Information)MPEG-2 TS
では、一度に複数の Program を扱う事が可能です。TS にどんな Program が含まれており、それぞれのESがどの Program に関係しているかを示すPSI/SI
と呼ばれる 13 bit の情報が存在します。PSI/SI
で特に重要なのはPAT
とPMT
です。先頭のパケットは必ずPAT
になり、2番目のパケットはPMT
になります。PMT
には 動画と音声の ES_PID が格納されています。PAT
のバイト列を読み解くには https://github.com/uupaa/MPEG2TS.js/wiki/Example#mpeg2-tsavc を参照してください
-
STD
(System Target Decoder)- MPEG-1 で定義されている仮想的なデコーダモデルです
Pack
PKH
と 1つ以上のPacket
から構成されます。SH
を含む事もあります
Packet
PH
とES
で構成されます。PH
にはPTS
やDTS
が含まれる場合があります
PH
(Packet Header)Packet
の情報を格納するヘッダです
PKH
(Pack Header)SCR
を含む,0x000001
のバイト列で開始します
SH
(System Header)- 制御フラグ, 伝送レート, バッファ制御情報などが含まれます。可変長です
0x000001BB
のバイト列で開始します
+----+----+ Audio ES | A1 | A2 | +----+----+ +----+----+ Video ES | V1 | V2 | +----+----+ +-----+----+ +-----+----+ +-----+----+ +-----+----+ +----- Packet | PH1 | A1 | | PH2 | V1 | | PH3 | A2 | | PH4 | V2 | | .... +-----+----+ +-----+----+ +-----+----+ +-----+----+ +----- ↓ ↓ +-----+------+-----------------------+------+------+---------- Pack | SH1 | PKH1 | Some Packets | PKH2 | .... | ... +-----+------+-----------------------+------+------+----------
-
MPEG-2 TS Encode Layer
-
MPEG-2 TS
では、以下のレイヤーで順番に符号化していきます。復号化はこの逆順になりますSource | ↓ 映像/音声ソース ----------|-------------------- VCL | ↓ 符号化データ (Video Coding Layer) ----------|-------------------- NAL | ↓ 1byte のスタートコードの付与, ByteStream に変換 (Network Abstraction Layer) ----------|-------------------- MPEG-2 TS | ↓
-