From 7624cbb15578961b5211b84bbbe4efdf5266dc9d Mon Sep 17 00:00:00 2001 From: Frederic LE FOLL Date: Wed, 27 Nov 2019 19:11:33 +0100 Subject: [PATCH] chan_sip+native_bridge_rtp: no directmedia for ptime other than default ptime. During capabilities selection (joint capabilities of us and peer, configured capability for this peer, or general configured capabilities), if sip_new() does not keep framing information, then directmedia activation will fail for any framing different from default framing. ASTERISK-28637 Change-Id: I99257502788653c2816fc991cac7946453082466 --- bridges/bridge_native_rtp.c | 5 +++++ channels/chan_sip.c | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/bridges/bridge_native_rtp.c b/bridges/bridge_native_rtp.c index 602fed8df9..7fd4ae179e 100644 --- a/bridges/bridge_native_rtp.c +++ b/bridges/bridge_native_rtp.c @@ -713,6 +713,8 @@ static int native_rtp_bridge_compatible_check(struct ast_bridge *bridge, struct framing_inst0, framing_inst1); return 0; } + ast_debug(3, "Symmetric ptimes on the two call legs (%u). May be able to native bridge in RTP\n", + framing_inst0); } read_ptime0 = ast_format_cap_get_format_framing(cap0, ast_channel_rawreadformat(bc0->chan)); @@ -726,6 +728,9 @@ static int native_rtp_bridge_compatible_check(struct ast_bridge *bridge, struct read_ptime0, write_ptime1, read_ptime1, write_ptime0); return 0; } + ast_debug(3, "Bridge '%s': Packetization comparison success between RTP streams (read_ptime0:%d == write_ptime1:%d and read_ptime1:%d == write_ptime0:%d).\n", + bridge->uniqueid, + read_ptime0, write_ptime1, read_ptime1, write_ptime0); return 1; } diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 72b285123e..4a9cc6bee3 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -8193,8 +8193,11 @@ static struct ast_channel *sip_new(struct sip_pvt *i, int state, const char *tit /* Use only the preferred audio format, which is stored at the '0' index */ fmt = ast_format_cap_get_best_by_type(what, AST_MEDIA_TYPE_AUDIO); /* get the best audio format */ if (fmt) { + int framing; + ast_format_cap_remove_by_type(caps, AST_MEDIA_TYPE_AUDIO); /* remove only the other audio formats */ - ast_format_cap_append(caps, fmt, 0); /* add our best choice back */ + framing = ast_format_cap_get_format_framing(what, fmt); + ast_format_cap_append(caps, fmt, framing); /* add our best choice back */ } else { /* If we don't have an audio format, try to get something */ fmt = ast_format_cap_get_format(caps, 0);