Skip to content

Commit 0c15b4e

Browse files
author
evgeny-nadymov
committed
Fix sdp parsing
1 parent eab6aeb commit 0c15b4e

4 files changed

Lines changed: 72 additions & 70 deletions

File tree

‎src/Calls/P2P/ChromeP2PSdpBuilder.js‎

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ a=msid-semantic: WMS *`;
3636
const streamName = 'stream' + media.map(x => x.ssrc).join('_');
3737
for (let i = 0; i < media.length; i++) {
3838
const m = media[i];
39-
const { type, ssrc, ssrcGroup, types, dir, mid, extmap } = m;
39+
const { type, ssrc, ssrcGroups, payloadTypes, dir, mid, rtpExtensions } = m;
4040
switch (type) {
4141
case 'application': {
4242
const { port, maxSize } = m;
@@ -51,12 +51,12 @@ a=max-message-size:${maxSize}`;
5151
}
5252
case 'audio': {
5353
sdp += `
54-
m=audio 56930 UDP/TLS/RTP/SAVPF ${types.map(x => x.id).join(' ')}
54+
m=audio 56930 UDP/TLS/RTP/SAVPF ${payloadTypes.map(x => x.id).join(' ')}
5555
c=IN IP4 0.0.0.0
5656
a=rtcp:9 IN IP4 0.0.0.0
5757
a=ice-options:trickle
5858
a=mid:${mid}`;
59-
sdp += addExtmap(extmap);
59+
sdp += addExtmap(rtpExtensions);
6060
if (dir) {
6161
sdp += `
6262
a=${dir}`;
@@ -67,19 +67,19 @@ a=msid:${streamName} audio${ssrc}`;
6767
}
6868
sdp += `
6969
a=rtcp-mux`;
70-
sdp += addPayloadTypes(types);
71-
sdp += addSsrc(type, ssrc, ssrcGroup, streamName);
70+
sdp += addPayloadTypes(payloadTypes);
71+
sdp += addSsrc(type, ssrc, ssrcGroups, streamName);
7272

7373
break;
7474
}
7575
case 'video': {
7676
sdp += `
77-
m=video 61986 UDP/TLS/RTP/SAVPF ${types.map(x => x.id).join(' ')}
77+
m=video 61986 UDP/TLS/RTP/SAVPF ${payloadTypes.map(x => x.id).join(' ')}
7878
c=IN IP4 0.0.0.0
7979
a=rtcp:9 IN IP4 0.0.0.0
8080
a=ice-options:trickle
8181
a=mid:${mid}`;
82-
sdp += addExtmap(extmap);
82+
sdp += addExtmap(rtpExtensions);
8383
if (dir) {
8484
sdp += `
8585
a=${dir}`;
@@ -91,8 +91,8 @@ a=msid:${streamName} video${ssrc}`;
9191
sdp += `
9292
a=rtcp-mux
9393
a=rtcp-rsize`;
94-
sdp += addPayloadTypes(types);
95-
sdp += addSsrc(type, ssrc, ssrcGroup, streamName);
94+
sdp += addPayloadTypes(payloadTypes);
95+
sdp += addSsrc(type, ssrc, ssrcGroups, streamName);
9696
break;
9797
}
9898
}
@@ -131,7 +131,7 @@ a=msid-semantic: WMS *`;
131131
const streamName = 'stream' + media.map(x => x.ssrc).join('_');
132132
for (let i = 0; i < media.length; i++) {
133133
const m = media[i];
134-
const { type, mid, ssrc, ssrcGroup, types, dir, extmap } = m;
134+
const { type, mid, ssrc, ssrcGroups, payloadTypes, dir, rtpExtensions } = m;
135135
switch (type) {
136136
case 'application': {
137137
const { port, maxSize } = m;
@@ -146,12 +146,12 @@ a=max-message-size:${maxSize}`;
146146
}
147147
case 'audio': {
148148
sdp += `
149-
m=audio 56930 UDP/TLS/RTP/SAVPF ${types.map(x => x.id).join(' ')}
149+
m=audio 56930 UDP/TLS/RTP/SAVPF ${payloadTypes.map(x => x.id).join(' ')}
150150
c=IN IP4 0.0.0.0
151151
a=rtcp:9 IN IP4 0.0.0.0
152152
a=ice-options:trickle
153153
a=mid:${mid}`;
154-
sdp += addExtmap(extmap);
154+
sdp += addExtmap(rtpExtensions);
155155
if (dir) {
156156
sdp += `
157157
a=${dir}`;
@@ -162,18 +162,18 @@ a=msid:${streamName} audio${ssrc}`;
162162
}
163163
sdp += `
164164
a=rtcp-mux`;
165-
sdp += addPayloadTypes(types);
166-
sdp += addSsrc(type, ssrc, ssrcGroup, streamName);
165+
sdp += addPayloadTypes(payloadTypes);
166+
sdp += addSsrc(type, ssrc, ssrcGroups, streamName);
167167
break;
168168
}
169169
case 'video': {
170170
sdp += `
171-
m=video 61986 UDP/TLS/RTP/SAVPF ${types.map(x => x.id).join(' ')}
171+
m=video 61986 UDP/TLS/RTP/SAVPF ${payloadTypes.map(x => x.id).join(' ')}
172172
c=IN IP4 0.0.0.0
173173
a=rtcp:9 IN IP4 0.0.0.0
174174
a=ice-options:trickle
175175
a=mid:${mid}`;
176-
sdp += addExtmap(extmap);
176+
sdp += addExtmap(rtpExtensions);
177177
if (dir) {
178178
sdp += `
179179
a=${dir}`;
@@ -185,8 +185,8 @@ a=msid:${streamName} video${ssrc}`;
185185
sdp += `
186186
a=rtcp-mux
187187
a=rtcp-rsize`;
188-
sdp += addPayloadTypes(types);
189-
sdp += addSsrc(type, ssrc, ssrcGroup, streamName);
188+
sdp += addPayloadTypes(payloadTypes);
189+
sdp += addSsrc(type, ssrc, ssrcGroups, streamName);
190190
break;
191191
}
192192
}

