VoIP Troubleshooting Guide

One-Way Audio in VoIP Calls

8 min read  ·  Updated April 2026

One-way audio — where one party can hear but the other can't — is one of the most frustrating VoIP problems because the call connects successfully. The SIP signaling worked. The media path didn't. Here's a systematic approach to finding and fixing it.

In this guide

1. How RTP audio routing works

When a SIP call connects, the two endpoints negotiate media addresses in the SDP. The c= line (connection data) and m= line port tell each endpoint where to send RTP packets. If either endpoint sends to the wrong address or port — or if a firewall blocks packets in one direction — you get one-way audio.

The SIP signaling (INVITE, 200 OK, ACK) is completely separate from the RTP media stream. A successful call setup with a working SIP ladder does not guarantee the media path is correct.

2. Which direction is broken?

Before diagnosing, establish which direction has the problem:

In a PCAP, look at the source and destination IP/port of RTP packets. If you only see packets flowing one way, you've confirmed the direction of the problem.

3. Eight common causes

Cause 01
Private IP address in SDP (NAT issue)
The most common cause. One endpoint is behind NAT and advertises its private RFC 1918 address (10.x.x.x, 172.16.x.x, 192.168.x.x) in the SDP c= line. The remote endpoint tries to send RTP to this unreachable private address. The SIP signaling works because it goes through a proxy that handles NAT, but the media goes directly between endpoints.
Cause 02
Firewall blocking RTP in one direction
A stateful firewall allows outbound RTP but blocks inbound. Common when one endpoint is behind a corporate firewall that only allows established connections. The endpoint can send audio but the return path is blocked.
Cause 03
Incorrect media address after re-INVITE
A re-INVITE (for hold, transfer, or codec change) updates the SDP with a new media address. If the re-INVITE SDP contains a wrong IP or port — common after a hold/resume sequence — the RTP path changes incorrectly for one direction.
Cause 04
SBC or proxy not updating media addresses
A Session Border Controller or B2BUA rewrites SDP but does so incorrectly — inserting its own IP for one direction but leaving the original IP for the other. The SBC becomes a RTP relay but only proxies traffic one way.
Cause 05
SRTP key mismatch
Both sides are using SRTP but with different crypto keys or cipher suites. One direction decrypts successfully (the SRTP negotiation happened to work for that direction) but the other direction fails silently — the packets arrive but can't be decrypted.
Cause 06
SDP direction attribute mismatch
One endpoint has a=sendonly or a=recvonly in its SDP, making the call intentionally one-directional. This is correct behavior for hold, but if it persists after resume it means the hold/resume re-INVITE didn't properly restore a=sendrecv.
Cause 07
RTP port mismatch
The SDP m= line port doesn't match the actual port the endpoint is listening on. Can happen when an endpoint updates its listening port after the initial SDP negotiation, or when a load balancer changes the port mapping.
Cause 08
Asymmetric codec negotiation
Both sides negotiated successfully but are sending different codecs in each direction. One endpoint sends G.711 but receives G.729 — or vice versa — and one side can't decode what it's receiving even though it's receiving packets.

4. NAT — the most common culprit

NAT causes one-way audio when an endpoint behind NAT advertises its private IP in the SDP. The fix depends on your architecture:

Option A — STUN (best for IP phones and softphones)

Configure your endpoint to use a STUN server. STUN discovers the public IP/port and the endpoint uses that in the SDP instead of the private IP. Works well for simple NAT but not symmetric NAT.

Option B — SBC with media anchoring

Configure a Session Border Controller to anchor all media through itself. The SBC rewrites both the originating and terminating SDP to point to itself, eliminating NAT traversal issues for both endpoints.

Option C — nat=yes / localnet in Asterisk

In Asterisk, set nat=yes (chan_sip) or configure local_net in pjsip.conf to instruct Asterisk to rewrite the SDP c= line with its external IP. Set externip or externhost to your public IP address.

How to confirm NAT is the issue

In your SIP trace, find the SDP in the INVITE or 200 OK. Check the c= line. If it contains a private IP (10.x, 172.16-31.x, 192.168.x) and the remote endpoint is on a different network, that's your problem.

v=0 o=- 1234567890 1234567890 IN IP4 192.168.1.100 <-- private IP in SDP s=- c=IN IP4 192.168.1.100 <-- remote endpoint can't reach this m=audio 10000 RTP/AVP 0

5. Diagnosing from a PCAP

A PCAP gives you the most definitive diagnosis for one-way audio. Look for:

  1. RTP stream presence — filter on rtp in Wireshark. Do you see two streams or one? If only one stream exists, the sending side is the problem.
  2. Destination addresses — where are the RTP packets going? Cross-reference against the SDP c= lines. If the destination matches a private IP that's unreachable, NAT is the cause.
  3. RTCP receiver reports — RTCP RR packets contain jitter, packet loss, and fraction lost statistics. A high fraction-lost in one direction points to the broken direction.
  4. Packet timestamps — gaps in RTP timestamps indicate packets are being dropped somewhere in the path. Consistent gaps suggest a firewall rate limit or buffer overflow.

6. Fix checklist

7. Analyze your trace automatically

Upload your PCAP to SIPSymposium and get an instant diagnosis — private IP detection in SDP, RTP stream direction analysis, RTCP statistics, and SRTP validation all in one report.

Dealing with one-way audio right now?

Upload your PCAP or paste your SIP trace. SIPSymposium analyzes both the SDP negotiation and RTP streams to pinpoint exactly which direction is broken and why.

Analyze my trace Create free account
Related guides