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 ESESVideo ESAudio 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 PacketPESPES 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 PTSPTS(Presentation Time Stamp)PTSはPESに含まれている再生時刻に関する 33 bit の情報です。この情報は映像と音声の同期のために必要ですSTCがPTSの示す時刻になるとデコード結果を映像や音声として出力します- 時刻に関する情報は
PTSが最も重要な情報になります、この情報は再生するプレイヤー側に引き渡す必要があります。時刻を示す情報はPTS他にSTCとSCRがあります。
-
MPEG-2 STCSTC(System Time Clock)- システム基準時刻。内部クロック
- MPEG-1 のクロックはすべて90kHz単位です。
STC,PTS,SCRも90KHzを基礎単位とする時刻情報として構成されています - TODO: MPEG-4 System では 90kHz ではない気がする
-
MPEG-2 SCRSCR(System Clock Reference)ESにおける 33bit のシステムクロック情報です
-
MPEG-2 PSI/SIPSI/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 で定義されている仮想的なデコーダモデルです
PackPKHと 1つ以上のPacketから構成されます。SHを含む事もあります
PacketPHと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 | ↓
-