Asterisk And Linphone

Home » Asterisk Users » Asterisk And Linphone
Asterisk Users 6 Comments

Hi all – I am using asterisk 13.27.0 with Linphone. I turned off all codes on linphone except the one I want to try. For example:
opus and speex (so only one enabled at a time). Then did this same on asterisk for the linphone extension. disallow=all allow=speex

(for example).

Then I place my call and the call fails. if I enable something like gsm, ulaw, alaw the call works fine. Why does the call fail with opus and speex ?
Thanks,

Jerry

6 thoughts on - Asterisk And Linphone

  • Show us the SIP INVITE from Linphone and the response from Asterisk where they negotiate codecs – that should tell us why they disagree.

    Antony.


    The lottery is a tax for people who can’t do maths.

    Please reply to the list;
    please *don’t* CC me.

  • I think this is what your looking for:

    Found RTP audio format 119
    Found audio description format speex for ID 119
    Capabilities: us – (speex|speex16|speex32|g722|ulaw|alaw|gsm), peer –
    audio=(speex32)/video=(nothing)/text=(nothing), combined – (speex32)
    Non-codec capabilities (dtmf): us – 0x1 (telephone-event|), peer – 0x0
    (nothing), combined – 0x0 (nothing)
    Peer audio RTP is at port 192.168.1.176:7078
    [Jul 5 09:55:34] WARNING[19832]: channel.c:5751 set_format: Unable to find a codec translation path: (speex32) -> (speex)
    ^M^[[Kdevgeis*CLI> ^M^[[0K[Jul 5 09:55:34] WARNING[19832]: channel.c:5751
    set_format: Unable to find a codec translation path: (speex) -> (speex32)

    My linphone side only has speex@32K enabled.

    My extension definition has:
    disallow=all allow=speex allow=speex16
    allow=speex32
    allow=g722
    allow=ulaw allow=alaw allow=gsm

    It looks like its the codec translation ? So then I enabled speex and speex32 on Linphone…. Got past that – I presume it will use speex32 for audio…

    But then I am trying to place that call in a conference (confbridge) and I
    get this error:
    Unable to find a codec translation path: (slin) -> (speex)
    so I think then it hangs up.

    What do I do about that ? – thanks

    Jerry

  • Indeed, it was.

    You can always see which codec is in use by doing a SIPpacket capture and looking at the above negotiation exchange to see what got agreed on.

    Try “core show translation” on your Asterisk command line and check that the table has an entries in both directions for speex (left) to slin (top) and slin (left) to speex (top).

    The numbers tell you how many microseconds *your* server takes to transcode 1
    second of audio between the two codecs.

    You can also try “core show translation paths speex” to get a list of the codecs which can and cannot be converted to, with a guide to the method used for trancoding that combination where possible.

    Antony.


    All matter in the Universe can be placed into one of two categories:

    1. Things which need to be fixed.
    2. Things which need to be fixed once you’ve had a few minutes to play with them.

    Please reply to the list;
    please *don’t* CC me.

  • I have no speex translation
    ulaw alaw gsm g726 g726aal2 adpcm slin8 slin12 slin16 slin24
    slin32 slin44 slin48 slin96 slin192 lpc10 ilbc g722 testlaw
    ulaw – 9150 15000 15000 15000 15000 9000 17000 17000 17000
    17000 17000 17000 17000 17000 15000 15000 17250 15000
    alaw 9150 – 15000 15000 15000 15000 9000 17000 17000 17000
    17000 17000 17000 17000 17000 15000 15000 17250 15000
    gsm 15000 15000 – 15000 15000 15000 9000 17000 17000 17000
    17000 17000 17000 17000 17000 15000 15000 17250 15000
    g726 15000 15000 15000 – 15000 15000 9000 17000 17000 17000
    17000 17000 17000 17000 17000 15000 15000 17250 15000
    g726aal2 15000 15000 15000 15000 – 15000 9000 17000 17000 17000
    17000 17000 17000 17000 17000 15000 15000 17250 15000
    adpcm 15000 15000 15000 15000 15000 – 9000 17000 17000 17000
    17000 17000 17000 17000 17000 15000 15000 17250 15000
    slin8 6000 6000 6000 6000 6000 6000 – 8000 8000 8000
    8000 8000 8000 8000 8000 6000 6000 8250 6000
    slin12 14500 14500 14500 14500 14500 14500 8500 – 8000 8000
    8000 8000 8000 8000 8000 14500 14500 14000 14500
    slin16 14500 14500 14500 14500 14500 14500 8500 8500 – 8000
    8000 8000 8000 8000 8000 14500 14500 6000 14500
    slin24 14500 14500 14500 14500 14500 14500 8500 8500 8500 –
    8000 8000 8000 8000 8000 14500 14500 14500 14500
    slin32 14500 14500 14500 14500 14500 14500 8500 8500 8500 8500
    – 8000 8000 8000 8000 14500 14500 14500 14500
    slin44 14500 14500 14500 14500 14500 14500 8500 8500 8500 8500
    8500 – 8000 8000 8000 14500 14500 14500 14500
    slin48 14500 14500 14500 14500 14500 14500 8500 8500 8500 8500
    8500 8500 – 8000 8000 14500 14500 14500 14500
    slin96 14500 14500 14500 14500 14500 14500 8500 8500 8500 8500
    8500 8500 8500 – 8000 14500 14500 14500 14500
    slin192 14500 14500 14500 14500 14500 14500 8500 8500 8500 8500
    8500 8500 8500 8500 – 14500 14500 14500 14500
    lpc10 15000 15000 15000 15000 15000 15000 9000 17000 17000 17000
    17000 17000 17000 17000 17000 – 15000 17250 15000
    ilbc 15000 15000 15000 15000 15000 15000 9000 17000 17000 17000
    17000 17000 17000 17000 17000 15000 – 17250 15000
    g722 15600 15600 15600 15600 15600 15600 9600 17500 9000 17000
    17000 17000 17000 17000 17000 15600 15600 – 15600
    testlaw 15000 15000 15000 15000 15000 15000 9000 17000 17000 17000
    17000 17000 17000 17000 17000 15000 15000 17250 –

    core show translation paths speex
    — Translation paths SRC Codec “speex” sample rate 8000 –

  • I suspect you’re right, but this is now beyond my expertise.

    I have an Asterisk 13.14.1 system here installed from Debian packages and I
    have the following:

    speex:8000 To amr:8000 : (speex@8000)->(slin@8000)->(amr@8000)
    speex:8000 To amrwb:16000 : (speex@8000)->(slin@8000)->(slin@16000)-
    speex:8000 To g723:8000 : No Translation Path speex:8000 To ulaw:8000 : (speex@8000)->(slin@8000)->(ulaw@8000)
    speex:8000 To alaw:8000 : (speex@8000)->(slin@8000)->(alaw@8000)
    speex:8000 To gsm:8000 : (speex@8000)->(slin@8000)->(gsm@8000)
    speex:8000 To g726:8000 : (speex@8000)->(slin@8000)->(g726@8000)
    speex:8000 To g726aal2:8000 : (speex@8000)->(slin@8000)->(g726aal2@8000)
    speex:8000 To adpcm:8000 : (speex@8000)->(slin@8000)->(adpcm@8000)
    speex:8000 To slin:8000 : (speex@8000)->(slin@8000)
    speex:8000 To slin:12000 : (speex@8000)->(slin@8000)->(slin@12000)
    speex:8000 To slin:16000 : (speex@8000)->(slin@8000)->(slin@16000)
    speex:8000 To slin:24000 : (speex@8000)->(slin@8000)->(slin@24000)
    speex:8000 To slin:32000 : (speex@8000)->(slin@8000)->(slin@32000)
    speex:8000 To slin:44100 : (speex@8000)->(slin@8000)->(slin@44100)
    speex:8000 To slin:48000 : (speex@8000)->(slin@8000)->(slin@48000)
    speex:8000 To slin:96000 : (speex@8000)->(slin@8000)->(slin@96000)
    speex:8000 To slin:192000 : (speex@8000)->(slin@8000)->(slin@192000)
    speex:8000 To lpc10:8000 : (speex@8000)->(slin@8000)->(lpc10@8000)
    speex:8000 To g729:8000 : No Translation Path speex:8000 To speex:16000 : (speex@8000)->(slin@8000)->(slin@16000)-
    speex:8000 To speex:32000 : (speex@8000)->(slin@8000)->(slin@32000)-
    speex:8000 To ilbc:8000 : No Translation Path speex:8000 To g722:16000 : (speex@8000)->(slin@8000)->(g722@16000)
    speex:8000 To siren7:16000 : No Translation Path speex:8000 To siren14:32000 : No Translation Path speex:8000 To testlaw:8000 : (speex@8000)->(slin@8000)->(testlaw@8000)
    speex:8000 To g719:48000 : No Translation Path speex:8000 To opus:48000 : No Translation Path speex:8000 To none:8000 : No Translation Path speex:8000 To silk:8000 : No Translation Path speex:8000 To silk:12000 : No Translation Path speex:8000 To silk:16000 : No Translation Path speex:8000 To silk:24000 : No Translation Path

    Antony.


    “There has always been an underlying argument that we should open up our source code more broadly. The fact is that we are learning from open source and we are opening our code more broadly through Shared Source.

    Is there value to providing source code? The answer is unequivocally yes.”

    – Jason Matusow, head of Microsoft’s Shared Source Program, in response to leaks of Windows source code on the Internet.

    Please reply to the list;
    please *don’t* CC me.

  • My self-compiled Asterisk also shows that speex dependencies are not installed

    Speex Coder/Decoder

    Depends on: speex(E), speex_preprocess(E)
    Can use: speexdsp(E)

    You’ll need to installed the dependencies and re-compile.

    Doug