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
- Call Start (or wait for medias to be probed) on the producer before GetTrack
- Check GetMedias() returns non-nil before requesting tracks
- 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)