| 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) {
|
| + 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;
|
|
|