[asterisk-bugs] [JIRA] (ASTERISK-25579) Outgoing Packetization Time (Speex, AMR, Opus, …)

Alexander Traud (JIRA) noreply at issues.asterisk.org
Fri Nov 20 08:09:33 CST 2015


Alexander Traud created ASTERISK-25579:
------------------------------------------

             Summary: Outgoing Packetization Time (Speex, AMR, Opus, …)
                 Key: ASTERISK-25579
                 URL: https://issues.asterisk.org/jira/browse/ASTERISK-25579
             Project: Asterisk
          Issue Type: Bug
      Security Level: None
          Components: Codecs/codec_speex, Codecs/General
    Affects Versions: 13.6.0, 11.20.0
            Reporter: Alexander Traud
            Severity: Minor


Since Asterisk 13, an ast_translator {{codecs/codec_*}} does not know the amount of frames to be put into one RTP payload packet in its routine frameout. However, this is required when the packetization time (in SIP/SDP: ptime) is not the default one.

For example, when a ptime of 60ms is negotiated for Speex, Asterisk should send 60ms in one RTP packet. Currently, Asterisk sends three times 20ms.

This affects all (only) those formats which cannot be smoothed:
* Asterisk 11, see res/res_rtp_asterisk.c:ast_rtp_write
* Asterisk 13, see main/codec_builtin.c; all codecs without ".smooth = 1"

With those formats, ast_format_can_be_smoothed(.) returns 0, because the format uses
(A) variable bit-rate (vbr) or
(B) several modes with different bit-rates.

In those cases, {{ast_format_get_minimum_bytes(.)}} is of no help to create the amount of frames per payload. These formats are Speex, G.719, [G.723.1|http://asterisk.hosting.lv/], [Siren|http://www.digium.com/products/asterisk/downloads], [SILK|https://github.com/traud/asterisk-silk], and CELT. Furthermore, this affects external modules like [iLBC 20|https://github.com/traud/asterisk-ilbc], [AMR(-WB)|https://github.com/traud/asterisk-amr], [Codec 2|https://github.com/traud/asterisk-codec2], and [Opus|https://github.com/seanbright/asterisk-opus].

This is just about outgoing packets (Asterisk to another party). Incoming packets must be decodable by a transcoding module even without this information, because the incoming ptime could change at any time.

{{ast_rtp_codecs_get_framing(.)}} provides this information. Furthermore, the channel driver negotiates this value, therefore the channel knows this as well. However, this information is required in {{ast_translator.frameout(ast_trans_pvt)}}.

In Asterisk 11, this information is available. However, its Speex module does not us this to create the correct frame length, either.



--
This message was sent by Atlassian JIRA
(v6.2#6252)



More information about the asterisk-bugs mailing list