‎src/Calls/P2P/FirefoxP2PSdpBuilder.js‎

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ a=msid-semantic:WMS *`;
3535
const streamName = 'stream' + media.map(x => x.ssrc).join('_');
3636
for (let i = 0; i < media.length; i++) {
3737
const m = media[i];
38-
const { type, mid, ssrc, ssrcGroup, types, dir, extmap } = m;
38+
const { type, mid, ssrc, ssrcGroups, payloadTypes, dir, rtpExtensions } = m;
3939
switch (type) {
4040
case 'application': {
4141
const { port, maxSize } = m;
@@ -50,36 +50,36 @@ a=max-message-size:${maxSize}`;
5050
}
5151
case 'audio': {
5252
sdp += `
53-
m=audio 9 UDP/TLS/RTP/SAVPF ${types.map(x => x.id).join(' ')}
53+
m=audio 9 UDP/TLS/RTP/SAVPF ${payloadTypes.map(x => x.id).join(' ')}
5454
c=IN IP4 0.0.0.0
5555
a=mid:${mid}`;
5656
if (dir) {
5757
sdp += `
5858
a=${dir}`;
5959
}
60-
sdp += addExtmap(extmap);
60+
sdp += addExtmap(rtpExtensions);
6161
sdp += `
6262
a=rtcp-mux`;
63-
sdp += addPayloadTypes(types);
64-
sdp += addSsrc(type, ssrc, ssrcGroup, streamName);
63+
sdp += addPayloadTypes(payloadTypes);
64+
sdp += addSsrc(type, ssrc, ssrcGroups, streamName);
6565

6666
break;
6767
}
6868
case 'video': {
6969
sdp += `
70-
m=video 9 UDP/TLS/RTP/SAVPF ${types.map(x => x.id).join(' ')}
70+
m=video 9 UDP/TLS/RTP/SAVPF ${payloadTypes.map(x => x.id).join(' ')}
7171
c=IN IP4 0.0.0.0
7272
a=mid:${mid}`;
7373
if (dir) {
7474
sdp += `
7575
a=${dir}`;
7676
}
77-
sdp += addExtmap(extmap);
77+
sdp += addExtmap(rtpExtensions);
7878
sdp += `
7979
a=rtcp-mux
8080
a=rtcp-rsize`;
81-
sdp += addPayloadTypes(types);
82-
sdp += addSsrc(type, ssrc, ssrcGroup, streamName);
81+
sdp += addPayloadTypes(payloadTypes);
82+
sdp += addSsrc(type, ssrc, ssrcGroups, streamName);
8383

8484
break;
8585
}
@@ -118,7 +118,7 @@ a=msid-semantic:WMS *`;
118118
const streamName = 'stream' + media.map(x => x.ssrc).join('_');
119119
for (let i = 0; i < media.length; i++) {
120120
const m = media[i];
121-
const { type, mid, ssrc, ssrcGroup, types, dir, extmap } = m;
121+
const { type, mid, ssrc, ssrcGroups, payloadTypes, dir, rtpExtensions } = m;
122122
switch (type) {
123123
case 'application': {
124124
const { port, maxSize } = m;
@@ -133,36 +133,36 @@ a=max-message-size:${maxSize}`;
133133
}
134134
case 'audio': {
135135
sdp += `
136-
m=audio 9 UDP/TLS/RTP/SAVPF ${types.map(x => x.id).join(' ')}
136+
m=audio 9 UDP/TLS/RTP/SAVPF ${payloadTypes.map(x => x.id).join(' ')}
137137
c=IN IP4 0.0.0.0
138138
a=mid:${mid}`;
139139
if (dir) {
140140
sdp += `
141141
a=${dir}`;
142142
}
143-
sdp += addExtmap(extmap);
143+
sdp += addExtmap(rtpExtensions);
144144
sdp += `
145145
a=rtcp-mux`;
146-
sdp += addPayloadTypes(types);
147-
sdp += addSsrc(type, ssrc, ssrcGroup, streamName);
146+
sdp += addPayloadTypes(payloadTypes);
147+
sdp += addSsrc(type, ssrc, ssrcGroups, streamName);
148148

149149
break;
150150
}
151151
case 'video': {
152152
sdp += `
153-
m=video 9 UDP/TLS/RTP/SAVPF ${types.map(x => x.id).join(' ')}
153+
m=video 9 UDP/TLS/RTP/SAVPF ${payloadTypes.map(x => x.id).join(' ')}
154154
c=IN IP4 0.0.0.0
155155
a=mid:${mid}`;
156156
if (dir) {
157157
sdp += `
158158
a=${dir}`;
159159
}
160-
sdp += addExtmap(extmap);
160+
sdp += addExtmap(rtpExtensions);
161161
sdp += `
162162
a=rtcp-mux
163163
a=rtcp-rsize`;
164-
sdp += addPayloadTypes(types);
165-
sdp += addSsrc(type, ssrc, ssrcGroup, streamName);
164+
sdp += addPayloadTypes(payloadTypes);
165+
sdp += addSsrc(type, ssrc, ssrcGroups, streamName);
166166
break;
167167
}
168168
}

