AlexxIT/go2rtc · error

tuya: no receivers

Error message

tuya: no receivers

What it means

Tuya Start guard: c.conn.Receivers is empty — no remote tracks have been attached to the WebRTC connection yet, so there is nothing to start streaming. Start was called before the offer/answer exchange produced receivers, or track negotiation failed silently.

Solutions

  1. Wait for the connection to be established and tracks negotiated before Start
  2. Check that the Tuya device actually sends audio/video tracks
  3. Re-dial the client if negotiation stalled
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at pkg/tuya/client.go:416 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of AlexxIT/go2rtc@c245815e75 (2026-09-07). Data as JSON: /api/errors/e0c7cf801db5cfdc. Report an issue: GitHub.

Appendix: source

Thrown at pkg/tuya/client.go:416

			}
		}

	default:
		sender.Handler = func(packet *rtp.Packet) {
			c.conn.Send += packet.MarshalSize()
			_ = localTrack.WriteRTP(payloadType, packet)
		}
	}

	sender.HandleRTP(track)
	c.conn.Senders = append(c.conn.Senders, sender)

	return nil
}

func (c *Client) Start() error {
	if len(c.conn.Receivers) == 0 {
		return errors.New("tuya: no receivers")
	}

	var video, audio *core.Receiver
	for _, receiver := range c.conn.Receivers {
		if receiver.Codec.IsVideo() {
			video = receiver
		} else if receiver.Codec.IsAudio() {
			audio = receiver
		}
	}

	if c.videoSSRC != nil {
		c.setHandler(*c.videoSSRC, func(packet *rtp.Packet) {
			if video != nil {
				video.WriteRTP(packet)
			}
		})
	}

View on GitHub (pinned to c245815e75)