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 を書き込みます。
- ヘッダーバイトを埋めます。
- CRC フィールドにゼロを書き込みます。
- CRC フィールドの前のヘッダー バイトに対して CRC を計算します。
- CRC を最後の 4 バイトに書き込みます。
リーダールール
リーダーは、不正なフレームをスローするのではなく、失敗したステータスを返す必要があります。ランタイム デコーダ コードは診断を設定し、ペイロード デコードを安全にスキップできます。