AlexxIT/go2rtc · error
alsa: can't convert to
Error message
alsa: can't convert %s to %s
What it means
Guard in Playback.AddTrack: no PCM transcode handler exists for converting the incoming track codec to the codec the sound card negotiated (rate/channels near the source). The unsupported source codec is at fault.
Solutions
- Send a codec supported by the playback path (PCM) or one with a known converter
- Update the transcode codec table to support this source codec
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at pkg/alsa/playback_linux.go:60 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/49d1f302326930cf.
Report an issue: GitHub.
Appendix: source
Thrown at pkg/alsa/playback_linux.go:60
}
func (p *Playback) AddTrack(media *core.Media, codec *core.Codec, track *core.Receiver) error {
src := track.Codec
dst := &core.Codec{
Name: core.CodecPCML,
ClockRate: p.dev.GetRateNear(src.ClockRate),
Channels: p.dev.GetChannelsNear(src.Channels),
}
sender := core.NewSender(media, dst)
sender.Handler = func(pkt *rtp.Packet) {
if n, err := p.dev.Write(pkt.Payload); err == nil {
p.Send += n
}
}
if sender.Handler = pcm.TranscodeHandler(dst, src, sender.Handler); sender.Handler == nil {
return fmt.Errorf("alsa: can't convert %s to %s", src, dst)
}
// typical card support:
// - Formats: S16_LE, S32_LE
// - ClockRates: 8000 - 192000
// - Channels: 2 - 10
err := p.dev.SetHWParams(device.SNDRV_PCM_FORMAT_S16_LE, dst.ClockRate, byte(dst.Channels))
if err != nil {
return err
}
sender.HandleRTP(track)
p.Senders = append(p.Senders, sender)
return nil
}
func (p *Playback) Start() (err error) {
return p.closed.Wait()View on GitHub (pinned to c245815e75)