Codec mismatch with your carrier: how to fix it
A codec mismatch shows up as no audio or a 488 rejection. Pin the same codec on both ends and the call connects cleanly.
A codec mismatch happens when your server and your carrier cannot agree on an audio format for the call. The fix is to pin both ends to the same codec, almost always ulaw, with disallow=all then allow=ulaw on the carrier peer.
What a codec is and why both ends must match
A Codec is the rule for turning voice into the packets that travel over RTP. When a call sets up, your server offers a list of codecs it supports and the Carrier picks one it also supports. If the lists do not overlap, there is nothing to negotiate and the call either rejects or connects with silence.
- G.711 codec (its two flavors are ulaw in North America and alaw in much of the rest of the world) is uncompressed, high quality, and the safe default almost every carrier supports.
- G.729 codec is compressed to save bandwidth. It sounds slightly worse and historically carried a license, so not every carrier or server enables it.
How the symptoms show up
Codec problems have a couple of classic signatures:
- A 488 Not Acceptable Here rejection. The carrier is telling you it shares no codec with your offer, so the call never connects.
- One-way audio or total silence on an otherwise connected call. The call answered, but the agreed media format is not actually flowing through. This One-way audio pattern often points at codec or NAT trouble rather than the trunk being down.
The 488 is the cleaner failure to diagnose, because the carrier is telling you exactly why it rejected the call. Silence is trickier: the signaling succeeded, so everything looks fine in your logs, but no usable audio path was ever set up. Both trace back to the same root cause of two ends that never lined up on a shared format.
The negotiation, and where it breaks
Here is the decision the two sides make on every call:
flowchart TD
A[VICIdial offers codecs] --> B{Shared codec?}
B -->|Yes ulaw on both| C[Call connects with audio]
B -->|No overlap| D[488 Not Acceptable]
B -->|Different codec each side| E[Transcode]
E --> F[Extra CPU cost]
E --> CAligning the codecs
On the carrier's Account Entry, the two lines that decide everything are disallow=all and allow=ulaw. The first clears the codec list so nothing is offered by default; the second adds exactly one. That way you offer the carrier a single codec it is guaranteed to accept, and there is nothing to mis-negotiate. If your carrier runs alaw (common outside North America) use allow=alaw instead. Set the same one on both the SIP peer facing the carrier and anywhere else in the path.
After you change the codec lines, save and wait about a minute for the conf files to regenerate, then place a test call. If the 488 clears and you get clean two-way audio, the mismatch is fixed. The Account Entry is also where you set DTMF mode and host; for the full breakdown of that block see the carrier account entry guide.
Codecs are one detail in getting a carrier working. For trunks, dialplans, and routing together, read our VICIdial carrier integration guide.
Bring your own carrier and we will hand you a tuned VICIdial server to point it at, live in under 40 seconds. See our plans to get going.
About VICIfast LLC
VICIfast LLC operates a managed VICIdial hosting + BYOI service for outbound and inbound call centers. We run the dialers, the carriers, the recordings pipeline, and the compliance plumbing so operators don’t have to.
Citing this article
VICIfast Engineering. “Codec mismatch with your carrier: how to fix it”. VICIfast LLC, June 24, 2026. Retrieved from https://vicifast.com/blog/vicidial-carrier-codec-mismatch
Have questions?
Related posts
You might be interested in
VICIfast newsletter
Liked this? Get the next one in your inbox.
We ship the kind of stuff you just read — concrete, numbers-first, no drip. One email when a new post goes live. Unsubscribe in one click.
Comments
No comments yet — be the first.