‎src/Calls/P2P/P2PSdpBuilder.js‎

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,8 @@ export function p2pParseSdp(sdp) {
168168
type: lookup('m=', true, mediaIndex, nextMediaIndex).split(' ')[0],
169169
mid: lookup('a=mid:', true, mediaIndex, nextMediaIndex),
170170
dir: findDirection(mediaIndex, nextMediaIndex),
171-
extmap,
172-
types
171+
rtpExtensions: extmap,
172+
payloadTypes: types
173173
}
174174

175175
if (media.type === 'application') {
@@ -189,8 +189,8 @@ export function p2pParseSdp(sdp) {
189189
for (let i = mediaIndex; i < lineTo; i++) {
190190
const line = lines[i];
191191
if (line.startsWith('a=extmap:')) {
192-
const [ id, value ] = line.substr('a=extmap:'.length).split(' ');
193-
extmap.push({ [id]: value });
192+
const [ id, uri ] = line.substr('a=extmap:'.length).split(' ');
193+
extmap.push({ id: parseInt(id), uri });
194194
} else if (line.startsWith('a=fmtp:')) {
195195
const [ id, str ] = line.substr('a=fmtp:'.length).split(' ');
196196
const arr = str.split(';').map(x => {
@@ -232,10 +232,10 @@ export function p2pParseSdp(sdp) {
232232
const ssrcGroup = lookup('a=ssrc-group:', false, mediaIndex, nextMediaIndex);
233233
if (ssrcGroup) {
234234
const [ semantics, ...ssrcs ] = ssrcGroup.split(' ');
235-
media.ssrcGroup = {
235+
media.ssrcGroups = [{
236236
semantics,
237237
ssrcs: ssrcs.map(x => parseInt(x))
238-
}
238+
}]
239239
}
240240

241241
info.media.push(media);
@@ -260,10 +260,9 @@ export function addExtmap(extmap) {
260260

261261
for (let j = 0; j < extmap.length; j++) {
262262
const ext = extmap[j];
263-
Object.getOwnPropertyNames(ext).forEach(x => {
264-
sdp += `
265-
a=extmap:${x} ${ext[x]}`;
266-
});
263+
const { id, uri } = ext;
264+
sdp += `
265+
a=extmap:${id} ${uri}`;
267266
}
268267

269268
return sdp;
@@ -300,20 +299,23 @@ a=fmtp:${id} ${fmtp.join(';')}`;
300299
return sdp;
301300
}
302301

303-
export function addSsrc(type, ssrc, ssrcGroup, streamName) {
302+
export function addSsrc(type, ssrc, ssrcGroups, streamName) {
304303
let sdp = '';
305304

306-
if (ssrcGroup && ssrcGroup.ssrcs.length > 0) {
307-
sdp += `
305+
if (ssrcGroups && ssrcGroups.length > 0) {
306+
ssrcGroups.forEach(ssrcGroup => {
307+
if (ssrcGroup && ssrcGroup.ssrcs.length > 0) {
308+
sdp += `
308309
a=ssrc-group:${ssrcGroup.semantics} ${ssrcGroup.ssrcs.join(' ')}`;
309-
ssrcGroup.ssrcs.forEach(ssrc => {
310-
sdp += `
310+
ssrcGroup.ssrcs.forEach(ssrc => {
311+
sdp += `
311312
a=ssrc:${ssrc} cname:stream${ssrc}
312313
a=ssrc:${ssrc} msid:${streamName} ${type}${ssrc}
313314
a=ssrc:${ssrc} mslabel:${type}${ssrc}
314315
a=ssrc:${ssrc} label:${type}${ssrc}`;
316+
});
317+
}
315318
});
316-
317319
} else if (ssrc) {
318320
sdp += `
319321
a=ssrc:${ssrc} cname:stream${ssrc}

0 commit comments

Comments
 (0)