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

フレームフォーマット

TSMP は、エンコードされたテクスチャに 1 つのバイナリ フレームを書き込みます。コーデックはバイトがどのようにピクセルになるかを決定します。フレーム形式によって、それらのバイトが何を意味するかが決まります。

通常、フレーム形式を編集する必要はありません。レイアウトを理解すると、CRC エラー、ペイロード容量、メッセージ数、カスタム コーデックの作業をデバッグするときに役立ちます。

フレーム全体

+----------------------+-------------------------------+----------------------+
| Frame header | Frame body / payload | Unused texture area |
| 56 bytes | PayloadSize bytes | codec/padding space |
+----------------------+-------------------------------+----------------------+
  • ヘッダーは受信者にフレームの読み取り方法を伝えます。
  • 本文には同期された値と RPC 呼び出しが含まれます。
  • 残りのテクスチャ容量はデコーダによって無視されます。
  • 古いデータが現在のペイロードと間違われないように、未使用のテクスチャ領域をクリアまたは無視する必要があります。

フレームヘッダー

byte 0 byte 55
+--------+---------+---------+---------+---------+----------+---------+
| Magic | Version | Layout | Stream | Codec | Payload | CRC32 |
| 0..3 | 4..11 | 12..19 | 20..31 | 32..39 | 40..51 | 52..55 |
+--------+---------+---------+---------+---------+----------+---------+

重要なヘッダーフィールド:

オフセットサイズ意味
04TSMP を識別する魔法の値。
42プロトコルのメジャー/マイナー バージョン。
71コーデックによって使用されるシンボル モード。
82ヘッダーのサイズ。現在の値は 56 です。
128ブロックおよびアクティブなレイアウト情報。
204ストリームID。
244フレームインデックス。
284ミリ秒単位のタイムスタンプ。
328コーデック ID とコーデック オプション。
402ペイロードのタイプ。
422バイト単位のペイロード サイズ。
446予約済みのペイロード バイト。
501デコードサンプルサイズ。
511量子化モード。
524ヘッダー CRC32。

CRC は、CRC フィールドが 0 のときにバイト 0..51 に対して計算されます。受信側が別の CRC を計算した場合、フレームは破棄され、警告が記録されます。

フレーム本体

通常の同期の場合、ペイロード タイプは TSMP ネットワーク フレームです。

+-----------------------+---------------------------------------------+
| Network frame header | Message 0 | Message 1 | ... | Message N |
| 8 bytes | variable state or RPC call |
+-----------------------+---------------------------------------------+

ネットワークフレームヘッダー:

オフセットサイズ意味
01ネットワーク ペイロードのメジャー バージョン。
11ネットワーク ペイロードのマイナー バージョン。
22メッセージ数。
44ネットワークシーケンス。

各メッセージは 8 バイトのメッセージ ヘッダーで始まります。

+------------+------+-------+----------+-------------+
| Network ID | Type | Flags | Sequence | Body length |
| 2 bytes | 1 | 1 | 2 bytes | 2 bytes |
+------------+------+-------+----------+-------------+

メッセージ本文は次のいずれかです。

  • 変数の状態: TransSync フィールドの値。
  • RPC 呼び出し: SendTransRPC によってキューに入れられたメソッド ハッシュとエンコードされた引数。

変数状態本体

変数状態メッセージには、1 つのネットワーク動作に対する 1 つ以上のフィールド値が含まれます。

+----------------+------------------+------------------+
| Variable count | Variable value 0 | Variable value N |
| 2 bytes | 7-byte header + data |
+----------------+------------------+------------------+

各値には以下が格納されます。

  • 安定した変数ハッシュ。
  • 値のタイプ。
  • バイト長。
  • エンコードされた値のバイト。

空の変数状態メッセージは書き込まれません。現在のフレームでビヘイビアーに有効なフィールドがない場合、エンコーダーはそのメッセージをロールバックします。

RPC 本体

RPC メッセージには次のものが含まれます。

  • 安定したメソッドハッシュ。
  • 引数の数。
  • エンコードされた引数値。

RPC 専用フレームは有効です。これにより、変数の状態がそのフレームを変更しなかった場合でも、シーンは短いイベントを送信できるようになります。

デバッグ時に確認すること

  • フレーム インデックスが変更された場合、送信者はフレームを生成しています。
  • ペイロード サイズがゼロの場合、同期されたデータは書き込まれません。
  • CRC が失敗した場合は、テクスチャ パスがピクセルを変更しているか、間違った領域を読み取っています。
  • メッセージ数が予想よりも少ない場合は、セットアップ バインディングまたはペイロード容量に注意する必要があります。
  • TX に RPC メッセージがあるが RX にはない場合は、フレーム損失と重複フレームの処理を確認します。

互換性に関する注意事項

ヘッダー サイズは 56 バイトに固定されたままです。予約バイトは将来の互換性のために保持され、現在のエンコーダではゼロとして書き込まれる必要があります。

ペイロード コピーと FEC は、現在のワイヤ形式の一部ではありません。現在のフレームは 1 つのペイロード本体を運びます。