Chromium Code Reviews| Index: chrome/test/data/webrtc/munge_sdp.js |
| diff --git a/chrome/test/data/webrtc/munge_sdp.js b/chrome/test/data/webrtc/munge_sdp.js |
| index c2c7d9b6e86af648cc7a8bb16b42a4db3016e87f..f18a0ccb336e8a5e2f2a7f6d78d094ecdbd5c0d0 100644 |
| --- a/chrome/test/data/webrtc/munge_sdp.js |
| +++ b/chrome/test/data/webrtc/munge_sdp.js |
| @@ -5,6 +5,66 @@ |
| */ |
| /** |
| + * Parses the SDP to find all streams, tracks and stream-track relationships. |
| + * Returns "{ streamIds, trackIds, streamTrackMap }" where |streamIds| and |
| + * |trackIds| are |Set| of IDs and |streamTrackMap| is a string-set |Map| from |
| + * stream IDs to track IDs (which tracks are members of which streams). |
| + * |
| + * @param {string} sdp |
| + */ |
| +function getSdpStreamsAndTracks(sdp) { |
|
Taylor_Brandstetter
2017/07/06 22:45:14
Relying on SDP parsing in this test is somewhat fr
hbos_chromium
2017/07/07 12:07:48
Good point. Done. Removed SDP usage from test, and
|
| + let sdpLines = splitSdpLines(sdp); |
| + let streamIds = new Set(); |
| + let trackIds = new Set(); |
| + // Find streams and tracks. |
| + // a=ssrc:<ssrc> mslabel:<stream id> |
| + // a=ssrc:<ssrc> label:<track id> |
| + for (let lineNo = 0; lineNo = findLine(sdpLines, 'a=ssrc:', lineNo); |
| + lineNo++) { |
| + let line = sdpLines[lineNo]; |
| + let tokens = line.split(' '); |
| + if (tokens.length !== 2) |
| + continue; |
| + if (tokens[1].startsWith('mslabel:')) { |
| + streamIds.add(tokens[1].substring(8)); |
| + } else if (tokens[1].startsWith('label:')) { |
| + trackIds.add(tokens[1].substring(6)); |
| + } |
| + } |
| + // Find stream and track relationships. |
| + // a=ssrc:<ssrc> msid:<stream id> <track id> |
| + let streamTrackMap = new Map(); |
| + for (let lineNo = 0; lineNo = findLine(sdpLines, 'a=ssrc:', lineNo); |
| + lineNo++) { |
| + let line = sdpLines[lineNo]; |
| + let tokens = line.split(' '); |
| + if (tokens.length !== 3) |
| + continue; |
| + let ssrc = parseInt(tokens[0].substring(7)); |
| + if (!tokens[1].startsWith('msid:')) |
| + failure('getSdpStreamsAndTracks', 'Expected \'msid:<stream id>\'.'); |
| + let streamId = tokens[1].substring(5); |
| + if (!streamIds.has(streamId)) { |
| + failure( |
| + 'getSdpStreamsAndTracks', |
| + 'Unknown stream ID \'' + streamId + '\' (\'mslabel\' line missing).'); |
| + } |
| + let trackId = tokens[2]; |
| + if (!trackIds.has(trackId)) { |
| + failure('getSdpStreamsAndTracks', |
| + 'Unknown track ID \'' + trackId + '\' (\'label\' line missing).'); |
| + } |
| + if (!streamTrackMap.has(streamId)) |
| + streamTrackMap.set(streamId, new Set([ trackId ])); |
| + else |
| + streamTrackMap.get(streamId).add(trackId); |
| + } |
| + return { streamIds:streamIds, |
| + trackIds:trackIds, |
| + streamTrackMap:streamTrackMap }; |
| +} |
| + |
| +/** |
| * See |setSdpDefaultCodec|. |
| */ |
| function setSdpDefaultAudioCodec(sdp, codec) { |
| @@ -29,7 +89,7 @@ function setOpusDtxEnabled(sdp) { |
| var defaultCodec = getSdpDefaultAudioCodec(sdp); |
| if (defaultCodec !== 'opus') { |
| failure('setOpusDtxEnabled', |
| - 'Default audio codec is not set to \'opus\'.'); |
| + 'Default audio codec is not set to \'opus\'.'); |
| } |
| // Find codec ID for Opus, e.g. 111 if 'a=rtpmap:111 opus/48000/2'. |
| @@ -64,14 +124,15 @@ function setSdpDefaultCodec(sdp, type, codec) { |
| // Find codec ID, e.g. 100 for 'VP8' if 'a=rtpmap:100 VP8/9000'. |
| var codecId = findRtpmapId(sdpLines, codec); |
| if (codecId === null) { |
| - failure('sdpPreferCodec', 'Unknown ID for |codec| = \'' + codec + '\'.'); |
| + failure('setSdpDefaultCodec', |
| + 'Unknown ID for |codec| = \'' + codec + '\'.'); |
| } |
| // Find 'm=|type|' line, e.g. 'm=video 9 UDP/TLS/RTP/SAVPF 100 101 107 116'. |
| var mLineNo = findLine(sdpLines, 'm=' + type); |
| if (mLineNo === null) { |
| failure('setSdpDefaultCodec', |
| - '\'m=' + type + '\' line missing from |sdp|.'); |
| + '\'m=' + type + '\' line missing from |sdp|.'); |
| } |
| // Modify video line to use the desired codec as the default. |
| @@ -106,21 +167,21 @@ function getSdpDefaultCodec(sdp, type) { |
| var mLineNo = findLine(sdpLines, 'm=' + type); |
| if (mLineNo === null) { |
| failure('getSdpDefaultCodec', |
| - '\'m=' + type + '\' line missing from |sdp|.'); |
| + '\'m=' + type + '\' line missing from |sdp|.'); |
| } |
| // The default codec's ID. |
| var defaultCodecId = getMLineDefaultCodec(sdpLines[mLineNo]); |
| if (defaultCodecId === null) { |
| failure('getSdpDefaultCodec', |
| - '\'m=' + type + '\' line contains no codecs.'); |
| + '\'m=' + type + '\' line contains no codecs.'); |
| } |
| // Find codec name, e.g. 'VP8' for 100 if 'a=rtpmap:100 VP8/9000'. |
| var defaultCodec = findRtpmapCodec(sdpLines, defaultCodecId); |
| if (defaultCodec === null) { |
| failure('getSdpDefaultCodec', |
| - 'Unknown codec name for default codec ' + defaultCodecId + '.'); |
| + 'Unknown codec name for default codec ' + defaultCodecId + '.'); |
| } |
| return defaultCodec; |
| } |
| @@ -244,9 +305,9 @@ function mergeSdpLines(sdpLines) { |
| } |
| /** @private */ |
| -function findLine(lines, startsWith) { |
| - for (var i = 0; i < lines.length; i++) { |
| - if (lines[i].startsWith(startsWith)) |
| +function findLine(lines, lineStartsWith, startingLine = 0) { |
| + for (var i = startingLine; i < lines.length; i++) { |
| + if (lines[i].startsWith(lineStartsWith)) |
| return i; |
| } |
| return null; |