AlexxIT/go2rtc · error
wyze: failed to enable intercom
Error message
wyze: failed to enable intercom: %w
What it means
Returned by the Wyze Producer's AddTrack when setting up the backchannel (two-way audio). Before negotiating tracks it calls client.StartIntercom() to switch the camera into intercom (talk-back) mode; any failure there is wrapped with this message. Without intercom mode the camera will not accept upstream audio.
Solutions
- Log the wrapped inner error from StartIntercom() to see timeout vs rejection
- Update the camera firmware — some models only support intercom on newer versions
- Close other active streams/apps viewing the camera before retrying, then reconnect
- Confirm the camera model supports two-way audio (talk) in the Wyze app
- Retry the connection; transient TUTK command failures often clear on a fresh session
Example fix
// before
// starting backchannel on a one-way-audio camera model
err := producer.AddTrack(media, codec, track) // fails: intercom unsupported
// after
if !supportsTwoWayAudio(cameraModel) {
return errors.New("camera model does not support backchannel audio")
}
err := producer.AddTrack(media, codec, track) Defensive patterns
Strategy: try-catch
Validate before calling
// Go: only attempt backchannel on known two-way-audio models
if !supportsTwoWayAudio(cameraModel) {
return errors.New("model does not support intercom/backchannel")
} Type guard
func backchannelSupported(model string) bool { return twoWayAudioModels[model] } Try / catch
if err := producer.AddTrack(media, codec, track); err != nil {
if strings.Contains(err.Error(), "failed to enable intercom") {
log.Warn("intercom rejected — retry after closing other streams")
}
return err
} Prevention
- Update Wyze camera firmware before enabling backchannel
- Close other viewers/talk sessions before connecting
- Verify two-way audio works in the Wyze app first
- Retry on transient TUTK command timeouts
When it happens
Trigger: Publishing a backchannel audio track to a Wyze camera stream when StartIntercom() fails: camera firmware rejects the intercom command, TUTK session is not fully established, camera is busy/streaming elsewhere, or the device does not support two-way audio.
Common situations: Older Wyze firmware without intercom support on the given model; camera already in a live view/talk session that blocks the mode switch; unstable network causing the TUTK control command to time out; using a camera model that only supports one-way audio.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- av server not ready
- wyze: no audio codec detected from camera
- wyse: wrong result:
- pcm: unsupported audio format
- waw: unsupported codec
AI-assisted analysis of AlexxIT/go2rtc@c245815e75 (2026-09-07).
Data as JSON: /api/errors/59e4b702dd43e99a.
Report an issue: GitHub.
Appendix: source
Thrown at pkg/wyze/backchannel.go:14
package wyze
import (
"fmt"
"github.com/AlexxIT/go2rtc/pkg/aac"
"github.com/AlexxIT/go2rtc/pkg/core"
"github.com/AlexxIT/go2rtc/pkg/tutk"
"github.com/pion/rtp"
)
func (p *Producer) AddTrack(media *core.Media, codec *core.Codec, track *core.Receiver) error {
if err := p.client.StartIntercom(); err != nil {
return fmt.Errorf("wyze: failed to enable intercom: %w", err)
}
// Get the camera's audio codec info (what it sent us = what it accepts)
tutkCodec, sampleRate, channels := p.client.GetBackchannelCodec()
if tutkCodec == 0 {
return fmt.Errorf("wyze: no audio codec detected from camera")
}
if p.client.verbose {
fmt.Printf("[Wyze] Intercom enabled, using codec=0x%04x rate=%d ch=%d\n", tutkCodec, sampleRate, channels)
}
sender := core.NewSender(media, track.Codec)
// Track our own timestamp - camera expects timestamps starting from 0
// and incrementing by frame duration in microseconds
var timestamp uint32 = 0
samplesPerFrame := tutk.GetSamplesPerFrame(tutkCodec)View on GitHub (pinned to c245815e75)