Skip to main content

TSMPDebugCanvas

Use TSMPDebugCanvas to see TSMP status inside Play mode or an uploaded VRChat world.

This is important because Inspector fields are not visible in-game. When a stream fails in VRChat, the debug canvas is usually the fastest way to identify which stage failed.

What to assign

  • Encoder: the sender TSMPEncoder, if this canvas should show TX data.
  • Decoder: the receiver TSMPDecoder, if this canvas should show RX data.
  • Target Text: a Unity UI Text component.

You can show encoder, decoder, or both.

TX fields

FieldMeaning
TX bitrateEstimated outgoing TSMP data rate.
frameCurrent encoder frame index. It should increase while encoding.
payloadUsed payload bytes over usable payload bytes.
msgTotal payload messages written this frame.
varVariable state messages.
rpcRPC messages.
codecSelected codec ID.
sizeOutput frame size.

RX fields

FieldMeaning
RX bitrateEstimated received TSMP data rate.
lossEstimated skipped frame percentage.
validWhether the last decoded frame was usable.
headerWhether the header was valid.
payloadPayload bytes requested by the header.
availablePayload bytes available from the decoded texture.
msgNetwork messages found in the payload.
varVariable values applied.
rpcRPC calls received.
dupFrameDuplicate frames skipped by the decoder.
dupRpcDuplicate RPC calls skipped by the decoder.

Reading common states

DisplayLikely meaning
TX frame increases, payload=0Encoder is running, but no data is selected for sync.
TX payload near capacityReduce synchronized data or increase output capacity.
RX valid=noThe receiver cannot decode the current texture.
header=noThe TSMP header is missing or damaged.
msg=0 on RXA valid frame arrived, but no network messages were decoded.
loss is highThe transport path is dropping or repeating frames.
rpc increases on TX but not RXRPC frames are being lost or decoder bindings do not match.

How to use it while debugging

  1. Confirm TX frame increases.
  2. Confirm TX payload is greater than zero.
  3. Confirm RX header and valid are both yes.
  4. Confirm RX message count is greater than zero.
  5. Confirm receiver objects are active and receive interpolation is not None.

If a step fails, debug that step before moving to the next one.