メインコンテンツまでスキップ

FrameHeader

FrameHeader は、各 TSMP フレームの先頭にある固定の 56 バイトのヘッダーを記述します。これにより、デコーダはペイロード バイトを読み取る前に、プロトコル バージョン、コーデック、ペイロード サイズ、フレーム インデックス、レイアウト メタデータを識別できます。

ヘッダーの検証

ヘッダー リーダーは以下を検証します。

  • TSMP 魔法。
  • ヘッダーのサイズ。
  • プロトコルのメジャー バージョン。
  • ペイロードのサイズとレイアウト。
  • ヘッダー CRC32。

CRC 検証が失敗した場合、デコーダはフレームを破棄し、警告をログに記録します。ペイロード バイトは、失敗したヘッダーからはデコードされません。

重要な分野

分野目的
Magicフレームを TSMP として識別します。
HeaderSizeヘッダーのバイト長を固定しました。
VersionMajor / VersionMinorプロトコルの互換性。
FrameIndex送信側フレームカウンター。
PayloadSizeデコードするペイロードのバイト数。
PayloadTypeペイロードの解釈。ネットワーク フレームは、TSMP ネットワーク ペイロード タイプを使用します。
CodecIdコーデックハンドラーを選択します。
StreamId論理ストリーム識別子。
LayoutId論理ペイロード レイアウト識別子。
BlockSizeコーデックのブロック サイズのメタデータ。
DecodeSampleSizeデコーダーのサンプル サイズのメタデータ。
QuantizationModeコーデック オプションまたは従来の量子化バイト。
HeaderCrc32計算中に CRC フィールドがゼロに設定されたヘッダー バイトの CRC32。

予約済みバイト

ヘッダーは、レイアウトの安定性のために予約されたバイトを保持します。ライターは予約バイトをゼロに設定する必要があります。新しいプロトコル バージョンで予約バイトが定義されていない限り、リーダーは予約バイトに意味を付けるべきではありません。

ライタールール

ライターは常に CRC を書き込みます。

  1. ヘッダーバイトを埋めます。
  2. CRC フィールドにゼロを書き込みます。
  3. CRC フィールドの前のヘッダー バイトに対して CRC を計算します。
  4. CRC を最後の 4 バイトに書き込みます。

リーダールール

リーダーは、不正なフレームをスローするのではなく、失敗したステータスを返す必要があります。ランタイム デコーダ コードは診断を設定し、ペイロード デコードを安全にスキップできます。