router-for-me/CLIProxyAPI · error

create upstream audio track: %w

Error message

create upstream audio track: %w

What it means

Same constructor as error 326 but for the upstream (OpenAI-facing) track toOpenAI. NewTrackLocalStaticRTP with the shared opusCodec capability; failure semantics are identical — malformed capability or a pion validation change. Not influenced by network or negotiation state.

Source

Thrown at internal/client/codex/live/media.go:344

		return nil, "", fmt.Errorf("set downstream WebRTC offer: %w", errRemote)
	}

	toDesktop, errTrack := webrtc.NewTrackLocalStaticRTP(opusCodec, "audio", "codex-live")
	if errTrack != nil {
		_ = session.Close()
		return nil, "", fmt.Errorf("create downstream audio track: %w", errTrack)
	}
	downstreamSender, errTrack := downstream.AddTrack(toDesktop)
	if errTrack != nil {
		_ = session.Close()
		return nil, "", fmt.Errorf("add downstream audio track: %w", errTrack)
	}
	go drainRTCP("downstream", downstreamSender, session.done)

	toOpenAI, errTrack := webrtc.NewTrackLocalStaticRTP(opusCodec, "audio", "codex-live")
	if errTrack != nil {
		_ = session.Close()
		return nil, "", fmt.Errorf("create upstream audio track: %w", errTrack)
	}
	upstreamSender, errTrack := upstream.AddTrack(toOpenAI)
	if errTrack != nil {
		_ = session.Close()
		return nil, "", fmt.Errorf("add upstream audio track: %w", errTrack)
	}
	go drainRTCP("upstream", upstreamSender, session.done)

	downstream.OnTrack(func(track *webrtc.TrackRemote, _ *webrtc.RTPReceiver) {
		if !strings.EqualFold(track.Codec().MimeType, webrtc.MimeTypeOpus) {
			return
		}
		go relayRTP("downstream-to-upstream", track, toOpenAI, session.done)
	})
	upstream.OnTrack(func(track *webrtc.TrackRemote, _ *webrtc.RTPReceiver) {
		if !strings.EqualFold(track.Codec().MimeType, webrtc.MimeTypeOpus) {
			return
		}

View on GitHub (pinned to 78f0c4079e)

Solutions

  1. Restore opusCodec constants (MimeTypeOpus, 48000, 2 channels)
  2. Pin pion/webrtc version; treat occurrence as a build/code defect
Defensive patterns

Strategy: validation

Prevention

When it happens

Trigger: Identical to 326: modified opusCodec constant or pion/webrtc version behavior change.

Common situations: Unreachable with shipped constants; a defensive error path kept for API-contract safety.

Related errors


AI-assisted analysis of router-for-me/CLIProxyAPI@78f0c4079e (2026-08-15). Data as JSON: /api/errors/2e4e60f8d67e667f. Report an issue: GitHub.