res_pjsip_sdp_rtp: Enable Opus to be negotiated via SIP/SDP.
authorAlexander Traud <pabstraud@compuserve.com>
Fri, 6 Nov 2015 12:57:15 +0000 (13:57 +0100)
committerAlexander Traud <pabstraud@compuserve.com>
Fri, 6 Nov 2015 12:59:30 +0000 (13:59 +0100)
In SIP/SDP, Opus has two channels always (see RFC 7587 section 7). The actual
amount of channels is negotiated in-band. Therefore now, the Opus codec and its
attribute rtpmap are registered with two channels.

ASTERISK-24779 #close
Reported by: PowerPBX
Tested by: Alexander Traud
patches:
  asterisk-24779.patch submitted by Sean Bright (license #5060)

Change-Id: Ic7ac13cafa1d3450b4fa4987350924b42cbb657b

res/res_pjsip_sdp_rtp.c

index a66aebb..3828f7e 100644 (file)
@@ -396,8 +396,11 @@ static pjmedia_sdp_attr* generate_rtpmap_attr(struct ast_sip_session *session, p
        rtpmap.pt = media->desc.fmt[media->desc.fmt_count - 1];
        rtpmap.clock_rate = ast_rtp_lookup_sample_rate2(asterisk_format, format, code);
        pj_strdup2(pool, &rtpmap.enc_name, ast_rtp_lookup_mime_subtype2(asterisk_format, format, code, options));
-       rtpmap.param.slen = 0;
-       rtpmap.param.ptr = NULL;
+       if (!pj_stricmp2(&rtpmap.enc_name, "opus")) {
+               pj_cstr(&rtpmap.param, "2");
+       } else {
+               pj_cstr(&rtpmap.param, NULL);
+       }
 
        pjmedia_sdp_rtpmap_to_attr(pool, &rtpmap, &attr);