One-Way Audio Issue — SIP Softphone (UDP) to WebRTC Client (WSS) — Asterisk Setup

Hey everyone,

I’ve spent quite some time setting up Asterisk with both SIP Softphones (UDP) and WebRTC Clients (WSS) — the signaling and call setup all work fine, but I’m stuck on a classic one-way audio problem and I’d appreciate help from the community.

:brain: Problem Summary:

  • Calls between WebRTC Client (WSS) and SIP Softphone (UDP) get established.
  • Audio Flow:
    • WebRTC → SIP Softphone: :white_check_mark: audio is heard on the softphone.
    • SIP Softphone → WebRTC: :cross_mark: no audio is heard on the WebRTC side.
[global]
type = global
debug = yes

[general]
udp_bind = 0.0.0.0:5060
tcp_bind = 0.0.0.0:5060
tls_bind = 0.0.0.0:5061
websocket_write_timeout = 100

[transport-udp]
type = transport
protocol = udp
bind = 0.0.0.0:5060
external_media_address = xxx.xxx.xx.xx
external_signaling_address = xxx.xxx.xx.xx
local_net = 10.0.0.0/24
allow_reload = yes

[arav]
type = endpoint
context = demo
disallow = all
allow = opus,ulaw,alaw
auth = arav-auth
aors= arav
transport = transport-udp
direct_media=no
rewrite_contact=yes
rtp_symmetric=yes
force_rport=yes

[arav-auth]
type=auth
auth_type = userpass
username = arav
password = 12345

[arav]
type = aor
max_contacts = 10000

[tatatele]
type = registration
outbound_auth = tatatele_auth
server_uri = sip:xx.xxx.xxx.xx:5111
client_uri = sip:xxxxxxxxxxx@xx.xxx.xxx.xx
contact_user = 00919240201420
retry_interval = 60

[tatatele_auth]
type = auth
auth_type = userpass
username = 00919240201420
password = 1234

[tatatele_aor]
type = aor
contact = sip:xx.xxx.xxx.xx:5111

[tatatele_endpoint]
type = endpoint
context = from-external
transport = transport-udp
disallow = all
allow = ulaw,alaw
outbound_auth = tatatele_auth
aors = tatatele_aor
direct_media = no
rtp_symmetric = yes
force_rport = yes
rewrite_contact = yes

[tatatele_identify]
type = identify
endpoint = tatatele_endpoint
match = xx.xxx.xxx.xxx

[transport-tls]
type=transport
protocol=tls
bind=0.0.0.0:5061

[transport-wss]
type = transport
protocol = wss
bind = 0.0.0.0:8089
external_media_address = xxx.xxx.xx.xx
external_signaling_address = xxx.xxx.xx.xx
local_net = 10.0.0.0/24
allow_reload = yes

[webrtc]
type = aor
max_contacts = 10
remove_existing = yes

[webrtc_auth]
type = auth
auth_type = userpass
username = webrtc
password = 12345

[webrtc]
type=endpoint
aors = webrtc
auth = webrtc_auth
dtls_auto_generate_cert = no
webrtc = yes
rtp_symmetric=yes
force_rport=yes
rewrite_contact=yes
ice_support = yes
rtcp_mux = yes
context = webrtc
disallow = all
allow = opus,ulaw,alaw
media_encryption = dtls
transport = transport-wss
media_use_received_transport = yes
direct_media = no
dtls_verify = fingerprint
dtls_setup = actpass

RTP Configuratio FIle

[general]
rtpstart=20000
rtpend=20009
icesupport=yes
stunaddr=stun.l.google.com:19302

How many calls are active, and how many were attempted recently, but are inactive. Five current or recent call legs is extremely small!

If that isn’t the problem, you will need logs to show where the media is getting lost.

This:

should not, normally, be the same as:

I don’t think this does anything.