MT#61368 use media subscription lookup for offers

To support scenarios with mismatched media sections between two sides of
a call that aren't based on explicit SDP manipulations, attempt to
lookup the peer media based on an existing subscription also for offers.

Add extra checks (media type, media ID, monologue pointer) to make sure
that the obtained media object is actually the correct one.

Use a fallback on the existing index-based lookup in case no matching
media can be found.

As a side effect, the numbering and ordering of media objects created
during offer/answer is now reversed as the function is called in a
different order. Adapt tests as needed.

Change-Id: Ia5351f7d4fed03098c6be6bea3d4c74f52b8a76b
pull/1897/head
Richard Fuchs 5 months ago
parent c86d75a090
commit 73ec8df939

@ -3025,12 +3025,12 @@ int monologue_offer_answer(struct call_monologue *monologues[2], sdp_streams_q *
assert(sp->index > 0); assert(sp->index > 0);
/** /**
* for an offer, a sequence in which the medias are gotten by index, matters. * for an offer, a sequence in which tsender_media->media_subscriptions.headhe medias are gotten by index, matters.
* This affects later the sequencing of medias, e.g. for subscribe requests. * This affects later the sequencing of medias, e.g. for subscribe requests.
*/ */
/* handling of media sessions level manipulations (media sessions remove) */ /* handling of media sessions level manipulations (media sessions remove) */
if (flags->sdp_media_remove[sp->type_id]) { if (is_offer && flags->sdp_media_remove[sp->type_id]) {
sender_media = monologue_add_zero_media(sender_ml, sp, &num_ports_other, flags); sender_media = monologue_add_zero_media(sender_ml, sp, &num_ports_other, flags);
medias_offset++; medias_offset++;
@ -3041,27 +3041,34 @@ int monologue_offer_answer(struct call_monologue *monologues[2], sdp_streams_q *
continue; continue;
} }
/* OP_OFFER, receiver's side, get by index */ /* sender's side, get by index */
receiver_media = NULL;
if (is_offer)
receiver_media = __get_media(receiver_ml, sp, flags, (medias_offset ? (sp->index - medias_offset) : 0));
/* OP_OFFER/OP_ANSWER, sender's side, get by index */
sender_media = __get_media(sender_ml, sp, flags, 0); sender_media = __get_media(sender_ml, sp, flags, 0);
sender_media->media_sdp_id = sp->media_sdp_id; sender_media->media_sdp_id = sp->media_sdp_id;
/* OP_ANSWER, receiver's side, only media subscriptions lookup */ /* receiver's side, try media subscriptions lookup, fall back to index-based lookup */
if (!is_offer) receiver_media = NULL;
{ for (auto_iter(l, sender_media->media_subscriptions.head); l && !receiver_media; l = l->next) {
if (sender_media->media_subscriptions.head) { __auto_type ms = l->data;
__auto_type sender_media_it = sender_media->media_subscriptions.head; __auto_type r_media = ms->media;
struct media_subscription *ms = sender_media_it->data; if (r_media->monologue != receiver_ml)
receiver_media = ms->media; continue;
if (r_media) {
// check type, it must match
if (str_cmp_str(&r_media->type, &sender_media->type))
continue;
} }
else { if (r_media) {
ilog(LOG_WARNING, "No matching media (index: %d) for answer using subscription, just use an index.", sp->index); // check a=mid, it must match if present
receiver_media = __get_media(receiver_ml, sp, flags, 0); if (sender_media->media_id.len && r_media->media_id.len
&& str_cmp_str(&sender_media->media_id, &r_media->media_id))
continue;
} }
// found it
receiver_media = r_media;
}
if (!receiver_media) {
ilog(LOG_WARNING, "No matching media (index: %d) for answer using subscription, just use an index.", sp->index);
receiver_media = __get_media(receiver_ml, sp, flags, sp->index - medias_offset);
} }
receiver_media->media_sdp_id = sp->media_sdp_id; receiver_media->media_sdp_id = sp->media_sdp_id;

@ -115,7 +115,7 @@ a=s-foo:bar
a=s-baz:quux blah a=s-baz:quux blah
m=audio PORT RTP/AVP 0 m=audio PORT RTP/AVP 0
c=IN IP4 203.0.113.1 c=IN IP4 203.0.113.1
a=label:1 a=label:0
a=rtpmap:0 PCMU/8000 a=rtpmap:0 PCMU/8000
a=m-dummy a=m-dummy
a=m-foo:bar a=m-foo:bar
@ -154,7 +154,7 @@ a=s-foo:bar
a=s-baz:quux blah a=s-baz:quux blah
m=audio PORT RTP/AVP 0 m=audio PORT RTP/AVP 0
c=IN IP4 203.0.113.1 c=IN IP4 203.0.113.1
a=label:1 a=label:0
a=rtpmap:0 PCMU/8000 a=rtpmap:0 PCMU/8000
a=m-dummy a=m-dummy
a=m-foo:bar a=m-foo:bar
@ -193,7 +193,7 @@ a=s-foo:bar
a=s-baz:quux blah a=s-baz:quux blah
m=audio PORT RTP/AVP 0 m=audio PORT RTP/AVP 0
c=IN IP4 203.0.113.1 c=IN IP4 203.0.113.1
a=label:1 a=label:0
a=rtpmap:0 PCMU/8000 a=rtpmap:0 PCMU/8000
a=m-dummy a=m-dummy
a=m-foo:bar a=m-foo:bar
@ -233,7 +233,7 @@ a=s-foo:bar
a=s-baz:quux blah a=s-baz:quux blah
m=audio PORT RTP/AVP 0 m=audio PORT RTP/AVP 0
c=IN IP4 203.0.113.1 c=IN IP4 203.0.113.1
a=label:1 a=label:0
a=rtpmap:0 PCMU/8000 a=rtpmap:0 PCMU/8000
a=m-dummy a=m-dummy
a=m-foo:bar a=m-foo:bar
@ -272,7 +272,7 @@ a=s-foo:bar
a=s-baz:quux blah a=s-baz:quux blah
m=audio PORT RTP/AVP 0 m=audio PORT RTP/AVP 0
c=IN IP4 203.0.113.1 c=IN IP4 203.0.113.1
a=label:1 a=label:0
a=rtpmap:0 PCMU/8000 a=rtpmap:0 PCMU/8000
a=m-dummy a=m-dummy
a=m-foo:bar a=m-foo:bar
@ -882,10 +882,10 @@ a=rtcp:PORT
SDP SDP
is $ftr, undef, 'from-tag matches'; is $ftr, undef, 'from-tag matches';
is_deeply $fts, [tt(), ft()], 'from-tags match'; is_deeply $fts, [ft(), tt()], 'from-tags match';
is_deeply $tag_medias, [ is_deeply $tag_medias, [
{ {
tag => tt(), tag => ft(),
medias => [ medias => [
{ {
index => 1, index => 1,
@ -896,7 +896,7 @@ is_deeply $tag_medias, [
], ],
}, },
{ {
tag => ft(), tag => tt(),
medias => [ medias => [
{ {
index => 1, index => 1,
@ -911,13 +911,13 @@ is_deeply $media_labels, {
'1' => { '1' => {
index => 1, index => 1,
type => 'audio', type => 'audio',
tag => ft(), tag => tt(),
mode => 'sendrecv', mode => 'sendrecv',
}, },
'0' => { '0' => {
index => 1, index => 1,
type => 'audio', type => 'audio',
tag => tt(), tag => ft(),
mode => 'sendrecv', mode => 'sendrecv',
}, },
}, 'media-labels match'; }, 'media-labels match';
@ -990,11 +990,11 @@ a=rtcp:PORT
SDP SDP
is $ftr, undef, 'from-tag matches'; is $ftr, undef, 'from-tag matches';
is_deeply $fts, [tt(), ft()], 'from-tags match'; is_deeply $fts, [ft(), tt()], 'from-tags match';
is_deeply $tag_medias, [ is_deeply $tag_medias, [
{ {
tag => tt(), tag => ft(),
label => 'called', label => 'caller',
medias => [ medias => [
{ {
index => 1, index => 1,
@ -1005,8 +1005,8 @@ is_deeply $tag_medias, [
], ],
}, },
{ {
tag => ft(), tag => tt(),
label => 'caller', label => 'called',
medias => [ medias => [
{ {
index => 1, index => 1,
@ -1021,15 +1021,15 @@ is_deeply $media_labels, {
'1' => { '1' => {
index => 1, index => 1,
type => 'audio', type => 'audio',
tag => ft(), tag => tt(),
label => 'caller', label => 'called',
mode => 'sendrecv', mode => 'sendrecv',
}, },
'0' => { '0' => {
index => 1, index => 1,
type => 'audio', type => 'audio',
tag => tt(), tag => ft(),
label => 'called', label => 'caller',
mode => 'sendrecv', mode => 'sendrecv',
}, },
}, 'media-labels match'; }, 'media-labels match';
@ -1090,7 +1090,7 @@ rcv($sock_a, $port_b, rtpm(0, 2000, 4000, 0x3456, "\x00" x 160));
snd($sock_a, $port_b, rtp(0, 4000, 7000, 0x6543, "\x00" x 160)); snd($sock_a, $port_b, rtp(0, 4000, 7000, 0x6543, "\x00" x 160));
rcv($sock_b, $port_a, rtpm(0, 4000, 7000, 0x6543, "\x00" x 160)); rcv($sock_b, $port_a, rtpm(0, 4000, 7000, 0x6543, "\x00" x 160));
($ftr, $ttr, $fts, undef, undef, $port_d, undef, $port_c) = subscribe_request('"all" sub', ($ftr, $ttr, $fts, undef, undef, $port_c, undef, $port_d) = subscribe_request('"all" sub',
{ 'flags' => ['all'] }, <<SDP); { 'flags' => ['all'] }, <<SDP);
v=0 v=0
o=- SDP_VERSION IN IP4 198.51.100.1 o=- SDP_VERSION IN IP4 198.51.100.1
@ -1111,7 +1111,7 @@ a=rtcp:PORT
SDP SDP
is $ftr, undef, 'from-tag matches'; is $ftr, undef, 'from-tag matches';
is_deeply $fts, [tt(), ft()], 'from-tags match'; is_deeply $fts, [ft(), tt()], 'from-tags match';
subscribe_answer('"all" sub', subscribe_answer('"all" sub',
{ 'to-tag' => $ttr, flags => ['allow transcoding'] }, <<SDP); { 'to-tag' => $ttr, flags => ['allow transcoding'] }, <<SDP);
@ -1119,10 +1119,10 @@ v=0
o=- 1545997027 1 IN IP4 198.51.100.1 o=- 1545997027 1 IN IP4 198.51.100.1
s=tester s=tester
t=0 0 t=0 0
m=audio 6086 RTP/AVP 8 m=audio 6084 RTP/AVP 8
c=IN IP4 198.51.100.14 c=IN IP4 198.51.100.14
a=recvonly a=recvonly
m=audio 6084 RTP/AVP 8 m=audio 6086 RTP/AVP 8
c=IN IP4 198.51.100.14 c=IN IP4 198.51.100.14
a=recvonly a=recvonly
SDP SDP
@ -1760,7 +1760,7 @@ rcv($sock_a, $port_b, rtpm(0, 2000, 4000, 0x3456, "\x00" x 160));
snd($sock_a, $port_b, rtp(0, 4000, 7000, 0x6543, "\x00" x 160)); snd($sock_a, $port_b, rtp(0, 4000, 7000, 0x6543, "\x00" x 160));
rcv($sock_b, $port_a, rtpm(0, 4000, 7000, 0x6543, "\x00" x 160)); rcv($sock_b, $port_a, rtpm(0, 4000, 7000, 0x6543, "\x00" x 160));
(undef, $ttr, undef, undef, undef, $port_d, undef, $port_c) = subscribe_request('SIPREC sub pause/resume', (undef, $ttr, undef, undef, undef, $port_c, undef, $port_d) = subscribe_request('SIPREC sub pause/resume',
{ flags => ['all', 'SIPREC'] }, <<SDP); { flags => ['all', 'SIPREC'] }, <<SDP);
v=0 v=0
o=- SDP_VERSION IN IP4 198.51.100.1 o=- SDP_VERSION IN IP4 198.51.100.1
@ -1786,11 +1786,11 @@ v=0
o=- 1545997027 1 IN IP4 198.51.100.1 o=- 1545997027 1 IN IP4 198.51.100.1
s=tester s=tester
t=0 0 t=0 0
m=audio 6124 RTP/AVP 0 m=audio 6122 RTP/AVP 0
c=IN IP4 198.51.100.14 c=IN IP4 198.51.100.14
a=label:0 a=label:0
a=recvonly a=recvonly
m=audio 6122 RTP/AVP 0 m=audio 6124 RTP/AVP 0
c=IN IP4 198.51.100.14 c=IN IP4 198.51.100.14
a=label:1 a=label:1
a=recvonly a=recvonly
@ -1850,7 +1850,7 @@ a=recvonly
a=rtcp:PORT a=rtcp:PORT
SDP SDP
(undef, undef, undef, $tag_medias, $media_labels, $port_d, undef, $port_c) = subscribe_request('SIPREC sub pause/resume', (undef, undef, undef, $tag_medias, $media_labels, $port_c, undef, $port_d) = subscribe_request('SIPREC sub pause/resume',
{ flags => ['all', 'SIPREC'], 'to-tag' => $ttr }, <<SDP); { flags => ['all', 'SIPREC'], 'to-tag' => $ttr }, <<SDP);
v=0 v=0
o=- SDP_VERSION IN IP4 198.51.100.1 o=- SDP_VERSION IN IP4 198.51.100.1
@ -1860,48 +1860,48 @@ m=audio PORT RTP/AVP 0
c=IN IP4 203.0.113.1 c=IN IP4 203.0.113.1
a=label:0 a=label:0
a=rtpmap:0 PCMU/8000 a=rtpmap:0 PCMU/8000
a=sendonly a=inactive
a=rtcp:PORT a=rtcp:PORT
m=audio PORT RTP/AVP 0 m=audio PORT RTP/AVP 0
c=IN IP4 203.0.113.1 c=IN IP4 203.0.113.1
a=label:1 a=label:1
a=rtpmap:0 PCMU/8000 a=rtpmap:0 PCMU/8000
a=inactive a=sendonly
a=rtcp:PORT a=rtcp:PORT
SDP SDP
is_deeply $tag_medias, [ is_deeply $tag_medias, [
{ {
tag => tt(), tag => ft(),
medias => [ medias => [
{ {
index => 1, index => 1,
type => 'audio', type => 'audio',
label => '0', label => '0',
mode => 'recvonly', mode => 'sendonly',
}, },
], ],
}, },
{ {
tag => ft(), tag => tt(),
medias => [ medias => [
{ {
index => 1, index => 1,
type => 'audio', type => 'audio',
label => '1', label => '1',
mode => 'sendonly', mode => 'recvonly',
}, },
], ],
}, },
], 'SIPREC sub pause/resume - tag-medias match'; ], 'SIPREC sub pause/resume - tag-medias match';
is_deeply $media_labels, { is_deeply $media_labels, {
'1' => { '0' => {
index => 1, index => 1,
type => 'audio', type => 'audio',
tag => ft(), tag => ft(),
mode => 'sendonly', mode => 'sendonly',
}, },
'0' => { '1' => {
index => 1, index => 1,
type => 'audio', type => 'audio',
tag => tt(), tag => tt(),
@ -1915,14 +1915,14 @@ v=0
o=- 1545997027 1 IN IP4 198.51.100.1 o=- 1545997027 1 IN IP4 198.51.100.1
s=tester s=tester
t=0 0 t=0 0
m=audio 6124 RTP/AVP 0 m=audio 6122 RTP/AVP 0
c=IN IP4 198.51.100.14 c=IN IP4 198.51.100.14
a=label:0 a=label:0
a=recvonly a=inactive
m=audio 6122 RTP/AVP 0 m=audio 6124 RTP/AVP 0
c=IN IP4 198.51.100.14 c=IN IP4 198.51.100.14
a=label:1 a=label:1
a=inactive a=recvonly
SDP SDP
snd($sock_b, $port_a, rtp(0, 2001, 4320, 0x3456, "\x00" x 160)); snd($sock_b, $port_a, rtp(0, 2001, 4320, 0x3456, "\x00" x 160));
@ -1971,7 +1971,7 @@ a=sendrecv
a=rtcp:PORT a=rtcp:PORT
SDP SDP
(undef, $ttr, undef, $tag_medias, $media_labels, $port_d, undef, $port_c) = subscribe_request('SIPREC sub pause/resume', (undef, $ttr, undef, $tag_medias, $media_labels, $port_c, undef, $port_d) = subscribe_request('SIPREC sub pause/resume',
{ flags => ['all', 'SIPREC'], 'to-tag' => $ttr }, <<SDP); { flags => ['all', 'SIPREC'], 'to-tag' => $ttr }, <<SDP);
v=0 v=0
o=- SDP_VERSION IN IP4 198.51.100.1 o=- SDP_VERSION IN IP4 198.51.100.1
@ -1993,7 +1993,7 @@ SDP
is_deeply $tag_medias, [ is_deeply $tag_medias, [
{ {
tag => tt(), tag => ft(),
medias => [ medias => [
{ {
index => 1, index => 1,
@ -2004,7 +2004,7 @@ is_deeply $tag_medias, [
], ],
}, },
{ {
tag => ft(), tag => tt(),
medias => [ medias => [
{ {
index => 1, index => 1,
@ -2016,13 +2016,13 @@ is_deeply $tag_medias, [
}, },
], 'SIPREC sub pause/resume - tag-medias match'; ], 'SIPREC sub pause/resume - tag-medias match';
is_deeply $media_labels, { is_deeply $media_labels, {
'1' => { '0' => {
index => 1, index => 1,
type => 'audio', type => 'audio',
tag => ft(), tag => ft(),
mode => 'sendrecv', mode => 'sendrecv',
}, },
'0' => { '1' => {
index => 1, index => 1,
type => 'audio', type => 'audio',
tag => tt(), tag => tt(),
@ -2036,11 +2036,11 @@ v=0
o=- 1545997027 1 IN IP4 198.51.100.1 o=- 1545997027 1 IN IP4 198.51.100.1
s=tester s=tester
t=0 0 t=0 0
m=audio 6124 RTP/AVP 0 m=audio 6122 RTP/AVP 0
c=IN IP4 198.51.100.14 c=IN IP4 198.51.100.14
a=label:0 a=label:0
a=recvonly a=recvonly
m=audio 6122 RTP/AVP 0 m=audio 6124 RTP/AVP 0
c=IN IP4 198.51.100.14 c=IN IP4 198.51.100.14
a=label:1 a=label:1
a=recvonly a=recvonly
@ -2106,48 +2106,48 @@ m=audio PORT RTP/AVP 0
c=IN IP4 203.0.113.1 c=IN IP4 203.0.113.1
a=label:0 a=label:0
a=rtpmap:0 PCMU/8000 a=rtpmap:0 PCMU/8000
a=inactive a=sendonly
a=rtcp:PORT a=rtcp:PORT
m=audio PORT RTP/AVP 0 m=audio PORT RTP/AVP 0
c=IN IP4 203.0.113.1 c=IN IP4 203.0.113.1
a=label:1 a=label:1
a=rtpmap:0 PCMU/8000 a=rtpmap:0 PCMU/8000
a=sendonly a=inactive
a=rtcp:PORT a=rtcp:PORT
SDP SDP
is_deeply $tag_medias, [ is_deeply $tag_medias, [
{ {
tag => tt(), tag => ft(),
medias => [ medias => [
{ {
index => 1, index => 1,
type => 'audio', type => 'audio',
label => '0', label => '0',
mode => 'sendonly', mode => 'recvonly',
}, },
], ],
}, },
{ {
tag => ft(), tag => tt(),
medias => [ medias => [
{ {
index => 1, index => 1,
type => 'audio', type => 'audio',
label => '1', label => '1',
mode => 'recvonly', mode => 'sendonly',
}, },
], ],
}, },
], 'tag-medias match'; ], 'tag-medias match';
is_deeply $media_labels, { is_deeply $media_labels, {
'1' => { '0' => {
index => 1, index => 1,
type => 'audio', type => 'audio',
tag => ft(), tag => ft(),
mode => 'recvonly', mode => 'recvonly',
}, },
'0' => { '1' => {
index => 1, index => 1,
type => 'audio', type => 'audio',
tag => tt(), tag => tt(),
@ -2161,14 +2161,14 @@ v=0
o=- 1545997027 1 IN IP4 198.51.100.1 o=- 1545997027 1 IN IP4 198.51.100.1
s=tester s=tester
t=0 0 t=0 0
m=audio 6124 RTP/AVP 0 m=audio 6122 RTP/AVP 0
c=IN IP4 198.51.100.14 c=IN IP4 198.51.100.14
a=label:0 a=label:0
a=inactive a=recvonly
m=audio 6122 RTP/AVP 0 m=audio 6124 RTP/AVP 0
c=IN IP4 198.51.100.14 c=IN IP4 198.51.100.14
a=label:1 a=label:1
a=recvonly a=inactive
SDP SDP
snd($sock_a, $port_b, rtp(0, 4001, 7480, 0x6543, "\x00" x 160)); snd($sock_a, $port_b, rtp(0, 4001, 7480, 0x6543, "\x00" x 160));

@ -137,13 +137,13 @@ $json_exp = {
'2', '2',
'3' '3'
], ],
'maps-0' => [ 'maps-1' => [
'0' '0'
], ],
'maps-1' => [ 'maps-0' => [
'1' '1'
], ],
'media-0' => { 'media-1' => {
'desired_family' => 'IP4', 'desired_family' => 'IP4',
'format_str' => '0 8', 'format_str' => '0 8',
'index' => '1', 'index' => '1',
@ -154,7 +154,7 @@ $json_exp = {
'tag' => '1', 'tag' => '1',
'type' => 'audio' 'type' => 'audio'
}, },
'media-1' => { 'media-0' => {
'desired_family' => 'IP4', 'desired_family' => 'IP4',
'format_str' => '0 8', 'format_str' => '0 8',
'index' => '1', 'index' => '1',
@ -165,10 +165,10 @@ $json_exp = {
'tag' => '0', 'tag' => '0',
'type' => 'audio' 'type' => 'audio'
}, },
'medias-0' => [ 'medias-1' => [
'1' '1'
], ],
'medias-1' => [ 'medias-0' => [
'0' '0'
], ],
'payload_types-0' => [ 'payload_types-0' => [
@ -234,7 +234,7 @@ $json_exp = {
'component' => '1', 'component' => '1',
'endpoint' => '', 'endpoint' => '',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '0', 'media' => '1',
'ps_flags' => '65536', 'ps_flags' => '65536',
'rtcp_sibling' => '1', 'rtcp_sibling' => '1',
'sfd' => '0', 'sfd' => '0',
@ -247,7 +247,7 @@ $json_exp = {
'component' => '2', 'component' => '2',
'endpoint' => '', 'endpoint' => '',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '0', 'media' => '1',
'ps_flags' => '131072', 'ps_flags' => '131072',
'rtcp_sibling' => '4294967295', 'rtcp_sibling' => '4294967295',
'sfd' => '1', 'sfd' => '1',
@ -260,7 +260,7 @@ $json_exp = {
'component' => '1', 'component' => '1',
'endpoint' => '198.51.100.1:3000', 'endpoint' => '198.51.100.1:3000',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '1', 'media' => '0',
'ps_flags' => '68222976', 'ps_flags' => '68222976',
'rtcp_sibling' => '3', 'rtcp_sibling' => '3',
'sfd' => '2', 'sfd' => '2',
@ -273,7 +273,7 @@ $json_exp = {
'component' => '2', 'component' => '2',
'endpoint' => '198.51.100.1:3001', 'endpoint' => '198.51.100.1:3001',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '1', 'media' => '0',
'ps_flags' => '68288513', 'ps_flags' => '68288513',
'rtcp_sibling' => '4294967295', 'rtcp_sibling' => '4294967295',
'sfd' => '3', 'sfd' => '3',
@ -293,11 +293,11 @@ $json_exp = {
'stream_sfds-3' => [ 'stream_sfds-3' => [
'3' '3'
], ],
'streams-0' => [ 'streams-1' => [
'0', '0',
'1' '1'
], ],
'streams-1' => [ 'streams-0' => [
'2', '2',
'3' '3'
], ],
@ -397,13 +397,13 @@ $json_exp = {
'2', '2',
'3' '3'
], ],
'maps-0' => [ 'maps-1' => [
'0' '0'
], ],
'maps-1' => [ 'maps-0' => [
'1' '1'
], ],
'media-0' => { 'media-1' => {
'desired_family' => 'IP4', 'desired_family' => 'IP4',
'format_str' => '8', 'format_str' => '8',
'index' => '1', 'index' => '1',
@ -414,7 +414,7 @@ $json_exp = {
'tag' => '1', 'tag' => '1',
'type' => 'audio' 'type' => 'audio'
}, },
'media-1' => { 'media-0' => {
'desired_family' => 'IP4', 'desired_family' => 'IP4',
'format_str' => '8', 'format_str' => '8',
'index' => '1', 'index' => '1',
@ -425,10 +425,10 @@ $json_exp = {
'tag' => '0', 'tag' => '0',
'type' => 'audio' 'type' => 'audio'
}, },
'medias-0' => [ 'medias-1' => [
'1' '1'
], ],
'medias-1' => [ 'medias-0' => [
'0' '0'
], ],
'payload_types-0' => [ 'payload_types-0' => [
@ -492,7 +492,7 @@ $json_exp = {
'component' => '1', 'component' => '1',
'endpoint' => '198.51.100.4:3000', 'endpoint' => '198.51.100.4:3000',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '0', 'media' => '1',
'ps_flags' => '1114112', 'ps_flags' => '1114112',
'rtcp_sibling' => '1', 'rtcp_sibling' => '1',
'sfd' => '0', 'sfd' => '0',
@ -505,7 +505,7 @@ $json_exp = {
'component' => '2', 'component' => '2',
'endpoint' => '198.51.100.4:3001', 'endpoint' => '198.51.100.4:3001',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '0', 'media' => '1',
'ps_flags' => '1179649', 'ps_flags' => '1179649',
'rtcp_sibling' => '4294967295', 'rtcp_sibling' => '4294967295',
'sfd' => '1', 'sfd' => '1',
@ -518,7 +518,7 @@ $json_exp = {
'component' => '1', 'component' => '1',
'endpoint' => '198.51.100.1:3000', 'endpoint' => '198.51.100.1:3000',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '1', 'media' => '0',
'ps_flags' => '1114112', 'ps_flags' => '1114112',
'rtcp_sibling' => '3', 'rtcp_sibling' => '3',
'sfd' => '2', 'sfd' => '2',
@ -531,7 +531,7 @@ $json_exp = {
'component' => '2', 'component' => '2',
'endpoint' => '198.51.100.1:3001', 'endpoint' => '198.51.100.1:3001',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '1', 'media' => '0',
'ps_flags' => '1179649', 'ps_flags' => '1179649',
'rtcp_sibling' => '4294967295', 'rtcp_sibling' => '4294967295',
'sfd' => '3', 'sfd' => '3',
@ -551,11 +551,11 @@ $json_exp = {
'stream_sfds-3' => [ 'stream_sfds-3' => [
'3' '3'
], ],
'streams-0' => [ 'streams-1' => [
'0', '0',
'1' '1'
], ],
'streams-1' => [ 'streams-0' => [
'2', '2',
'3' '3'
], ],
@ -662,13 +662,13 @@ $json_exp = {
'2', '2',
'3' '3'
], ],
'maps-0' => [ 'maps-1' => [
'0' '0'
], ],
'maps-1' => [ 'maps-0' => [
'1' '1'
], ],
'media-0' => { 'media-1' => {
'desired_family' => 'IP4', 'desired_family' => 'IP4',
'format_str' => '0 8', 'format_str' => '0 8',
'index' => '1', 'index' => '1',
@ -679,7 +679,7 @@ $json_exp = {
'tag' => '1', 'tag' => '1',
'type' => 'audio' 'type' => 'audio'
}, },
'media-1' => { 'media-0' => {
'desired_family' => 'IP4', 'desired_family' => 'IP4',
'format_str' => '0 8', 'format_str' => '0 8',
'index' => '1', 'index' => '1',
@ -690,10 +690,10 @@ $json_exp = {
'tag' => '0', 'tag' => '0',
'type' => 'audio' 'type' => 'audio'
}, },
'medias-0' => [ 'medias-1' => [
'1' '1'
], ],
'medias-1' => [ 'medias-0' => [
'0' '0'
], ],
'payload_types-0' => [ 'payload_types-0' => [
@ -759,7 +759,7 @@ $json_exp = {
'component' => '1', 'component' => '1',
'endpoint' => '', 'endpoint' => '',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '0', 'media' => '1',
'ps_flags' => '65536', 'ps_flags' => '65536',
'rtcp_sibling' => '1', 'rtcp_sibling' => '1',
'sfd' => '0', 'sfd' => '0',
@ -772,7 +772,7 @@ $json_exp = {
'component' => '2', 'component' => '2',
'endpoint' => '', 'endpoint' => '',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '0', 'media' => '1',
'ps_flags' => '131072', 'ps_flags' => '131072',
'rtcp_sibling' => '4294967295', 'rtcp_sibling' => '4294967295',
'sfd' => '1', 'sfd' => '1',
@ -785,7 +785,7 @@ $json_exp = {
'component' => '1', 'component' => '1',
'endpoint' => '198.51.100.14:6088', 'endpoint' => '198.51.100.14:6088',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '1', 'media' => '0',
'ps_flags' => '68222976', 'ps_flags' => '68222976',
'rtcp_sibling' => '3', 'rtcp_sibling' => '3',
'sfd' => '2', 'sfd' => '2',
@ -798,7 +798,7 @@ $json_exp = {
'component' => '2', 'component' => '2',
'endpoint' => '198.51.100.14:6089', 'endpoint' => '198.51.100.14:6089',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '1', 'media' => '0',
'ps_flags' => '68288513', 'ps_flags' => '68288513',
'rtcp_sibling' => '4294967295', 'rtcp_sibling' => '4294967295',
'sfd' => '3', 'sfd' => '3',
@ -818,11 +818,11 @@ $json_exp = {
'stream_sfds-3' => [ 'stream_sfds-3' => [
'3' '3'
], ],
'streams-0' => [ 'streams-1' => [
'0', '0',
'1' '1'
], ],
'streams-1' => [ 'streams-0' => [
'2', '2',
'3' '3'
], ],
@ -923,13 +923,13 @@ $json_exp = {
'2', '2',
'3' '3'
], ],
'maps-0' => [ 'maps-1' => [
'0' '0'
], ],
'maps-1' => [ 'maps-0' => [
'1' '1'
], ],
'media-0' => { 'media-1' => {
'desired_family' => 'IP4', 'desired_family' => 'IP4',
'format_str' => '0 8', 'format_str' => '0 8',
'index' => '1', 'index' => '1',
@ -940,7 +940,7 @@ $json_exp = {
'tag' => '1', 'tag' => '1',
'type' => 'audio' 'type' => 'audio'
}, },
'media-1' => { 'media-0' => {
'desired_family' => 'IP4', 'desired_family' => 'IP4',
'format_str' => '0 8', 'format_str' => '0 8',
'index' => '1', 'index' => '1',
@ -951,10 +951,10 @@ $json_exp = {
'tag' => '0', 'tag' => '0',
'type' => 'audio' 'type' => 'audio'
}, },
'medias-0' => [ 'medias-1' => [
'1' '1'
], ],
'medias-1' => [ 'medias-0' => [
'0' '0'
], ],
'payload_types-0' => [ 'payload_types-0' => [
@ -1020,7 +1020,7 @@ $json_exp = {
'component' => '1', 'component' => '1',
'endpoint' => '198.51.100.14:6090', 'endpoint' => '198.51.100.14:6090',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '0', 'media' => '1',
'ps_flags' => '1114112', 'ps_flags' => '1114112',
'rtcp_sibling' => '1', 'rtcp_sibling' => '1',
'sfd' => '0', 'sfd' => '0',
@ -1033,7 +1033,7 @@ $json_exp = {
'component' => '2', 'component' => '2',
'endpoint' => '198.51.100.14:6091', 'endpoint' => '198.51.100.14:6091',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '0', 'media' => '1',
'ps_flags' => '1179649', 'ps_flags' => '1179649',
'rtcp_sibling' => '4294967295', 'rtcp_sibling' => '4294967295',
'sfd' => '1', 'sfd' => '1',
@ -1046,7 +1046,7 @@ $json_exp = {
'component' => '1', 'component' => '1',
'endpoint' => '198.51.100.14:6088', 'endpoint' => '198.51.100.14:6088',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '1', 'media' => '0',
'ps_flags' => '1114112', 'ps_flags' => '1114112',
'rtcp_sibling' => '3', 'rtcp_sibling' => '3',
'sfd' => '2', 'sfd' => '2',
@ -1059,7 +1059,7 @@ $json_exp = {
'component' => '2', 'component' => '2',
'endpoint' => '198.51.100.14:6089', 'endpoint' => '198.51.100.14:6089',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '1', 'media' => '0',
'ps_flags' => '1179649', 'ps_flags' => '1179649',
'rtcp_sibling' => '4294967295', 'rtcp_sibling' => '4294967295',
'sfd' => '3', 'sfd' => '3',
@ -1079,11 +1079,11 @@ $json_exp = {
'stream_sfds-3' => [ 'stream_sfds-3' => [
'3' '3'
], ],
'streams-0' => [ 'streams-1' => [
'0', '0',
'1' '1'
], ],
'streams-1' => [ 'streams-0' => [
'2', '2',
'3' '3'
], ],
@ -1210,10 +1210,10 @@ $json_exp = {
'6', '6',
'7' '7'
], ],
'maps-0' => [ 'maps-1' => [
'0' '0'
], ],
'maps-1' => [ 'maps-0' => [
'1' '1'
], ],
'maps-2' => [ 'maps-2' => [
@ -1222,7 +1222,7 @@ $json_exp = {
'maps-3' => [ 'maps-3' => [
'3' '3'
], ],
'media-0' => { 'media-1' => {
'desired_family' => 'IP4', 'desired_family' => 'IP4',
'format_str' => '0 8', 'format_str' => '0 8',
'index' => '1', 'index' => '1',
@ -1233,7 +1233,7 @@ $json_exp = {
'tag' => '1', 'tag' => '1',
'type' => 'audio' 'type' => 'audio'
}, },
'media-1' => { 'media-0' => {
'desired_family' => 'IP4', 'desired_family' => 'IP4',
'format_str' => '0 8', 'format_str' => '0 8',
'index' => '1', 'index' => '1',
@ -1266,10 +1266,10 @@ $json_exp = {
'tag' => '2', 'tag' => '2',
'type' => 'audio' 'type' => 'audio'
}, },
'medias-0' => [ 'medias-1' => [
'1' '1'
], ],
'medias-1' => [ 'medias-0' => [
'0' '0'
], ],
'medias-2' => [ 'medias-2' => [
@ -1392,7 +1392,7 @@ $json_exp = {
'component' => '1', 'component' => '1',
'endpoint' => '198.51.100.14:6090', 'endpoint' => '198.51.100.14:6090',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '0', 'media' => '1',
'ps_flags' => '1114112', 'ps_flags' => '1114112',
'rtcp_sibling' => '1', 'rtcp_sibling' => '1',
'sfd' => '0', 'sfd' => '0',
@ -1405,7 +1405,7 @@ $json_exp = {
'component' => '2', 'component' => '2',
'endpoint' => '198.51.100.14:6091', 'endpoint' => '198.51.100.14:6091',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '0', 'media' => '1',
'ps_flags' => '68288513', 'ps_flags' => '68288513',
'rtcp_sibling' => '4294967295', 'rtcp_sibling' => '4294967295',
'sfd' => '1', 'sfd' => '1',
@ -1418,7 +1418,7 @@ $json_exp = {
'component' => '1', 'component' => '1',
'endpoint' => '198.51.100.14:6088', 'endpoint' => '198.51.100.14:6088',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '1', 'media' => '0',
'ps_flags' => '1114112', 'ps_flags' => '1114112',
'rtcp_sibling' => '3', 'rtcp_sibling' => '3',
'sfd' => '2', 'sfd' => '2',
@ -1431,7 +1431,7 @@ $json_exp = {
'component' => '2', 'component' => '2',
'endpoint' => '198.51.100.14:6089', 'endpoint' => '198.51.100.14:6089',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '1', 'media' => '0',
'ps_flags' => '68288513', 'ps_flags' => '68288513',
'rtcp_sibling' => '4294967295', 'rtcp_sibling' => '4294967295',
'sfd' => '3', 'sfd' => '3',
@ -1515,11 +1515,11 @@ $json_exp = {
'stream_sfds-7' => [ 'stream_sfds-7' => [
'7' '7'
], ],
'streams-0' => [ 'streams-1' => [
'0', '0',
'1' '1'
], ],
'streams-1' => [ 'streams-0' => [
'2', '2',
'3' '3'
], ],
@ -1538,7 +1538,7 @@ $json_exp = {
'0/1/0/0' '0/1/0/0'
], ],
'media-subscriptions-2' => [ 'media-subscriptions-2' => [
'1/0/0/0' '0/0/0/0'
], ],
'tag-0' => { 'tag-0' => {
'block_dtmf' => '0', 'block_dtmf' => '0',
@ -1590,8 +1590,8 @@ a=rtcp:PORT
SDP SDP
$json_exp->{'media-0'}{media_flags} = '2293772'; $json_exp->{'media-1'}{media_flags} = '2293772';
$json_exp->{'media-1'}{media_flags} = '65548'; $json_exp->{'media-0'}{media_flags} = '65548';
$json_exp->{'media-2'}{format_str} = '8'; $json_exp->{'media-2'}{format_str} = '8';
$json_exp->{'media-2'}{media_flags} = '2162692'; $json_exp->{'media-2'}{media_flags} = '2162692';
$json_exp->{'media-3'}{format_str} = '8'; $json_exp->{'media-3'}{format_str} = '8';

@ -136,13 +136,13 @@ $json_exp = {
'2', '2',
'3' '3'
], ],
'maps-0' => [ 'maps-1' => [
'0' '0'
], ],
'maps-1' => [ 'maps-0' => [
'1' '1'
], ],
'media-0' => { 'media-1' => {
'desired_family' => 'IP4', 'desired_family' => 'IP4',
'format_str' => '0 8', 'format_str' => '0 8',
'index' => '1', 'index' => '1',
@ -153,7 +153,7 @@ $json_exp = {
'tag' => '1', 'tag' => '1',
'type' => 'audio' 'type' => 'audio'
}, },
'media-1' => { 'media-0' => {
'desired_family' => 'IP4', 'desired_family' => 'IP4',
'format_str' => '0 8', 'format_str' => '0 8',
'index' => '1', 'index' => '1',
@ -164,10 +164,10 @@ $json_exp = {
'tag' => '0', 'tag' => '0',
'type' => 'audio' 'type' => 'audio'
}, },
'medias-0' => [ 'medias-1' => [
'1' '1'
], ],
'medias-1' => [ 'medias-0' => [
'0' '0'
], ],
'payload_types-0' => [ 'payload_types-0' => [
@ -233,7 +233,7 @@ $json_exp = {
'component' => '1', 'component' => '1',
'endpoint' => '', 'endpoint' => '',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '0', 'media' => '1',
'ps_flags' => '65536', 'ps_flags' => '65536',
'rtcp_sibling' => '1', 'rtcp_sibling' => '1',
'sfd' => '0', 'sfd' => '0',
@ -246,7 +246,7 @@ $json_exp = {
'component' => '2', 'component' => '2',
'endpoint' => '', 'endpoint' => '',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '0', 'media' => '1',
'ps_flags' => '131072', 'ps_flags' => '131072',
'rtcp_sibling' => '4294967295', 'rtcp_sibling' => '4294967295',
'sfd' => '1', 'sfd' => '1',
@ -259,7 +259,7 @@ $json_exp = {
'component' => '1', 'component' => '1',
'endpoint' => '198.51.100.1:3000', 'endpoint' => '198.51.100.1:3000',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '1', 'media' => '0',
'ps_flags' => '68222976', 'ps_flags' => '68222976',
'rtcp_sibling' => '3', 'rtcp_sibling' => '3',
'sfd' => '2', 'sfd' => '2',
@ -272,7 +272,7 @@ $json_exp = {
'component' => '2', 'component' => '2',
'endpoint' => '198.51.100.1:3001', 'endpoint' => '198.51.100.1:3001',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '1', 'media' => '0',
'ps_flags' => '68288513', 'ps_flags' => '68288513',
'rtcp_sibling' => '4294967295', 'rtcp_sibling' => '4294967295',
'sfd' => '3', 'sfd' => '3',
@ -292,11 +292,11 @@ $json_exp = {
'stream_sfds-3' => [ 'stream_sfds-3' => [
'3' '3'
], ],
'streams-0' => [ 'streams-1' => [
'0', '0',
'1' '1'
], ],
'streams-1' => [ 'streams-0' => [
'2', '2',
'3' '3'
], ],
@ -398,13 +398,13 @@ $json_exp = {
'2', '2',
'3' '3'
], ],
'maps-0' => [ 'maps-1' => [
'0' '0'
], ],
'maps-1' => [ 'maps-0' => [
'1' '1'
], ],
'media-0' => { 'media-1' => {
'desired_family' => 'IP4', 'desired_family' => 'IP4',
'format_str' => '8', 'format_str' => '8',
'index' => '1', 'index' => '1',
@ -415,7 +415,7 @@ $json_exp = {
'tag' => '1', 'tag' => '1',
'type' => 'audio' 'type' => 'audio'
}, },
'media-1' => { 'media-0' => {
'desired_family' => 'IP4', 'desired_family' => 'IP4',
'format_str' => '8', 'format_str' => '8',
'index' => '1', 'index' => '1',
@ -426,10 +426,10 @@ $json_exp = {
'tag' => '0', 'tag' => '0',
'type' => 'audio' 'type' => 'audio'
}, },
'medias-0' => [ 'medias-1' => [
'1' '1'
], ],
'medias-1' => [ 'medias-0' => [
'0' '0'
], ],
'payload_types-0' => [ 'payload_types-0' => [
@ -493,7 +493,7 @@ $json_exp = {
'component' => '1', 'component' => '1',
'endpoint' => '198.51.100.4:3000', 'endpoint' => '198.51.100.4:3000',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '0', 'media' => '1',
'ps_flags' => '1114112', 'ps_flags' => '1114112',
'rtcp_sibling' => '1', 'rtcp_sibling' => '1',
'sfd' => '0', 'sfd' => '0',
@ -506,7 +506,7 @@ $json_exp = {
'component' => '2', 'component' => '2',
'endpoint' => '198.51.100.4:3001', 'endpoint' => '198.51.100.4:3001',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '0', 'media' => '1',
'ps_flags' => '1179649', 'ps_flags' => '1179649',
'rtcp_sibling' => '4294967295', 'rtcp_sibling' => '4294967295',
'sfd' => '1', 'sfd' => '1',
@ -519,7 +519,7 @@ $json_exp = {
'component' => '1', 'component' => '1',
'endpoint' => '198.51.100.1:3000', 'endpoint' => '198.51.100.1:3000',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '1', 'media' => '0',
'ps_flags' => '1114112', 'ps_flags' => '1114112',
'rtcp_sibling' => '3', 'rtcp_sibling' => '3',
'sfd' => '2', 'sfd' => '2',
@ -532,7 +532,7 @@ $json_exp = {
'component' => '2', 'component' => '2',
'endpoint' => '198.51.100.1:3001', 'endpoint' => '198.51.100.1:3001',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '1', 'media' => '0',
'ps_flags' => '1179649', 'ps_flags' => '1179649',
'rtcp_sibling' => '4294967295', 'rtcp_sibling' => '4294967295',
'sfd' => '3', 'sfd' => '3',
@ -552,11 +552,11 @@ $json_exp = {
'stream_sfds-3' => [ 'stream_sfds-3' => [
'3' '3'
], ],
'streams-0' => [ 'streams-1' => [
'0', '0',
'1' '1'
], ],
'streams-1' => [ 'streams-0' => [
'2', '2',
'3' '3'
], ],
@ -663,13 +663,13 @@ $json_exp = {
'2', '2',
'3' '3'
], ],
'maps-0' => [ 'maps-1' => [
'0' '0'
], ],
'maps-1' => [ 'maps-0' => [
'1' '1'
], ],
'media-0' => { 'media-1' => {
'desired_family' => 'IP4', 'desired_family' => 'IP4',
'format_str' => '8', 'format_str' => '8',
'index' => '1', 'index' => '1',
@ -680,7 +680,7 @@ $json_exp = {
'tag' => '1', 'tag' => '1',
'type' => 'audio' 'type' => 'audio'
}, },
'media-1' => { 'media-0' => {
'desired_family' => 'IP4', 'desired_family' => 'IP4',
'format_str' => '8', 'format_str' => '8',
'index' => '1', 'index' => '1',
@ -691,10 +691,10 @@ $json_exp = {
'tag' => '0', 'tag' => '0',
'type' => 'audio' 'type' => 'audio'
}, },
'medias-0' => [ 'medias-1' => [
'1' '1'
], ],
'medias-1' => [ 'medias-0' => [
'0' '0'
], ],
'payload_types-0' => [ 'payload_types-0' => [
@ -758,7 +758,7 @@ $json_exp = {
'component' => '1', 'component' => '1',
'endpoint' => '198.51.100.4:3000', 'endpoint' => '198.51.100.4:3000',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '0', 'media' => '1',
'ps_flags' => '1114112', 'ps_flags' => '1114112',
'rtcp_sibling' => '1', 'rtcp_sibling' => '1',
'sfd' => '0', 'sfd' => '0',
@ -771,7 +771,7 @@ $json_exp = {
'component' => '2', 'component' => '2',
'endpoint' => '198.51.100.4:3001', 'endpoint' => '198.51.100.4:3001',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '0', 'media' => '1',
'ps_flags' => '1179649', 'ps_flags' => '1179649',
'rtcp_sibling' => '4294967295', 'rtcp_sibling' => '4294967295',
'sfd' => '1', 'sfd' => '1',
@ -784,7 +784,7 @@ $json_exp = {
'component' => '1', 'component' => '1',
'endpoint' => '198.51.100.1:3000', 'endpoint' => '198.51.100.1:3000',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '1', 'media' => '0',
'ps_flags' => '1114112', 'ps_flags' => '1114112',
'rtcp_sibling' => '3', 'rtcp_sibling' => '3',
'sfd' => '2', 'sfd' => '2',
@ -797,7 +797,7 @@ $json_exp = {
'component' => '2', 'component' => '2',
'endpoint' => '198.51.100.1:3001', 'endpoint' => '198.51.100.1:3001',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '1', 'media' => '0',
'ps_flags' => '1179649', 'ps_flags' => '1179649',
'rtcp_sibling' => '4294967295', 'rtcp_sibling' => '4294967295',
'sfd' => '3', 'sfd' => '3',
@ -817,11 +817,11 @@ $json_exp = {
'stream_sfds-3' => [ 'stream_sfds-3' => [
'3' '3'
], ],
'streams-0' => [ 'streams-1' => [
'0', '0',
'1' '1'
], ],
'streams-1' => [ 'streams-0' => [
'2', '2',
'3' '3'
], ],
@ -928,13 +928,13 @@ $json_exp = {
'2', '2',
'3' '3'
], ],
'maps-0' => [ 'maps-1' => [
'0' '0'
], ],
'maps-1' => [ 'maps-0' => [
'1' '1'
], ],
'media-0' => { 'media-1' => {
'desired_family' => 'IP4', 'desired_family' => 'IP4',
'format_str' => '0 8', 'format_str' => '0 8',
'index' => '1', 'index' => '1',
@ -945,7 +945,7 @@ $json_exp = {
'tag' => '1', 'tag' => '1',
'type' => 'audio' 'type' => 'audio'
}, },
'media-1' => { 'media-0' => {
'desired_family' => 'IP4', 'desired_family' => 'IP4',
'format_str' => '0 8', 'format_str' => '0 8',
'index' => '1', 'index' => '1',
@ -956,10 +956,10 @@ $json_exp = {
'tag' => '0', 'tag' => '0',
'type' => 'audio' 'type' => 'audio'
}, },
'medias-0' => [ 'medias-1' => [
'1' '1'
], ],
'medias-1' => [ 'medias-0' => [
'0' '0'
], ],
'payload_types-0' => [ 'payload_types-0' => [
@ -1025,7 +1025,7 @@ $json_exp = {
'component' => '1', 'component' => '1',
'endpoint' => '', 'endpoint' => '',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '0', 'media' => '1',
'ps_flags' => '65536', 'ps_flags' => '65536',
'rtcp_sibling' => '1', 'rtcp_sibling' => '1',
'sfd' => '0', 'sfd' => '0',
@ -1038,7 +1038,7 @@ $json_exp = {
'component' => '2', 'component' => '2',
'endpoint' => '', 'endpoint' => '',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '0', 'media' => '1',
'ps_flags' => '131072', 'ps_flags' => '131072',
'rtcp_sibling' => '4294967295', 'rtcp_sibling' => '4294967295',
'sfd' => '1', 'sfd' => '1',
@ -1051,7 +1051,7 @@ $json_exp = {
'component' => '1', 'component' => '1',
'endpoint' => '198.51.100.14:6088', 'endpoint' => '198.51.100.14:6088',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '1', 'media' => '0',
'ps_flags' => '68222976', 'ps_flags' => '68222976',
'rtcp_sibling' => '3', 'rtcp_sibling' => '3',
'sfd' => '2', 'sfd' => '2',
@ -1064,7 +1064,7 @@ $json_exp = {
'component' => '2', 'component' => '2',
'endpoint' => '198.51.100.14:6089', 'endpoint' => '198.51.100.14:6089',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '1', 'media' => '0',
'ps_flags' => '68288513', 'ps_flags' => '68288513',
'rtcp_sibling' => '4294967295', 'rtcp_sibling' => '4294967295',
'sfd' => '3', 'sfd' => '3',
@ -1084,11 +1084,11 @@ $json_exp = {
'stream_sfds-3' => [ 'stream_sfds-3' => [
'3' '3'
], ],
'streams-0' => [ 'streams-1' => [
'0', '0',
'1' '1'
], ],
'streams-1' => [ 'streams-0' => [
'2', '2',
'3' '3'
], ],
@ -1189,13 +1189,13 @@ $json_exp = {
'2', '2',
'3' '3'
], ],
'maps-0' => [ 'maps-1' => [
'0' '0'
], ],
'maps-1' => [ 'maps-0' => [
'1' '1'
], ],
'media-0' => { 'media-1' => {
'desired_family' => 'IP4', 'desired_family' => 'IP4',
'format_str' => '0 8', 'format_str' => '0 8',
'index' => '1', 'index' => '1',
@ -1206,7 +1206,7 @@ $json_exp = {
'tag' => '1', 'tag' => '1',
'type' => 'audio' 'type' => 'audio'
}, },
'media-1' => { 'media-0' => {
'desired_family' => 'IP4', 'desired_family' => 'IP4',
'format_str' => '0 8', 'format_str' => '0 8',
'index' => '1', 'index' => '1',
@ -1217,10 +1217,10 @@ $json_exp = {
'tag' => '0', 'tag' => '0',
'type' => 'audio' 'type' => 'audio'
}, },
'medias-0' => [ 'medias-1' => [
'1' '1'
], ],
'medias-1' => [ 'medias-0' => [
'0' '0'
], ],
'payload_types-0' => [ 'payload_types-0' => [
@ -1286,7 +1286,7 @@ $json_exp = {
'component' => '1', 'component' => '1',
'endpoint' => '198.51.100.14:6090', 'endpoint' => '198.51.100.14:6090',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '0', 'media' => '1',
'ps_flags' => '1114112', 'ps_flags' => '1114112',
'rtcp_sibling' => '1', 'rtcp_sibling' => '1',
'sfd' => '0', 'sfd' => '0',
@ -1299,7 +1299,7 @@ $json_exp = {
'component' => '2', 'component' => '2',
'endpoint' => '198.51.100.14:6091', 'endpoint' => '198.51.100.14:6091',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '0', 'media' => '1',
'ps_flags' => '1179649', 'ps_flags' => '1179649',
'rtcp_sibling' => '4294967295', 'rtcp_sibling' => '4294967295',
'sfd' => '1', 'sfd' => '1',
@ -1312,7 +1312,7 @@ $json_exp = {
'component' => '1', 'component' => '1',
'endpoint' => '198.51.100.14:6088', 'endpoint' => '198.51.100.14:6088',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '1', 'media' => '0',
'ps_flags' => '1114112', 'ps_flags' => '1114112',
'rtcp_sibling' => '3', 'rtcp_sibling' => '3',
'sfd' => '2', 'sfd' => '2',
@ -1325,7 +1325,7 @@ $json_exp = {
'component' => '2', 'component' => '2',
'endpoint' => '198.51.100.14:6089', 'endpoint' => '198.51.100.14:6089',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '1', 'media' => '0',
'ps_flags' => '1179649', 'ps_flags' => '1179649',
'rtcp_sibling' => '4294967295', 'rtcp_sibling' => '4294967295',
'sfd' => '3', 'sfd' => '3',
@ -1345,11 +1345,11 @@ $json_exp = {
'stream_sfds-3' => [ 'stream_sfds-3' => [
'3' '3'
], ],
'streams-0' => [ 'streams-1' => [
'0', '0',
'1' '1'
], ],
'streams-1' => [ 'streams-0' => [
'2', '2',
'3' '3'
], ],
@ -1476,10 +1476,10 @@ $json_exp = {
'6', '6',
'7' '7'
], ],
'maps-0' => [ 'maps-1' => [
'0' '0'
], ],
'maps-1' => [ 'maps-0' => [
'1' '1'
], ],
'maps-2' => [ 'maps-2' => [
@ -1488,7 +1488,7 @@ $json_exp = {
'maps-3' => [ 'maps-3' => [
'3' '3'
], ],
'media-0' => { 'media-1' => {
'desired_family' => 'IP4', 'desired_family' => 'IP4',
'format_str' => '0 8', 'format_str' => '0 8',
'index' => '1', 'index' => '1',
@ -1499,7 +1499,7 @@ $json_exp = {
'tag' => '1', 'tag' => '1',
'type' => 'audio' 'type' => 'audio'
}, },
'media-1' => { 'media-0' => {
'desired_family' => 'IP4', 'desired_family' => 'IP4',
'format_str' => '0 8', 'format_str' => '0 8',
'index' => '1', 'index' => '1',
@ -1532,10 +1532,10 @@ $json_exp = {
'tag' => '2', 'tag' => '2',
'type' => 'audio' 'type' => 'audio'
}, },
'medias-0' => [ 'medias-1' => [
'1' '1'
], ],
'medias-1' => [ 'medias-0' => [
'0' '0'
], ],
'medias-2' => [ 'medias-2' => [
@ -1658,7 +1658,7 @@ $json_exp = {
'component' => '1', 'component' => '1',
'endpoint' => '198.51.100.14:6090', 'endpoint' => '198.51.100.14:6090',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '0', 'media' => '1',
'ps_flags' => '1114112', 'ps_flags' => '1114112',
'rtcp_sibling' => '1', 'rtcp_sibling' => '1',
'sfd' => '0', 'sfd' => '0',
@ -1671,7 +1671,7 @@ $json_exp = {
'component' => '2', 'component' => '2',
'endpoint' => '198.51.100.14:6091', 'endpoint' => '198.51.100.14:6091',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '0', 'media' => '1',
'ps_flags' => '68288513', 'ps_flags' => '68288513',
'rtcp_sibling' => '4294967295', 'rtcp_sibling' => '4294967295',
'sfd' => '1', 'sfd' => '1',
@ -1684,7 +1684,7 @@ $json_exp = {
'component' => '1', 'component' => '1',
'endpoint' => '198.51.100.14:6088', 'endpoint' => '198.51.100.14:6088',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '1', 'media' => '0',
'ps_flags' => '1114112', 'ps_flags' => '1114112',
'rtcp_sibling' => '3', 'rtcp_sibling' => '3',
'sfd' => '2', 'sfd' => '2',
@ -1697,7 +1697,7 @@ $json_exp = {
'component' => '2', 'component' => '2',
'endpoint' => '198.51.100.14:6089', 'endpoint' => '198.51.100.14:6089',
'last_packet' => qr/^\d+$/, 'last_packet' => qr/^\d+$/,
'media' => '1', 'media' => '0',
'ps_flags' => '68288513', 'ps_flags' => '68288513',
'rtcp_sibling' => '4294967295', 'rtcp_sibling' => '4294967295',
'sfd' => '3', 'sfd' => '3',
@ -1781,11 +1781,11 @@ $json_exp = {
'stream_sfds-7' => [ 'stream_sfds-7' => [
'7' '7'
], ],
'streams-0' => [ 'streams-1' => [
'0', '0',
'1' '1'
], ],
'streams-1' => [ 'streams-0' => [
'2', '2',
'3' '3'
], ],
@ -1804,7 +1804,7 @@ $json_exp = {
'0/1/0/0' '0/1/0/0'
], ],
'media-subscriptions-2' => [ 'media-subscriptions-2' => [
'1/0/0/0' '0/0/0/0'
], ],
'tag-0' => { 'tag-0' => {
'block_dtmf' => '0', 'block_dtmf' => '0',
@ -1856,8 +1856,8 @@ a=rtcp:PORT
SDP SDP
$json_exp->{'media-0'}{media_flags} = '2293772'; $json_exp->{'media-1'}{media_flags} = '2293772';
$json_exp->{'media-1'}{media_flags} = '65548'; $json_exp->{'media-0'}{media_flags} = '65548';
$json_exp->{'media-2'}{format_str} = '8'; $json_exp->{'media-2'}{format_str} = '8';
$json_exp->{'media-2'}{media_flags} = '2162692'; $json_exp->{'media-2'}{media_flags} = '2162692';
$json_exp->{'media-3'}{format_str} = '8'; $json_exp->{'media-3'}{format_str} = '8';
@ -1899,7 +1899,6 @@ SDP
new_call; new_call;
$json_exp = { $json_exp = {

@ -4884,33 +4884,33 @@ SDP
subscribe_request('AMR asymmetric', {flags => [qw/SIPREC all/]}, <<SDP); subscribe_request('AMR asymmetric', {flags => [qw/SIPREC all/]}, <<SDP);
v=0 v=0
o=test SDP_VERSION IN IP4 10.104.1.81 o=ccs-0-615-7 SDP_VERSION IN IP4 10.104.1.81
s=- s=-
t=0 0 t=0 0
m=audio PORT RTP/AVP 96 98 m=audio PORT RTP/AVP 118 98
c=IN IP4 203.0.113.1 c=IN IP4 203.0.113.1
b=AS:80
b=RR:1087 b=RR:1087
b=RS:362 b=RS:362
a=label:0 a=label:0
a=rtpmap:96 AMR/8000 a=rtpmap:118 AMR/8000
a=fmtp:96 mode-set=0,2,4,7;mode-change-period=2;mode-change-capability=2;mode-change-neighbor=1;max-red=0 a=fmtp:118 mode-set=0,2,4,7;mode-change-period=2;mode-change-capability=2;mode-change-neighbor=1;max-red=0
a=rtpmap:98 telephone-event/8000 a=rtpmap:98 telephone-event/8000
a=fmtp:98 0-15 a=fmtp:98 0-15
a=msi:mavodi-0-15b-6c6-2-ffffffff-d3c00000-6005c95738e64-171f-ffffffffffffffff-@127.0.0.1-127.0.0.1;UAG-ELL-45-108
a=sendonly a=sendonly
a=rtcp:PORT a=rtcp:PORT
a=ptime:20 a=ptime:20
a=maxptime:40 a=maxptime:40
m=audio PORT RTP/AVP 118 98 m=audio PORT RTP/AVP 96 98
c=IN IP4 203.0.113.1 c=IN IP4 203.0.113.1
b=AS:80
b=RR:1087 b=RR:1087
b=RS:362 b=RS:362
a=label:1 a=label:1
a=rtpmap:118 AMR/8000 a=rtpmap:96 AMR/8000
a=fmtp:118 mode-set=0,2,4,7;mode-change-period=2;mode-change-capability=2;mode-change-neighbor=1;max-red=0 a=fmtp:96 mode-set=0,2,4,7;mode-change-period=2;mode-change-capability=2;mode-change-neighbor=1;max-red=0
a=rtpmap:98 telephone-event/8000 a=rtpmap:98 telephone-event/8000
a=fmtp:98 0-15 a=fmtp:98 0-15
a=msi:mavodi-0-15b-6c6-2-ffffffff-d3c00000-6005c95738e64-171f-ffffffffffffffff-@127.0.0.1-127.0.0.1;UAG-ELL-45-108
a=sendonly a=sendonly
a=rtcp:PORT a=rtcp:PORT
a=ptime:20 a=ptime:20

Loading…
Cancel
Save