[asterisk-users] Asterisk not using common codec between (SIP) endpoints
Andreas Wehrmann
a.wehrmann at yandex.com
Thu Oct 3 06:13:59 CDT 2019
Hello people,
I've ran into two problem that I can't seem to be able to solve on my own.
Here's my scenario (running Asterisk 13.28.1):
In short: - Asterisk behaves unexpectedly (at least to me) when
negotiating between endpoints
that have a different but intersecting set of codecs
(preventing direct media flow).
- Also, when an endpoint sends RTP with an unexpected (but
internally hardcoded) payload type,
Asterisk seems to get "confused" with what codec is
supposed to be active (which seems to break transcoding).
I've got a couple of phones (supported codecs are: g722,alaw,ulaw (in
that order))
and a "special" media gateway which supports alaw, ulaw only.
What I mean by "special" is, that it sends status information via RTP
payload type 102;
this is hardcoded and I cannot change it; also that thing sends it
regardless
of what was negotiated via SDP (yes, it's stupid and annoying to deal with).
What I actually wanted to test was to see whether Asterisk would
correctly negotiate codecs
when making calls between the different kinds of participants (phones
and gateways).
Here's what I tested:
- Calls between phones (OK)
-- phone01 calls phone02 (phone01 offer: g722, alaw, ulaw)
-- phone02 accepts (Asterisk/phone02 offer/answer: g722, alaw, ulaw)
-- Asterisk sends reinvite to both to establish direct media flow
(codec: g722)
-- OKAY - this is exactly what i would expect
- Phone calls mediagateway; mediagateway sends special RTP (NOK:
Asterisk attempts to transcode and RTP engine seems to get confused)
-- phone01 calls mediagateway (phone01 offer: g722, alaw, ulaw)
-- mediagateway accepts call (Asterisk offer: alaw, ulaw | mediagateway
answer: alaw)
-- Asterisk accepts call from phone01 (Asterisk answer: g722, alaw, ulaw)
-- Asterisk attempts to transcodes between g722 and alaw
--> My expectation here would be for Asterisk to reduce the set of
codecs in the answer to phone01 to alaw only,
since this would enable direct media flow between the endpoints.
But even if it accepts the call like I described above,
I would expect Asterisk to reinvite the calls later
to use alaw only and get out of the way to enable direct media flow.
-- After mediagateway accepts the call, it sends a few status messages
via RTP PT 102;
this seems to confuse the RTP engine in Asterisk (see the console
output at the end of this mail)
which also seems to break transcoding, because audio doesn't work in
either direction.
My questions are:
- Is there a way to make Asterisk always try to get out of the media path?
I thought direct_media=yes and an overlapping set of codecs would
suffice.
- Even if direct_media is disabled: Is there a way to make Asterisk
always use a common codec between SIP endpoints,
so it doesn't need to transcode?
- When Asterisk receives unexpected RTP packets or RTP packets of an
unexpected type in a session,
shouldn't it just ignore them?
This is what I observed in older Asterisk versions (very old, like 1.4)
where it would simply print a warning about an unknown/unhandled
payload type.
I'll attach my pjsip.conf, extensions.ael and a tcpdump that shows my
phone (10.137.8.20)
calling the mediagateway (10.254.0.221) via Asterisk (10.137.8.19).
The rest of the configs are the default configs created with "make
basic-pbx".
I do hope, I'm not missing something obvious here...
A few additions: I ran the tests with Asterisk 16.5.1 also, the results are:
- Calls between phones work as expected, G722 is used and Asterisks
reinvites
to establish direct media flow between the phones.
- When a phone calls a mediagateway, the results are as above with the
exception of having audio in both directions.
The status messages sent via RTP PT 102 do not seem to confuse
Asterisk 16.5.1.
- I also ran this test: I have two endpoints (direct_media=yes) each
with allowed codecs
set to ulaw, alaw on one endpoint and alaw, ulaw (reverse order) set
on the other endpoint.
When endpoint A calls B and offers codecs (in that order) ulaw, alaw
and endpoint B accepts alaw only,
Asterisk uses ulaw for the call from A and alaw in the call to B.
Like I said above: I really hope I'm not missing something obvious.
I need Asterisk to use the same codec in both calls (if there is an
overlapping set)
and try to get out of the way by establishing a direct media path if
somehow possible.
Best Regards,
Andreas
NOTE: The following is the console output from Asterisk 13 when the
mediagateway answers and sends RTP PT 102 at the beginning of the call.
[Oct 2 07:24:55] WARNING[23961][C-00000000]: translate.c:490
ast_translator_build_path: No translator path: (ending codec is not valid)
[Oct 2 07:24:55] WARNING[23961][C-00000000]: translate.c:490
ast_translator_build_path: No translator path: (ending codec is not valid)
[Oct 2 07:24:55] WARNING[23961][C-00000000]: translate.c:490
ast_translator_build_path: No translator path: (starting codec is not valid)
[Oct 2 07:24:55] WARNING[23961][C-00000000]: translate.c:490
ast_translator_build_path: No translator path: (ending codec is not valid)
[Oct 2 07:24:55] WARNING[23961][C-00000000]: translate.c:490
ast_translator_build_path: No translator path: (ending codec is not valid)
[Oct 2 07:24:55] WARNING[23961][C-00000000]: translate.c:490
ast_translator_build_path: No translator path: (starting codec is not valid)
[Oct 2 07:24:55] WARNING[23961][C-00000000]: translate.c:490
ast_translator_build_path: No translator path: (ending codec is not valid)
[Oct 2 07:24:55] WARNING[23961][C-00000000]: translate.c:490
ast_translator_build_path: No translator path: (ending codec is not valid)
[Oct 2 07:24:55] WARNING[23961][C-00000000]: translate.c:490
ast_translator_build_path: No translator path: (starting codec is not valid)
[Oct 2 07:24:55] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:55] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:55] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:55] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:55] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:55] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:55] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:55] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:55] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:55] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:55] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:55] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:55] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:55] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:55] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:55] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:55] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:55] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:55] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:55] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:55] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:55] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:55] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:55] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:55] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:55] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:56] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:56] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:56] WARNING[23961][C-00000000]: chan_pjsip.c:856
chan_pjsip_write: Channel PJSIP/boslwzldi21-00000001 asked to send alaw
frame when native formats are (siren7)
(rd:alaw->slin16;(alaw at 8000)->(slin at 8000)->(slin at 16000)
wr:slin16->alaw;(slin at 16000)->(slin at 8000)->(alaw at 8000))
[Oct 2 07:24:56] WARNING[23961][C-00000000]: channel.c:5751 set_format:
Unable to find a codec translation path: (siren7) -> (alaw)
[Oct 2 07:24:56] WARNING[23961][C-00000000]: channel.c:5751 set_format:
Unable to find a codec translation path: (alaw) -> (siren7)
-------------- next part --------------
context internal {
96 => {
Dial(PJSIP/boslwzldi21);
}
100 => {
Dial(PJSIP/andytel);
}
102 => {
Dial(PJSIP/boslwztel02);
}
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: phone_calls_mediagateway_sip_rtp_asterisk13.pcap
Type: application/vnd.tcpdump.pcap
Size: 8179 bytes
Desc: not available
URL: <http://lists.digium.com/pipermail/asterisk-users/attachments/20191003/c242c99c/attachment.pcap>
-------------- next part --------------
;================================ TRANSPORTS ==
[transport-udp]
type = transport
protocol = udp
bind = 10.137.8.19
;================================ ENDPOINTS ==
[endpoint-basic]
type=endpoint
context = internal
disallow = all
allow = g722,alaw,ulaw
direct_media = yes
[endpoint-radio]
type=endpoint
context = internal
disallow = all
allow = alaw,ulaw
direct_media = yes
[auth-userpass](!)
type = auth
auth_type = userpass
password = SnomSecret
realm = A
[aor-single-reg](!)
type = aor
max_contacts = 1
remove_existing = yes
qualify_frequency = 60
;============== RADIO GATEWAYS
[boslwzldi21](endpoint-radio)
aors=boslwzldi21
[boslwzldi21](aor-single-reg)
contact=sip:10.254.0.221
[boslwzldi21]
type = identify
endpoint = boslwzldi21
match = 10.254.0.221
;============= SNOM
[andytel](endpoint-basic)
;auth=andytel
aors=andytel
[andytel](aor-single-reg)
[andytel](auth-userpass)
username=andytel
[boslwztel02](endpoint-basic)
;auth=auth-userpass
aors=boslwztel02
[boslwztel02](aor-single-reg)
[boslwztel02](auth-userpass)
username=boslwztel02
More information about the asterisk-users
mailing list