diff options
author | Keith <keith@rhizomatica.org> | 2017-08-29 16:56:11 +0200 |
---|---|---|
committer | Holger Freyther <holger@freyther.de> | 2017-09-03 18:30:53 +0000 |
commit | b6032727870ab2b98372b697d91f7256da4f32b3 (patch) | |
tree | a8dd8c397f426d93ea8a9234d6647727d4e01e45 | |
parent | 148df95d42adbabd6ddd87e28c5970b615b9b3cd (diff) |
sdp.c Send octet-align in fmtp
rfc4867 8.2:
octet-align: Permissible values are 0 and 1. If 1, octet-aligned
operation SHALL be used. If 0 or if not present,
bandwidth-efficient operation is employed.
We don't have any support for AMR BE mode, but if we don't
send this the other end expects BE mode and can't decode the stream
Change-Id: I938758ac4ec55db9223e3da6c3c277e8fa670055
-rw-r--r-- | src/sdp.c | 11 |
1 files changed, 10 insertions, 1 deletions
@@ -166,18 +166,27 @@ bool sdp_extract_sdp(struct sip_call_leg *leg, const sip_t *sip, bool any_codec) char *sdp_create_file(struct sip_call_leg *leg, struct call_leg *other) { struct in_addr net = { .s_addr = ntohl(other->ip) }; + char *fmtp_str = NULL, *sdp; leg->wanted_codec = app_media_name(other->payload_msg_type); - return talloc_asprintf(leg, + + if (strcmp(leg->wanted_codec, "AMR") == 0) + fmtp_str = talloc_asprintf(leg, "a=fmtp:%d octet-align=1\r\n", other->payload_type); + + sdp = talloc_asprintf(leg, "v=0\r\n" "o=Osmocom 0 0 IN IP4 %s\r\n" "s=GSM Call\r\n" "c=IN IP4 %s\r\n" "t=0 0\r\n" "m=audio %d RTP/AVP %d\r\n" + "%s" "a=rtpmap:%d %s/8000\r\n", inet_ntoa(net), inet_ntoa(net), /* never use diff. addr! */ other->port, other->payload_type, + fmtp_str ? fmtp_str : "", other->payload_type, leg->wanted_codec); + talloc_free(fmtp_str); + return sdp; } |