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; |