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

  • 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)

    • PTSPES に含まれている再生時刻に関する 33 bit の情報です。この情報は映像と音声の同期のために必要です
    • STCPTS の示す時刻になるとデコード結果を映像や音声として出力します
    • 時刻に関する情報は PTS が最も重要な情報になります、この情報は再生するプレイヤー側に引き渡す必要があります。時刻を示す情報は PTS 他に STCSCR があります。
  • 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 で特に重要なのは PATPMT です。先頭のパケットは必ず PAT になり、2番目のパケットは PMT になります。 PMT には 動画と音声の ES_PID が格納されています。
  • STD (System Target Decoder)

    • MPEG-1 で定義されている仮想的なデコーダモデルです
    • Pack
      • PKH と 1つ以上の Packet から構成されます。SH を含む事もあります
    • Packet
      • PHES で構成されます。PH には PTSDTS が含まれる場合があります
    • 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 |       ↓