AlexxIT/go2rtc · error

get track from none state

Error message

get track from none state

What it means

Producer.GetTrack's state-machine guard: the producer is still in stateNone (its medias have not been probed yet), so requesting a track is premature. GetTrack requires the producer to have advanced at least to stateMedias before tracks can be matched or fetched from the underlying connection.

Solutions

  1. Call Start (or wait for medias to be probed) on the producer before GetTrack
  2. Check GetMedias() returns non-nil before requesting tracks
  3. Use WaitMedias-style synchronization if callers race the probe
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at internal/streams/producer.go:90 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/edae5d8ff309e98f. Report an issue: GitHub.

Appendix: source

Thrown at internal/streams/producer.go:90

}

func (p *Producer) GetMedias() []*core.Media {
	p.mu.Lock()
	defer p.mu.Unlock()

	if p.conn == nil {
		return nil
	}

	return p.conn.GetMedias()
}

func (p *Producer) GetTrack(media *core.Media, codec *core.Codec) (*core.Receiver, error) {
	p.mu.Lock()
	defer p.mu.Unlock()

	if p.state == stateNone {
		return nil, errors.New("get track from none state")
	}

	for _, track := range p.receivers {
		if track.Codec == codec {
			return track, nil
		}
	}

	track, err := p.conn.GetTrack(media, codec)
	if err != nil {
		return nil, err
	}

	p.receivers = append(p.receivers, track)

	if p.state == stateMedias {
		p.state = stateTracks
	}

View on GitHub (pinned to c245815e75)