Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(351)

Side by Side Diff: talk/app/webrtc/webrtcsdp_unittest.cc

Issue 1688383002: Implementing unified plan encoding of msid. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fixing a comment. Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« talk/app/webrtc/webrtcsdp.cc ('K') | « talk/app/webrtc/webrtcsdp.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * libjingle 2 * libjingle
3 * Copyright 2011 Google Inc. 3 * Copyright 2011 Google Inc.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met: 6 * modification, are permitted provided that the following conditions are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright notice, 8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright notice, 10 * 2. Redistributions in binary form must reproduce the above copyright notice,
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 using webrtc::JsepSessionDescription; 74 using webrtc::JsepSessionDescription;
75 using webrtc::SdpParseError; 75 using webrtc::SdpParseError;
76 using webrtc::SessionDescriptionInterface; 76 using webrtc::SessionDescriptionInterface;
77 77
78 typedef std::vector<AudioCodec> AudioCodecs; 78 typedef std::vector<AudioCodec> AudioCodecs;
79 typedef std::vector<Candidate> Candidates; 79 typedef std::vector<Candidate> Candidates;
80 80
81 static const uint32_t kDefaultSctpPort = 5000; 81 static const uint32_t kDefaultSctpPort = 5000;
82 static const char kSessionTime[] = "t=0 0\r\n"; 82 static const char kSessionTime[] = "t=0 0\r\n";
83 static const uint32_t kCandidatePriority = 2130706432U; // pref = 1.0 83 static const uint32_t kCandidatePriority = 2130706432U; // pref = 1.0
84 static const char kCandidateUfragVoice[] = "ufrag_voice";
85 static const char kCandidatePwdVoice[] = "pwd_voice";
86 static const char kAttributeIceUfragVoice[] = "a=ice-ufrag:ufrag_voice\r\n"; 84 static const char kAttributeIceUfragVoice[] = "a=ice-ufrag:ufrag_voice\r\n";
87 static const char kAttributeIcePwdVoice[] = "a=ice-pwd:pwd_voice\r\n"; 85 static const char kAttributeIcePwdVoice[] = "a=ice-pwd:pwd_voice\r\n";
88 static const char kCandidateUfragVideo[] = "ufrag_video";
89 static const char kCandidatePwdVideo[] = "pwd_video";
90 static const char kCandidateUfragData[] = "ufrag_data";
91 static const char kCandidatePwdData[] = "pwd_data";
92 static const char kAttributeIceUfragVideo[] = "a=ice-ufrag:ufrag_video\r\n"; 86 static const char kAttributeIceUfragVideo[] = "a=ice-ufrag:ufrag_video\r\n";
93 static const char kAttributeIcePwdVideo[] = "a=ice-pwd:pwd_video\r\n"; 87 static const char kAttributeIcePwdVideo[] = "a=ice-pwd:pwd_video\r\n";
94 static const uint32_t kCandidateGeneration = 2; 88 static const uint32_t kCandidateGeneration = 2;
95 static const char kCandidateFoundation1[] = "a0+B/1"; 89 static const char kCandidateFoundation1[] = "a0+B/1";
96 static const char kCandidateFoundation2[] = "a0+B/2"; 90 static const char kCandidateFoundation2[] = "a0+B/2";
97 static const char kCandidateFoundation3[] = "a0+B/3"; 91 static const char kCandidateFoundation3[] = "a0+B/3";
98 static const char kCandidateFoundation4[] = "a0+B/4"; 92 static const char kCandidateFoundation4[] = "a0+B/4";
99 static const char kAttributeCryptoVoice[] = 93 static const char kAttributeCryptoVoice[] =
100 "a=crypto:1 AES_CM_128_HMAC_SHA1_32 " 94 "a=crypto:1 AES_CM_128_HMAC_SHA1_32 "
101 "inline:NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj|2^20|1:32 " 95 "inline:NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj|2^20|1:32 "
(...skipping 21 matching lines...) Expand all
123 struct CodecParams { 117 struct CodecParams {
124 int max_ptime; 118 int max_ptime;
125 int ptime; 119 int ptime;
126 int min_ptime; 120 int min_ptime;
127 int sprop_stereo; 121 int sprop_stereo;
128 int stereo; 122 int stereo;
129 int useinband; 123 int useinband;
130 int maxaveragebitrate; 124 int maxaveragebitrate;
131 }; 125 };
132 126
127 // TODO(deadbeef): In these reference strings, use "a=fingerprint" by default
128 // instead of "a=crypto", and have an explicit test for adding "a=crypto".
129 // Currently it's the other way around.
130
133 // Reference sdp string 131 // Reference sdp string
134 static const char kSdpFullString[] = 132 static const char kSdpFullString[] =
135 "v=0\r\n" 133 "v=0\r\n"
136 "o=- 18446744069414584320 18446462598732840960 IN IP4 127.0.0.1\r\n" 134 "o=- 18446744069414584320 18446462598732840960 IN IP4 127.0.0.1\r\n"
137 "s=-\r\n" 135 "s=-\r\n"
138 "t=0 0\r\n" 136 "t=0 0\r\n"
139 "a=msid-semantic: WMS local_stream_1 local_stream_2\r\n" 137 "a=msid-semantic: WMS local_stream_1\r\n"
140 "m=audio 2345 RTP/SAVPF 111 103 104\r\n" 138 "m=audio 2345 RTP/SAVPF 111 103 104\r\n"
141 "c=IN IP4 74.125.127.126\r\n" 139 "c=IN IP4 74.125.127.126\r\n"
142 "a=rtcp:2347 IN IP4 74.125.127.126\r\n" 140 "a=rtcp:2347 IN IP4 74.125.127.126\r\n"
143 "a=candidate:a0+B/1 1 udp 2130706432 192.168.1.5 1234 typ host " 141 "a=candidate:a0+B/1 1 udp 2130706432 192.168.1.5 1234 typ host "
144 "generation 2\r\n" 142 "generation 2\r\n"
145 "a=candidate:a0+B/1 2 udp 2130706432 192.168.1.5 1235 typ host " 143 "a=candidate:a0+B/1 2 udp 2130706432 192.168.1.5 1235 typ host "
146 "generation 2\r\n" 144 "generation 2\r\n"
147 "a=candidate:a0+B/2 1 udp 2130706432 ::1 1238 typ host " 145 "a=candidate:a0+B/2 1 udp 2130706432 ::1 1238 typ host "
148 "generation 2\r\n" 146 "generation 2\r\n"
149 "a=candidate:a0+B/2 2 udp 2130706432 ::1 1239 typ host " 147 "a=candidate:a0+B/2 2 udp 2130706432 ::1 1239 typ host "
(...skipping 12 matching lines...) Expand all
162 "a=crypto:1 AES_CM_128_HMAC_SHA1_32 " 160 "a=crypto:1 AES_CM_128_HMAC_SHA1_32 "
163 "inline:NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj|2^20|1:32 " 161 "inline:NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj|2^20|1:32 "
164 "dummy_session_params\r\n" 162 "dummy_session_params\r\n"
165 "a=rtpmap:111 opus/48000/2\r\n" 163 "a=rtpmap:111 opus/48000/2\r\n"
166 "a=rtpmap:103 ISAC/16000\r\n" 164 "a=rtpmap:103 ISAC/16000\r\n"
167 "a=rtpmap:104 ISAC/32000\r\n" 165 "a=rtpmap:104 ISAC/32000\r\n"
168 "a=ssrc:1 cname:stream_1_cname\r\n" 166 "a=ssrc:1 cname:stream_1_cname\r\n"
169 "a=ssrc:1 msid:local_stream_1 audio_track_id_1\r\n" 167 "a=ssrc:1 msid:local_stream_1 audio_track_id_1\r\n"
170 "a=ssrc:1 mslabel:local_stream_1\r\n" 168 "a=ssrc:1 mslabel:local_stream_1\r\n"
171 "a=ssrc:1 label:audio_track_id_1\r\n" 169 "a=ssrc:1 label:audio_track_id_1\r\n"
172 "a=ssrc:4 cname:stream_2_cname\r\n"
173 "a=ssrc:4 msid:local_stream_2 audio_track_id_2\r\n"
174 "a=ssrc:4 mslabel:local_stream_2\r\n"
175 "a=ssrc:4 label:audio_track_id_2\r\n"
Taylor Brandstetter 2016/02/12 02:20:10 I removed the extra tracks from the base reference
176 "m=video 3457 RTP/SAVPF 120\r\n" 170 "m=video 3457 RTP/SAVPF 120\r\n"
177 "c=IN IP4 74.125.224.39\r\n" 171 "c=IN IP4 74.125.224.39\r\n"
178 "a=rtcp:3456 IN IP4 74.125.224.39\r\n" 172 "a=rtcp:3456 IN IP4 74.125.224.39\r\n"
179 "a=candidate:a0+B/1 2 udp 2130706432 192.168.1.5 1236 typ host " 173 "a=candidate:a0+B/1 2 udp 2130706432 192.168.1.5 1236 typ host "
180 "generation 2\r\n" 174 "generation 2\r\n"
181 "a=candidate:a0+B/1 1 udp 2130706432 192.168.1.5 1237 typ host " 175 "a=candidate:a0+B/1 1 udp 2130706432 192.168.1.5 1237 typ host "
182 "generation 2\r\n" 176 "generation 2\r\n"
183 "a=candidate:a0+B/2 2 udp 2130706432 ::1 1240 typ host " 177 "a=candidate:a0+B/2 2 udp 2130706432 ::1 1240 typ host "
184 "generation 2\r\n" 178 "generation 2\r\n"
185 "a=candidate:a0+B/2 1 udp 2130706432 ::1 1241 typ host " 179 "a=candidate:a0+B/2 1 udp 2130706432 ::1 1241 typ host "
186 "generation 2\r\n" 180 "generation 2\r\n"
187 "a=candidate:a0+B/4 2 udp 2130706432 74.125.224.39 3456 typ relay " 181 "a=candidate:a0+B/4 2 udp 2130706432 74.125.224.39 3456 typ relay "
188 "generation 2\r\n" 182 "generation 2\r\n"
189 "a=candidate:a0+B/4 1 udp 2130706432 74.125.224.39 3457 typ relay " 183 "a=candidate:a0+B/4 1 udp 2130706432 74.125.224.39 3457 typ relay "
190 "generation 2\r\n" 184 "generation 2\r\n"
191 "a=ice-ufrag:ufrag_video\r\na=ice-pwd:pwd_video\r\n" 185 "a=ice-ufrag:ufrag_video\r\na=ice-pwd:pwd_video\r\n"
192 "a=mid:video_content_name\r\n" 186 "a=mid:video_content_name\r\n"
193 "a=sendrecv\r\n" 187 "a=sendrecv\r\n"
194 "a=crypto:1 AES_CM_128_HMAC_SHA1_80 " 188 "a=crypto:1 AES_CM_128_HMAC_SHA1_80 "
195 "inline:d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj|2^20|1:32\r\n" 189 "inline:d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj|2^20|1:32\r\n"
196 "a=rtpmap:120 VP8/90000\r\n" 190 "a=rtpmap:120 VP8/90000\r\n"
191 "a=ssrc-group:FEC 2 3\r\n"
197 "a=ssrc:2 cname:stream_1_cname\r\n" 192 "a=ssrc:2 cname:stream_1_cname\r\n"
198 "a=ssrc:2 msid:local_stream_1 video_track_id_1\r\n" 193 "a=ssrc:2 msid:local_stream_1 video_track_id_1\r\n"
199 "a=ssrc:2 mslabel:local_stream_1\r\n" 194 "a=ssrc:2 mslabel:local_stream_1\r\n"
200 "a=ssrc:2 label:video_track_id_1\r\n" 195 "a=ssrc:2 label:video_track_id_1\r\n"
201 "a=ssrc:3 cname:stream_1_cname\r\n" 196 "a=ssrc:3 cname:stream_1_cname\r\n"
202 "a=ssrc:3 msid:local_stream_1 video_track_id_2\r\n" 197 "a=ssrc:3 msid:local_stream_1 video_track_id_1\r\n"
203 "a=ssrc:3 mslabel:local_stream_1\r\n" 198 "a=ssrc:3 mslabel:local_stream_1\r\n"
204 "a=ssrc:3 label:video_track_id_2\r\n" 199 "a=ssrc:3 label:video_track_id_1\r\n";
205 "a=ssrc-group:FEC 5 6\r\n"
206 "a=ssrc:5 cname:stream_2_cname\r\n"
207 "a=ssrc:5 msid:local_stream_2 video_track_id_3\r\n"
208 "a=ssrc:5 mslabel:local_stream_2\r\n"
209 "a=ssrc:5 label:video_track_id_3\r\n"
210 "a=ssrc:6 cname:stream_2_cname\r\n"
211 "a=ssrc:6 msid:local_stream_2 video_track_id_3\r\n"
212 "a=ssrc:6 mslabel:local_stream_2\r\n"
213 "a=ssrc:6 label:video_track_id_3\r\n";
214 200
215 // SDP reference string without the candidates. 201 // SDP reference string without the candidates.
216 static const char kSdpString[] = 202 static const char kSdpString[] =
217 "v=0\r\n" 203 "v=0\r\n"
218 "o=- 18446744069414584320 18446462598732840960 IN IP4 127.0.0.1\r\n" 204 "o=- 18446744069414584320 18446462598732840960 IN IP4 127.0.0.1\r\n"
219 "s=-\r\n" 205 "s=-\r\n"
220 "t=0 0\r\n" 206 "t=0 0\r\n"
221 "a=msid-semantic: WMS local_stream_1 local_stream_2\r\n" 207 "a=msid-semantic: WMS local_stream_1\r\n"
222 "m=audio 9 RTP/SAVPF 111 103 104\r\n" 208 "m=audio 9 RTP/SAVPF 111 103 104\r\n"
223 "c=IN IP4 0.0.0.0\r\n" 209 "c=IN IP4 0.0.0.0\r\n"
224 "a=rtcp:9 IN IP4 0.0.0.0\r\n" 210 "a=rtcp:9 IN IP4 0.0.0.0\r\n"
225 "a=ice-ufrag:ufrag_voice\r\na=ice-pwd:pwd_voice\r\n" 211 "a=ice-ufrag:ufrag_voice\r\na=ice-pwd:pwd_voice\r\n"
226 "a=mid:audio_content_name\r\n" 212 "a=mid:audio_content_name\r\n"
227 "a=sendrecv\r\n" 213 "a=sendrecv\r\n"
228 "a=rtcp-mux\r\n" 214 "a=rtcp-mux\r\n"
229 "a=rtcp-rsize\r\n" 215 "a=rtcp-rsize\r\n"
230 "a=crypto:1 AES_CM_128_HMAC_SHA1_32 " 216 "a=crypto:1 AES_CM_128_HMAC_SHA1_32 "
231 "inline:NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj|2^20|1:32 " 217 "inline:NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj|2^20|1:32 "
232 "dummy_session_params\r\n" 218 "dummy_session_params\r\n"
233 "a=rtpmap:111 opus/48000/2\r\n" 219 "a=rtpmap:111 opus/48000/2\r\n"
234 "a=rtpmap:103 ISAC/16000\r\n" 220 "a=rtpmap:103 ISAC/16000\r\n"
235 "a=rtpmap:104 ISAC/32000\r\n" 221 "a=rtpmap:104 ISAC/32000\r\n"
236 "a=ssrc:1 cname:stream_1_cname\r\n" 222 "a=ssrc:1 cname:stream_1_cname\r\n"
237 "a=ssrc:1 msid:local_stream_1 audio_track_id_1\r\n" 223 "a=ssrc:1 msid:local_stream_1 audio_track_id_1\r\n"
238 "a=ssrc:1 mslabel:local_stream_1\r\n" 224 "a=ssrc:1 mslabel:local_stream_1\r\n"
239 "a=ssrc:1 label:audio_track_id_1\r\n" 225 "a=ssrc:1 label:audio_track_id_1\r\n"
240 "a=ssrc:4 cname:stream_2_cname\r\n"
241 "a=ssrc:4 msid:local_stream_2 audio_track_id_2\r\n"
242 "a=ssrc:4 mslabel:local_stream_2\r\n"
243 "a=ssrc:4 label:audio_track_id_2\r\n"
244 "m=video 9 RTP/SAVPF 120\r\n" 226 "m=video 9 RTP/SAVPF 120\r\n"
245 "c=IN IP4 0.0.0.0\r\n" 227 "c=IN IP4 0.0.0.0\r\n"
246 "a=rtcp:9 IN IP4 0.0.0.0\r\n" 228 "a=rtcp:9 IN IP4 0.0.0.0\r\n"
247 "a=ice-ufrag:ufrag_video\r\na=ice-pwd:pwd_video\r\n" 229 "a=ice-ufrag:ufrag_video\r\na=ice-pwd:pwd_video\r\n"
248 "a=mid:video_content_name\r\n" 230 "a=mid:video_content_name\r\n"
249 "a=sendrecv\r\n" 231 "a=sendrecv\r\n"
250 "a=crypto:1 AES_CM_128_HMAC_SHA1_80 " 232 "a=crypto:1 AES_CM_128_HMAC_SHA1_80 "
251 "inline:d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj|2^20|1:32\r\n" 233 "inline:d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj|2^20|1:32\r\n"
252 "a=rtpmap:120 VP8/90000\r\n" 234 "a=rtpmap:120 VP8/90000\r\n"
235 "a=ssrc-group:FEC 2 3\r\n"
253 "a=ssrc:2 cname:stream_1_cname\r\n" 236 "a=ssrc:2 cname:stream_1_cname\r\n"
254 "a=ssrc:2 msid:local_stream_1 video_track_id_1\r\n" 237 "a=ssrc:2 msid:local_stream_1 video_track_id_1\r\n"
255 "a=ssrc:2 mslabel:local_stream_1\r\n" 238 "a=ssrc:2 mslabel:local_stream_1\r\n"
256 "a=ssrc:2 label:video_track_id_1\r\n" 239 "a=ssrc:2 label:video_track_id_1\r\n"
257 "a=ssrc:3 cname:stream_1_cname\r\n" 240 "a=ssrc:3 cname:stream_1_cname\r\n"
258 "a=ssrc:3 msid:local_stream_1 video_track_id_2\r\n" 241 "a=ssrc:3 msid:local_stream_1 video_track_id_1\r\n"
259 "a=ssrc:3 mslabel:local_stream_1\r\n" 242 "a=ssrc:3 mslabel:local_stream_1\r\n"
260 "a=ssrc:3 label:video_track_id_2\r\n" 243 "a=ssrc:3 label:video_track_id_1\r\n";
261 "a=ssrc-group:FEC 5 6\r\n"
262 "a=ssrc:5 cname:stream_2_cname\r\n"
263 "a=ssrc:5 msid:local_stream_2 video_track_id_3\r\n"
264 "a=ssrc:5 mslabel:local_stream_2\r\n"
265 "a=ssrc:5 label:video_track_id_3\r\n"
266 "a=ssrc:6 cname:stream_2_cname\r\n"
267 "a=ssrc:6 msid:local_stream_2 video_track_id_3\r\n"
268 "a=ssrc:6 mslabel:local_stream_2\r\n"
269 "a=ssrc:6 label:video_track_id_3\r\n";
270 244
271 static const char kSdpRtpDataChannelString[] = 245 static const char kSdpRtpDataChannelString[] =
272 "m=application 9 RTP/SAVPF 101\r\n" 246 "m=application 9 RTP/SAVPF 101\r\n"
273 "c=IN IP4 0.0.0.0\r\n" 247 "c=IN IP4 0.0.0.0\r\n"
274 "a=rtcp:9 IN IP4 0.0.0.0\r\n" 248 "a=rtcp:9 IN IP4 0.0.0.0\r\n"
275 "a=ice-ufrag:ufrag_data\r\n" 249 "a=ice-ufrag:ufrag_data\r\n"
276 "a=ice-pwd:pwd_data\r\n" 250 "a=ice-pwd:pwd_data\r\n"
277 "a=mid:data_content_name\r\n" 251 "a=mid:data_content_name\r\n"
278 "a=sendrecv\r\n" 252 "a=sendrecv\r\n"
279 "a=crypto:1 AES_CM_128_HMAC_SHA1_80 " 253 "a=crypto:1 AES_CM_128_HMAC_SHA1_80 "
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 "a=rtcp:9 IN IP4 0.0.0.0\r\n" 339 "a=rtcp:9 IN IP4 0.0.0.0\r\n"
366 "a=ice-ufrag:ufrag_video\r\na=ice-pwd:pwd_video\r\n" 340 "a=ice-ufrag:ufrag_video\r\na=ice-pwd:pwd_video\r\n"
367 "a=mid:video_content_name\r\n" 341 "a=mid:video_content_name\r\n"
368 "a=sendrecv\r\n" 342 "a=sendrecv\r\n"
369 "a=rtpmap:120 VP8/90000\r\n" 343 "a=rtpmap:120 VP8/90000\r\n"
370 "a=ssrc:2 cname:stream_1_cname\r\n" 344 "a=ssrc:2 cname:stream_1_cname\r\n"
371 "a=ssrc:2 msid:local_stream video_track_id_1\r\n" 345 "a=ssrc:2 msid:local_stream video_track_id_1\r\n"
372 "a=ssrc:2 mslabel:local_stream\r\n" 346 "a=ssrc:2 mslabel:local_stream\r\n"
373 "a=ssrc:2 label:video_track_id_1\r\n"; 347 "a=ssrc:2 label:video_track_id_1\r\n";
374 348
349 // Plan B SDP reference string, with 2 streams, 2 audio tracks and 3 video
350 // tracks.
351 static const char kPlanBSdpFullString[] =
352 "v=0\r\n"
353 "o=- 18446744069414584320 18446462598732840960 IN IP4 127.0.0.1\r\n"
354 "s=-\r\n"
355 "t=0 0\r\n"
356 "a=msid-semantic: WMS local_stream_1 local_stream_2\r\n"
357 "m=audio 2345 RTP/SAVPF 111 103 104\r\n"
358 "c=IN IP4 74.125.127.126\r\n"
359 "a=rtcp:2347 IN IP4 74.125.127.126\r\n"
360 "a=candidate:a0+B/1 1 udp 2130706432 192.168.1.5 1234 typ host "
361 "generation 2\r\n"
362 "a=candidate:a0+B/1 2 udp 2130706432 192.168.1.5 1235 typ host "
363 "generation 2\r\n"
364 "a=candidate:a0+B/2 1 udp 2130706432 ::1 1238 typ host "
365 "generation 2\r\n"
366 "a=candidate:a0+B/2 2 udp 2130706432 ::1 1239 typ host "
367 "generation 2\r\n"
368 "a=candidate:a0+B/3 1 udp 2130706432 74.125.127.126 2345 typ srflx "
369 "raddr 192.168.1.5 rport 2346 "
370 "generation 2\r\n"
371 "a=candidate:a0+B/3 2 udp 2130706432 74.125.127.126 2347 typ srflx "
372 "raddr 192.168.1.5 rport 2348 "
373 "generation 2\r\n"
374 "a=ice-ufrag:ufrag_voice\r\na=ice-pwd:pwd_voice\r\n"
375 "a=mid:audio_content_name\r\n"
376 "a=sendrecv\r\n"
377 "a=rtcp-mux\r\n"
378 "a=rtcp-rsize\r\n"
379 "a=crypto:1 AES_CM_128_HMAC_SHA1_32 "
380 "inline:NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj|2^20|1:32 "
381 "dummy_session_params\r\n"
382 "a=rtpmap:111 opus/48000/2\r\n"
383 "a=rtpmap:103 ISAC/16000\r\n"
384 "a=rtpmap:104 ISAC/32000\r\n"
385 "a=ssrc:1 cname:stream_1_cname\r\n"
386 "a=ssrc:1 msid:local_stream_1 audio_track_id_1\r\n"
387 "a=ssrc:1 mslabel:local_stream_1\r\n"
388 "a=ssrc:1 label:audio_track_id_1\r\n"
389 "a=ssrc:4 cname:stream_2_cname\r\n"
390 "a=ssrc:4 msid:local_stream_2 audio_track_id_2\r\n"
391 "a=ssrc:4 mslabel:local_stream_2\r\n"
392 "a=ssrc:4 label:audio_track_id_2\r\n"
393 "m=video 3457 RTP/SAVPF 120\r\n"
394 "c=IN IP4 74.125.224.39\r\n"
395 "a=rtcp:3456 IN IP4 74.125.224.39\r\n"
396 "a=candidate:a0+B/1 2 udp 2130706432 192.168.1.5 1236 typ host "
397 "generation 2\r\n"
398 "a=candidate:a0+B/1 1 udp 2130706432 192.168.1.5 1237 typ host "
399 "generation 2\r\n"
400 "a=candidate:a0+B/2 2 udp 2130706432 ::1 1240 typ host "
401 "generation 2\r\n"
402 "a=candidate:a0+B/2 1 udp 2130706432 ::1 1241 typ host "
403 "generation 2\r\n"
404 "a=candidate:a0+B/4 2 udp 2130706432 74.125.224.39 3456 typ relay "
405 "generation 2\r\n"
406 "a=candidate:a0+B/4 1 udp 2130706432 74.125.224.39 3457 typ relay "
407 "generation 2\r\n"
408 "a=ice-ufrag:ufrag_video\r\na=ice-pwd:pwd_video\r\n"
409 "a=mid:video_content_name\r\n"
410 "a=sendrecv\r\n"
411 "a=crypto:1 AES_CM_128_HMAC_SHA1_80 "
412 "inline:d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj|2^20|1:32\r\n"
413 "a=rtpmap:120 VP8/90000\r\n"
414 "a=ssrc-group:FEC 2 3\r\n"
415 "a=ssrc:2 cname:stream_1_cname\r\n"
416 "a=ssrc:2 msid:local_stream_1 video_track_id_1\r\n"
417 "a=ssrc:2 mslabel:local_stream_1\r\n"
418 "a=ssrc:2 label:video_track_id_1\r\n"
419 "a=ssrc:3 cname:stream_1_cname\r\n"
420 "a=ssrc:3 msid:local_stream_1 video_track_id_1\r\n"
421 "a=ssrc:3 mslabel:local_stream_1\r\n"
422 "a=ssrc:3 label:video_track_id_1\r\n"
423 "a=ssrc:5 cname:stream_2_cname\r\n"
424 "a=ssrc:5 msid:local_stream_2 video_track_id_2\r\n"
425 "a=ssrc:5 mslabel:local_stream_2\r\n"
426 "a=ssrc:5 label:video_track_id_2\r\n"
427 "a=ssrc:6 cname:stream_2_cname\r\n"
428 "a=ssrc:6 msid:local_stream_2 video_track_id_3\r\n"
429 "a=ssrc:6 mslabel:local_stream_2\r\n"
430 "a=ssrc:6 label:video_track_id_3\r\n";
431
432 // Unified Plan SDP reference string, with 2 streams, 2 audio tracks and 3 video
433 // tracks.
434 static const char kUnifiedPlanSdpFullString[] =
435 "v=0\r\n"
436 "o=- 18446744069414584320 18446462598732840960 IN IP4 127.0.0.1\r\n"
437 "s=-\r\n"
438 "t=0 0\r\n"
439 "a=msid-semantic: WMS local_stream_1\r\n"
440 // Audio track 1, stream 1 (with candidates).
441 "m=audio 2345 RTP/SAVPF 111 103 104\r\n"
442 "c=IN IP4 74.125.127.126\r\n"
443 "a=rtcp:2347 IN IP4 74.125.127.126\r\n"
444 "a=candidate:a0+B/1 1 udp 2130706432 192.168.1.5 1234 typ host "
445 "generation 2\r\n"
446 "a=candidate:a0+B/1 2 udp 2130706432 192.168.1.5 1235 typ host "
447 "generation 2\r\n"
448 "a=candidate:a0+B/2 1 udp 2130706432 ::1 1238 typ host "
449 "generation 2\r\n"
450 "a=candidate:a0+B/2 2 udp 2130706432 ::1 1239 typ host "
451 "generation 2\r\n"
452 "a=candidate:a0+B/3 1 udp 2130706432 74.125.127.126 2345 typ srflx "
453 "raddr 192.168.1.5 rport 2346 "
454 "generation 2\r\n"
455 "a=candidate:a0+B/3 2 udp 2130706432 74.125.127.126 2347 typ srflx "
456 "raddr 192.168.1.5 rport 2348 "
457 "generation 2\r\n"
458 "a=ice-ufrag:ufrag_voice\r\na=ice-pwd:pwd_voice\r\n"
459 "a=mid:audio_content_name\r\n"
460 "a=msid:local_stream_1 audio_track_id_1\r\n"
461 "a=sendrecv\r\n"
462 "a=rtcp-mux\r\n"
463 "a=rtcp-rsize\r\n"
464 "a=crypto:1 AES_CM_128_HMAC_SHA1_32 "
465 "inline:NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj|2^20|1:32 "
466 "dummy_session_params\r\n"
467 "a=rtpmap:111 opus/48000/2\r\n"
468 "a=rtpmap:103 ISAC/16000\r\n"
469 "a=rtpmap:104 ISAC/32000\r\n"
470 "a=ssrc:1 cname:stream_1_cname\r\n"
471 // Video track 1, stream 1 (with candidates).
472 "m=video 3457 RTP/SAVPF 120\r\n"
473 "c=IN IP4 74.125.224.39\r\n"
474 "a=rtcp:3456 IN IP4 74.125.224.39\r\n"
475 "a=candidate:a0+B/1 2 udp 2130706432 192.168.1.5 1236 typ host "
476 "generation 2\r\n"
477 "a=candidate:a0+B/1 1 udp 2130706432 192.168.1.5 1237 typ host "
478 "generation 2\r\n"
479 "a=candidate:a0+B/2 2 udp 2130706432 ::1 1240 typ host "
480 "generation 2\r\n"
481 "a=candidate:a0+B/2 1 udp 2130706432 ::1 1241 typ host "
482 "generation 2\r\n"
483 "a=candidate:a0+B/4 2 udp 2130706432 74.125.224.39 3456 typ relay "
484 "generation 2\r\n"
485 "a=candidate:a0+B/4 1 udp 2130706432 74.125.224.39 3457 typ relay "
486 "generation 2\r\n"
487 "a=ice-ufrag:ufrag_video\r\na=ice-pwd:pwd_video\r\n"
488 "a=mid:video_content_name\r\n"
489 "a=msid:local_stream_1 video_track_id_1\r\n"
490 "a=sendrecv\r\n"
491 "a=crypto:1 AES_CM_128_HMAC_SHA1_80 "
492 "inline:d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj|2^20|1:32\r\n"
493 "a=rtpmap:120 VP8/90000\r\n"
494 "a=ssrc-group:FEC 2 3\r\n"
495 "a=ssrc:2 cname:stream_1_cname\r\n"
496 "a=ssrc:3 cname:stream_1_cname\r\n"
497 // Audio track 2, stream 2.
498 "m=audio 9 RTP/SAVPF 111 103 104\r\n"
499 "c=IN IP4 0.0.0.0\r\n"
500 "a=rtcp:9 IN IP4 0.0.0.0\r\n"
501 "a=ice-ufrag:ufrag_voice_2\r\na=ice-pwd:pwd_voice_2\r\n"
502 "a=mid:audio_content_name_2\r\n"
503 "a=msid:local_stream_2 audio_track_id_2\r\n"
504 "a=sendrecv\r\n"
505 "a=rtcp-mux\r\n"
506 "a=rtcp-rsize\r\n"
507 "a=crypto:1 AES_CM_128_HMAC_SHA1_32 "
508 "inline:NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj|2^20|1:32 "
509 "dummy_session_params\r\n"
510 "a=rtpmap:111 opus/48000/2\r\n"
511 "a=rtpmap:103 ISAC/16000\r\n"
512 "a=rtpmap:104 ISAC/32000\r\n"
513 "a=ssrc:4 cname:stream_2_cname\r\n"
514 // Video track 2, stream 2.
515 "m=video 9 RTP/SAVPF 120\r\n"
516 "c=IN IP4 0.0.0.0\r\n"
517 "a=rtcp:9 IN IP4 0.0.0.0\r\n"
518 "a=ice-ufrag:ufrag_video_2\r\na=ice-pwd:pwd_video_2\r\n"
519 "a=mid:video_content_name_2\r\n"
520 "a=msid:local_stream_2 video_track_id_2\r\n"
521 "a=sendrecv\r\n"
522 "a=crypto:1 AES_CM_128_HMAC_SHA1_80 "
523 "inline:d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj|2^20|1:32\r\n"
524 "a=rtpmap:120 VP8/90000\r\n"
525 "a=ssrc:5 cname:stream_2_cname\r\n"
526 // Video track 3, stream 2.
527 "m=video 9 RTP/SAVPF 120\r\n"
528 "c=IN IP4 0.0.0.0\r\n"
529 "a=rtcp:9 IN IP4 0.0.0.0\r\n"
530 "a=ice-ufrag:ufrag_video_3\r\na=ice-pwd:pwd_video_3\r\n"
531 "a=mid:video_content_name_3\r\n"
532 "a=msid:local_stream_2 video_track_id_3\r\n"
533 "a=sendrecv\r\n"
534 "a=crypto:1 AES_CM_128_HMAC_SHA1_80 "
535 "inline:d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj|2^20|1:32\r\n"
536 "a=rtpmap:120 VP8/90000\r\n"
537 "a=ssrc:6 cname:stream_2_cname\r\n";
375 538
376 // One candidate reference string as per W3c spec. 539 // One candidate reference string as per W3c spec.
377 // candidate:<blah> not a=candidate:<blah>CRLF 540 // candidate:<blah> not a=candidate:<blah>CRLF
378 static const char kRawCandidate[] = 541 static const char kRawCandidate[] =
379 "candidate:a0+B/1 1 udp 2130706432 192.168.1.5 1234 typ host generation 2"; 542 "candidate:a0+B/1 1 udp 2130706432 192.168.1.5 1234 typ host generation 2";
380 // One candidate reference string. 543 // One candidate reference string.
381 static const char kSdpOneCandidate[] = 544 static const char kSdpOneCandidate[] =
382 "a=candidate:a0+B/1 1 udp 2130706432 192.168.1.5 1234 typ host " 545 "a=candidate:a0+B/1 1 udp 2130706432 192.168.1.5 1234 typ host "
383 "generation 2\r\n"; 546 "generation 2\r\n";
384 547
(...skipping 17 matching lines...) Expand all
402 565
403 // One candidate reference string. 566 // One candidate reference string.
404 static const char kSdpOneCandidateWithUfragPwd[] = 567 static const char kSdpOneCandidateWithUfragPwd[] =
405 "a=candidate:a0+B/1 1 udp 2130706432 192.168.1.5 1234 typ host network_name" 568 "a=candidate:a0+B/1 1 udp 2130706432 192.168.1.5 1234 typ host network_name"
406 " eth0 ufrag user_rtp pwd password_rtp generation 2\r\n"; 569 " eth0 ufrag user_rtp pwd password_rtp generation 2\r\n";
407 570
408 // Session id and version 571 // Session id and version
409 static const char kSessionId[] = "18446744069414584320"; 572 static const char kSessionId[] = "18446744069414584320";
410 static const char kSessionVersion[] = "18446462598732840960"; 573 static const char kSessionVersion[] = "18446462598732840960";
411 574
412 // Ice options 575 // ICE options.
413 static const char kIceOption1[] = "iceoption1"; 576 static const char kIceOption1[] = "iceoption1";
414 static const char kIceOption2[] = "iceoption2"; 577 static const char kIceOption2[] = "iceoption2";
415 static const char kIceOption3[] = "iceoption3"; 578 static const char kIceOption3[] = "iceoption3";
416 579
580 // ICE ufrags/passwords.
581 static const char kUfragVoice[] = "ufrag_voice";
582 static const char kPwdVoice[] = "pwd_voice";
583 static const char kUfragVideo[] = "ufrag_video";
584 static const char kPwdVideo[] = "pwd_video";
585 static const char kUfragData[] = "ufrag_data";
586 static const char kPwdData[] = "pwd_data";
587
588 // Extra ufrags/passwords for extra unified plan m= sections.
589 static const char kUfragVoice2[] = "ufrag_voice_2";
590 static const char kPwdVoice2[] = "pwd_voice_2";
591 static const char kUfragVideo2[] = "ufrag_video_2";
592 static const char kPwdVideo2[] = "pwd_video_2";
593 static const char kUfragVideo3[] = "ufrag_video_3";
594 static const char kPwdVideo3[] = "pwd_video_3";
595
417 // Content name 596 // Content name
418 static const char kAudioContentName[] = "audio_content_name"; 597 static const char kAudioContentName[] = "audio_content_name";
419 static const char kVideoContentName[] = "video_content_name"; 598 static const char kVideoContentName[] = "video_content_name";
420 static const char kDataContentName[] = "data_content_name"; 599 static const char kDataContentName[] = "data_content_name";
421 600
601 // Extra content names for extra unified plan m= sections.
602 static const char kAudioContentName2[] = "audio_content_name_2";
603 static const char kVideoContentName2[] = "video_content_name_2";
604 static const char kVideoContentName3[] = "video_content_name_3";
605
422 // MediaStream 1 606 // MediaStream 1
423 static const char kStreamLabel1[] = "local_stream_1"; 607 static const char kStreamLabel1[] = "local_stream_1";
424 static const char kStream1Cname[] = "stream_1_cname"; 608 static const char kStream1Cname[] = "stream_1_cname";
425 static const char kAudioTrackId1[] = "audio_track_id_1"; 609 static const char kAudioTrackId1[] = "audio_track_id_1";
426 static const uint32_t kAudioTrack1Ssrc = 1; 610 static const uint32_t kAudioTrack1Ssrc = 1;
427 static const char kVideoTrackId1[] = "video_track_id_1"; 611 static const char kVideoTrackId1[] = "video_track_id_1";
428 static const uint32_t kVideoTrack1Ssrc = 2; 612 static const uint32_t kVideoTrack1Ssrc1 = 2;
429 static const char kVideoTrackId2[] = "video_track_id_2"; 613 static const uint32_t kVideoTrack1Ssrc2 = 3;
430 static const uint32_t kVideoTrack2Ssrc = 3;
431 614
432 // MediaStream 2 615 // MediaStream 2
433 static const char kStreamLabel2[] = "local_stream_2"; 616 static const char kStreamLabel2[] = "local_stream_2";
434 static const char kStream2Cname[] = "stream_2_cname"; 617 static const char kStream2Cname[] = "stream_2_cname";
435 static const char kAudioTrackId2[] = "audio_track_id_2"; 618 static const char kAudioTrackId2[] = "audio_track_id_2";
436 static const uint32_t kAudioTrack2Ssrc = 4; 619 static const uint32_t kAudioTrack2Ssrc = 4;
620 static const char kVideoTrackId2[] = "video_track_id_2";
621 static const uint32_t kVideoTrack2Ssrc = 5;
437 static const char kVideoTrackId3[] = "video_track_id_3"; 622 static const char kVideoTrackId3[] = "video_track_id_3";
438 static const uint32_t kVideoTrack3Ssrc = 5; 623 static const uint32_t kVideoTrack3Ssrc = 6;
439 static const uint32_t kVideoTrack4Ssrc = 6;
440 624
441 // DataChannel 625 // DataChannel
442 static const char kDataChannelLabel[] = "data_channel"; 626 static const char kDataChannelLabel[] = "data_channel";
443 static const char kDataChannelMsid[] = "data_channeld0"; 627 static const char kDataChannelMsid[] = "data_channeld0";
444 static const char kDataChannelCname[] = "data_channel_cname"; 628 static const char kDataChannelCname[] = "data_channel_cname";
445 static const uint32_t kDataChannelSsrc = 10; 629 static const uint32_t kDataChannelSsrc = 10;
446 630
447 // Candidate 631 // Candidate
448 static const char kDummyMid[] = "dummy_mid"; 632 static const char kDummyMid[] = "dummy_mid";
449 static const int kDummyIndex = 123; 633 static const int kDummyIndex = 123;
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 729
546 class WebRtcSdpTest : public testing::Test { 730 class WebRtcSdpTest : public testing::Test {
547 public: 731 public:
548 WebRtcSdpTest() 732 WebRtcSdpTest()
549 : jdesc_(kDummyString) { 733 : jdesc_(kDummyString) {
550 #ifdef WEBRTC_ANDROID 734 #ifdef WEBRTC_ANDROID
551 webrtc::InitializeAndroidObjects(); 735 webrtc::InitializeAndroidObjects();
552 #endif 736 #endif
553 // AudioContentDescription 737 // AudioContentDescription
554 audio_desc_ = CreateAudioContentDescription(); 738 audio_desc_ = CreateAudioContentDescription();
555 AudioCodec opus(111, "opus", 48000, 0, 2, 3); 739 StreamParams audio_stream;
556 audio_desc_->AddCodec(opus); 740 audio_stream.id = kAudioTrackId1;
557 audio_desc_->AddCodec(AudioCodec(103, "ISAC", 16000, 32000, 1, 2)); 741 audio_stream.cname = kStream1Cname;
558 audio_desc_->AddCodec(AudioCodec(104, "ISAC", 32000, 56000, 1, 1)); 742 audio_stream.sync_label = kStreamLabel1;
743 audio_stream.ssrcs.push_back(kAudioTrack1Ssrc);
744 audio_desc_->AddStream(audio_stream);
559 desc_.AddContent(kAudioContentName, NS_JINGLE_RTP, audio_desc_); 745 desc_.AddContent(kAudioContentName, NS_JINGLE_RTP, audio_desc_);
560 746
561 // VideoContentDescription 747 // VideoContentDescription
562 rtc::scoped_ptr<VideoContentDescription> video( 748 video_desc_ = CreateVideoContentDescription();
563 new VideoContentDescription()); 749 StreamParams video_stream;
564 video_desc_ = video.get(); 750 video_stream.id = kVideoTrackId1;
565 StreamParams video_stream1; 751 video_stream.cname = kStream1Cname;
566 video_stream1.id = kVideoTrackId1; 752 video_stream.sync_label = kStreamLabel1;
567 video_stream1.cname = kStream1Cname; 753 video_stream.ssrcs.push_back(kVideoTrack1Ssrc1);
568 video_stream1.sync_label = kStreamLabel1; 754 video_stream.ssrcs.push_back(kVideoTrack1Ssrc2);
569 video_stream1.ssrcs.push_back(kVideoTrack1Ssrc); 755 cricket::SsrcGroup ssrc_group(kFecSsrcGroupSemantics, video_stream.ssrcs);
570 video->AddStream(video_stream1); 756 video_stream.ssrc_groups.push_back(ssrc_group);
571 StreamParams video_stream2; 757 video_desc_->AddStream(video_stream);
572 video_stream2.id = kVideoTrackId2; 758 desc_.AddContent(kVideoContentName, NS_JINGLE_RTP, video_desc_);
573 video_stream2.cname = kStream1Cname;
574 video_stream2.sync_label = kStreamLabel1;
575 video_stream2.ssrcs.push_back(kVideoTrack2Ssrc);
576 video->AddStream(video_stream2);
577 StreamParams video_stream3;
578 video_stream3.id = kVideoTrackId3;
579 video_stream3.cname = kStream2Cname;
580 video_stream3.sync_label = kStreamLabel2;
581 video_stream3.ssrcs.push_back(kVideoTrack3Ssrc);
582 video_stream3.ssrcs.push_back(kVideoTrack4Ssrc);
583 cricket::SsrcGroup ssrc_group(kFecSsrcGroupSemantics, video_stream3.ssrcs);
584 video_stream3.ssrc_groups.push_back(ssrc_group);
585 video->AddStream(video_stream3);
586 video->AddCrypto(CryptoParams(1, "AES_CM_128_HMAC_SHA1_80",
587 "inline:d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj|2^20|1:32", ""));
588 video->set_protocol(cricket::kMediaProtocolSavpf);
589 video->AddCodec(VideoCodec(
590 120,
591 JsepSessionDescription::kDefaultVideoCodecName,
592 JsepSessionDescription::kMaxVideoCodecWidth,
593 JsepSessionDescription::kMaxVideoCodecHeight,
594 JsepSessionDescription::kDefaultVideoCodecFramerate,
595 JsepSessionDescription::kDefaultVideoCodecPreference));
596
597 desc_.AddContent(kVideoContentName, NS_JINGLE_RTP,
598 video.release());
599 759
600 // TransportInfo 760 // TransportInfo
601 EXPECT_TRUE(desc_.AddTransportInfo( 761 EXPECT_TRUE(desc_.AddTransportInfo(TransportInfo(
602 TransportInfo(kAudioContentName, 762 kAudioContentName, TransportDescription(kUfragVoice, kPwdVoice))));
603 TransportDescription(kCandidateUfragVoice, 763 EXPECT_TRUE(desc_.AddTransportInfo(TransportInfo(
604 kCandidatePwdVoice)))); 764 kVideoContentName, TransportDescription(kUfragVideo, kPwdVideo))));
605 EXPECT_TRUE(desc_.AddTransportInfo(
606 TransportInfo(kVideoContentName,
607 TransportDescription(kCandidateUfragVideo,
608 kCandidatePwdVideo))));
609 765
610 // v4 host 766 // v4 host
611 int port = 1234; 767 int port = 1234;
612 rtc::SocketAddress address("192.168.1.5", port++); 768 rtc::SocketAddress address("192.168.1.5", port++);
613 Candidate candidate1(ICE_CANDIDATE_COMPONENT_RTP, "udp", address, 769 Candidate candidate1(ICE_CANDIDATE_COMPONENT_RTP, "udp", address,
614 kCandidatePriority, "", "", LOCAL_PORT_TYPE, 770 kCandidatePriority, "", "", LOCAL_PORT_TYPE,
615 kCandidateGeneration, kCandidateFoundation1); 771 kCandidateGeneration, kCandidateFoundation1);
616 address.SetPort(port++); 772 address.SetPort(port++);
617 Candidate candidate2(ICE_CANDIDATE_COMPONENT_RTCP, "udp", address, 773 Candidate candidate2(ICE_CANDIDATE_COMPONENT_RTCP, "udp", address,
618 kCandidatePriority, "", "", LOCAL_PORT_TYPE, 774 kCandidatePriority, "", "", LOCAL_PORT_TYPE,
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
708 bool is_video = (i > 5); 864 bool is_video = (i > 5);
709 mline_id = is_video ? "video_content_name" : "audio_content_name"; 865 mline_id = is_video ? "video_content_name" : "audio_content_name";
710 mline_index = is_video ? 1 : 0; 866 mline_index = is_video ? 1 : 0;
711 JsepIceCandidate jice(mline_id, 867 JsepIceCandidate jice(mline_id,
712 mline_index, 868 mline_index,
713 candidates_.at(i)); 869 candidates_.at(i));
714 jdesc_.AddCandidate(&jice); 870 jdesc_.AddCandidate(&jice);
715 } 871 }
716 } 872 }
717 873
874 // Turns the existing reference description into a plan B description,
875 // with 2 audio tracks and 3 video tracks.
876 void MakePlanBDescription() {
877 audio_desc_ = static_cast<AudioContentDescription*>(audio_desc_->Copy());
878 video_desc_ = static_cast<VideoContentDescription*>(video_desc_->Copy());
879
880 StreamParams audio_track_2;
881 audio_track_2.id = kAudioTrackId2;
882 audio_track_2.cname = kStream2Cname;
883 audio_track_2.sync_label = kStreamLabel2;
884 audio_track_2.ssrcs.push_back(kAudioTrack2Ssrc);
885 audio_desc_->AddStream(audio_track_2);
886
887 StreamParams video_track_2;
888 video_track_2.id = kVideoTrackId2;
889 video_track_2.cname = kStream2Cname;
890 video_track_2.sync_label = kStreamLabel2;
891 video_track_2.ssrcs.push_back(kVideoTrack2Ssrc);
892 video_desc_->AddStream(video_track_2);
893
894 StreamParams video_track_3;
895 video_track_3.id = kVideoTrackId3;
896 video_track_3.cname = kStream2Cname;
897 video_track_3.sync_label = kStreamLabel2;
898 video_track_3.ssrcs.push_back(kVideoTrack3Ssrc);
899 video_desc_->AddStream(video_track_3);
900
901 desc_.RemoveContentByName(kAudioContentName);
902 desc_.RemoveContentByName(kVideoContentName);
903 desc_.AddContent(kAudioContentName, NS_JINGLE_RTP, audio_desc_);
904 desc_.AddContent(kVideoContentName, NS_JINGLE_RTP, video_desc_);
905
906 ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(),
907 jdesc_.session_version()));
908 }
909
910 // Turns the existing reference description into a unified plan description,
911 // with 2 audio tracks and 3 video tracks.
912 void MakeUnifiedPlanDescription() {
913 // Audio track 2.
914 AudioContentDescription* audio_desc_2 = CreateAudioContentDescription();
915 StreamParams audio_track_2;
916 audio_track_2.id = kAudioTrackId2;
917 audio_track_2.cname = kStream2Cname;
918 audio_track_2.sync_label = kStreamLabel2;
919 audio_track_2.ssrcs.push_back(kAudioTrack2Ssrc);
920 audio_desc_2->AddStream(audio_track_2);
921 desc_.AddContent(kAudioContentName2, NS_JINGLE_RTP, audio_desc_2);
922 EXPECT_TRUE(desc_.AddTransportInfo(TransportInfo(
923 kAudioContentName2, TransportDescription(kUfragVoice2, kPwdVoice2))));
924
925 // Video track 2, in stream 2.
926 VideoContentDescription* video_desc_2 = CreateVideoContentDescription();
927 StreamParams video_track_2;
928 video_track_2.id = kVideoTrackId2;
929 video_track_2.cname = kStream2Cname;
930 video_track_2.sync_label = kStreamLabel2;
931 video_track_2.ssrcs.push_back(kVideoTrack2Ssrc);
932 video_desc_2->AddStream(video_track_2);
933 desc_.AddContent(kVideoContentName2, NS_JINGLE_RTP, video_desc_2);
934 EXPECT_TRUE(desc_.AddTransportInfo(TransportInfo(
935 kVideoContentName2, TransportDescription(kUfragVideo2, kPwdVideo2))));
936
937 // Video track 3, in stream 2.
938 VideoContentDescription* video_desc_3 = CreateVideoContentDescription();
939 StreamParams video_track_3;
940 video_track_3.id = kVideoTrackId3;
941 video_track_3.cname = kStream2Cname;
942 video_track_3.sync_label = kStreamLabel2;
943 video_track_3.ssrcs.push_back(kVideoTrack3Ssrc);
944 video_desc_3->AddStream(video_track_3);
945 desc_.AddContent(kVideoContentName3, NS_JINGLE_RTP, video_desc_3);
946 EXPECT_TRUE(desc_.AddTransportInfo(TransportInfo(
947 kVideoContentName3, TransportDescription(kUfragVideo3, kPwdVideo3))));
948
949 ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(),
950 jdesc_.session_version()));
951 }
952
953 // Creates an audio content description with no streams, and some default
954 // configuration.
718 AudioContentDescription* CreateAudioContentDescription() { 955 AudioContentDescription* CreateAudioContentDescription() {
719 AudioContentDescription* audio = new AudioContentDescription(); 956 AudioContentDescription* audio = new AudioContentDescription();
720 audio->set_rtcp_mux(true); 957 audio->set_rtcp_mux(true);
721 audio->set_rtcp_reduced_size(true); 958 audio->set_rtcp_reduced_size(true);
722 StreamParams audio_stream1;
723 audio_stream1.id = kAudioTrackId1;
724 audio_stream1.cname = kStream1Cname;
725 audio_stream1.sync_label = kStreamLabel1;
726 audio_stream1.ssrcs.push_back(kAudioTrack1Ssrc);
727 audio->AddStream(audio_stream1);
728 StreamParams audio_stream2;
729 audio_stream2.id = kAudioTrackId2;
730 audio_stream2.cname = kStream2Cname;
731 audio_stream2.sync_label = kStreamLabel2;
732 audio_stream2.ssrcs.push_back(kAudioTrack2Ssrc);
733 audio->AddStream(audio_stream2);
734 audio->AddCrypto(CryptoParams(1, "AES_CM_128_HMAC_SHA1_32", 959 audio->AddCrypto(CryptoParams(1, "AES_CM_128_HMAC_SHA1_32",
735 "inline:NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj|2^20|1:32", 960 "inline:NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj|2^20|1:32",
736 "dummy_session_params")); 961 "dummy_session_params"));
737 audio->set_protocol(cricket::kMediaProtocolSavpf); 962 audio->set_protocol(cricket::kMediaProtocolSavpf);
963 AudioCodec opus(111, "opus", 48000, 0, 2, 3);
964 audio->AddCodec(opus);
965 audio->AddCodec(AudioCodec(103, "ISAC", 16000, 32000, 1, 2));
966 audio->AddCodec(AudioCodec(104, "ISAC", 32000, 56000, 1, 1));
738 return audio; 967 return audio;
739 } 968 }
740 969
970 // Creates a video content description with no streams, and some default
971 // configuration.
972 VideoContentDescription* CreateVideoContentDescription() {
973 VideoContentDescription* video = new VideoContentDescription();
974 video->AddCrypto(CryptoParams(
975 1, "AES_CM_128_HMAC_SHA1_80",
976 "inline:d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj|2^20|1:32", ""));
977 video->set_protocol(cricket::kMediaProtocolSavpf);
978 video->AddCodec(
979 VideoCodec(120, JsepSessionDescription::kDefaultVideoCodecName,
980 JsepSessionDescription::kMaxVideoCodecWidth,
981 JsepSessionDescription::kMaxVideoCodecHeight,
982 JsepSessionDescription::kDefaultVideoCodecFramerate,
983 JsepSessionDescription::kDefaultVideoCodecPreference));
984 return video;
985 }
986
741 template <class MCD> 987 template <class MCD>
742 void CompareMediaContentDescription(const MCD* cd1, 988 void CompareMediaContentDescription(const MCD* cd1,
743 const MCD* cd2) { 989 const MCD* cd2) {
744 // type 990 // type
745 EXPECT_EQ(cd1->type(), cd1->type()); 991 EXPECT_EQ(cd1->type(), cd1->type());
746 992
747 // content direction 993 // content direction
748 EXPECT_EQ(cd1->direction(), cd2->direction()); 994 EXPECT_EQ(cd1->direction(), cd2->direction());
749 995
750 // rtcp_mux 996 // rtcp_mux
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
996 } 1242 }
997 1243
998 void AddFingerprint() { 1244 void AddFingerprint() {
999 desc_.RemoveTransportInfoByName(kAudioContentName); 1245 desc_.RemoveTransportInfoByName(kAudioContentName);
1000 desc_.RemoveTransportInfoByName(kVideoContentName); 1246 desc_.RemoveTransportInfoByName(kVideoContentName);
1001 rtc::SSLFingerprint fingerprint(rtc::DIGEST_SHA_1, 1247 rtc::SSLFingerprint fingerprint(rtc::DIGEST_SHA_1,
1002 kIdentityDigest, 1248 kIdentityDigest,
1003 sizeof(kIdentityDigest)); 1249 sizeof(kIdentityDigest));
1004 EXPECT_TRUE(desc_.AddTransportInfo(TransportInfo( 1250 EXPECT_TRUE(desc_.AddTransportInfo(TransportInfo(
1005 kAudioContentName, 1251 kAudioContentName,
1006 TransportDescription(std::vector<std::string>(), kCandidateUfragVoice, 1252 TransportDescription(std::vector<std::string>(), kUfragVoice, kPwdVoice,
1007 kCandidatePwdVoice, cricket::ICEMODE_FULL, 1253 cricket::ICEMODE_FULL,
1008 cricket::CONNECTIONROLE_NONE, &fingerprint)))); 1254 cricket::CONNECTIONROLE_NONE, &fingerprint))));
1009 EXPECT_TRUE(desc_.AddTransportInfo(TransportInfo( 1255 EXPECT_TRUE(desc_.AddTransportInfo(TransportInfo(
1010 kVideoContentName, 1256 kVideoContentName,
1011 TransportDescription(std::vector<std::string>(), kCandidateUfragVideo, 1257 TransportDescription(std::vector<std::string>(), kUfragVideo, kPwdVideo,
1012 kCandidatePwdVideo, cricket::ICEMODE_FULL, 1258 cricket::ICEMODE_FULL,
1013 cricket::CONNECTIONROLE_NONE, &fingerprint)))); 1259 cricket::CONNECTIONROLE_NONE, &fingerprint))));
1014 } 1260 }
1015 1261
1016 void AddExtmap() { 1262 void AddExtmap() {
1017 audio_desc_ = static_cast<AudioContentDescription*>( 1263 audio_desc_ = static_cast<AudioContentDescription*>(
1018 audio_desc_->Copy()); 1264 audio_desc_->Copy());
1019 video_desc_ = static_cast<VideoContentDescription*>( 1265 video_desc_ = static_cast<VideoContentDescription*>(
1020 video_desc_->Copy()); 1266 video_desc_->Copy());
1021 audio_desc_->AddRtpHeaderExtension( 1267 audio_desc_->AddRtpHeaderExtension(
1022 RtpHeaderExtension(kExtmapUri, kExtmapId)); 1268 RtpHeaderExtension(kExtmapUri, kExtmapId));
(...skipping 30 matching lines...) Expand all
1053 audio_desc_ = static_cast<AudioContentDescription*>( 1299 audio_desc_ = static_cast<AudioContentDescription*>(
1054 audio_desc_->Copy()); 1300 audio_desc_->Copy());
1055 video_desc_ = static_cast<VideoContentDescription*>( 1301 video_desc_ = static_cast<VideoContentDescription*>(
1056 video_desc_->Copy()); 1302 video_desc_->Copy());
1057 desc_.RemoveContentByName(kAudioContentName); 1303 desc_.RemoveContentByName(kAudioContentName);
1058 desc_.RemoveContentByName(kVideoContentName); 1304 desc_.RemoveContentByName(kVideoContentName);
1059 desc_.AddContent(kAudioContentName, NS_JINGLE_RTP, audio_rejected, 1305 desc_.AddContent(kAudioContentName, NS_JINGLE_RTP, audio_rejected,
1060 audio_desc_); 1306 audio_desc_);
1061 desc_.AddContent(kVideoContentName, NS_JINGLE_RTP, video_rejected, 1307 desc_.AddContent(kVideoContentName, NS_JINGLE_RTP, video_rejected,
1062 video_desc_); 1308 video_desc_);
1063 SetIceUfragPwd(kAudioContentName, 1309 SetIceUfragPwd(kAudioContentName, audio_rejected ? "" : kUfragVoice,
1064 audio_rejected ? "" : kCandidateUfragVoice, 1310 audio_rejected ? "" : kPwdVoice);
1065 audio_rejected ? "" : kCandidatePwdVoice); 1311 SetIceUfragPwd(kVideoContentName, video_rejected ? "" : kUfragVideo,
1066 SetIceUfragPwd(kVideoContentName, 1312 video_rejected ? "" : kPwdVideo);
1067 video_rejected ? "" : kCandidateUfragVideo,
1068 video_rejected ? "" : kCandidatePwdVideo);
1069 1313
1070 std::string new_sdp = kSdpString; 1314 std::string new_sdp = kSdpString;
1071 ReplaceRejected(audio_rejected, video_rejected, &new_sdp); 1315 ReplaceRejected(audio_rejected, video_rejected, &new_sdp);
1072 1316
1073 JsepSessionDescription jdesc_no_candidates(kDummyString); 1317 JsepSessionDescription jdesc_no_candidates(kDummyString);
1074 if (!jdesc_no_candidates.Initialize(desc_.Copy(), kSessionId, 1318 if (!jdesc_no_candidates.Initialize(desc_.Copy(), kSessionId,
1075 kSessionVersion)) { 1319 kSessionVersion)) {
1076 return false; 1320 return false;
1077 } 1321 }
1078 std::string message = webrtc::SdpSerialize(jdesc_no_candidates); 1322 std::string message = webrtc::SdpSerialize(jdesc_no_candidates);
1079 EXPECT_EQ(new_sdp, message); 1323 EXPECT_EQ(new_sdp, message);
1080 return true; 1324 return true;
1081 } 1325 }
1082 1326
1083 void AddSctpDataChannel() { 1327 void AddSctpDataChannel() {
1084 rtc::scoped_ptr<DataContentDescription> data( 1328 rtc::scoped_ptr<DataContentDescription> data(
1085 new DataContentDescription()); 1329 new DataContentDescription());
1086 data_desc_ = data.get(); 1330 data_desc_ = data.get();
1087 data_desc_->set_protocol(cricket::kMediaProtocolDtlsSctp); 1331 data_desc_->set_protocol(cricket::kMediaProtocolDtlsSctp);
1088 DataCodec codec(cricket::kGoogleSctpDataCodecId, 1332 DataCodec codec(cricket::kGoogleSctpDataCodecId,
1089 cricket::kGoogleSctpDataCodecName, 0); 1333 cricket::kGoogleSctpDataCodecName, 0);
1090 codec.SetParam(cricket::kCodecParamPort, kDefaultSctpPort); 1334 codec.SetParam(cricket::kCodecParamPort, kDefaultSctpPort);
1091 data_desc_->AddCodec(codec); 1335 data_desc_->AddCodec(codec);
1092 desc_.AddContent(kDataContentName, NS_JINGLE_DRAFT_SCTP, data.release()); 1336 desc_.AddContent(kDataContentName, NS_JINGLE_DRAFT_SCTP, data.release());
1093 EXPECT_TRUE(desc_.AddTransportInfo( 1337 EXPECT_TRUE(desc_.AddTransportInfo(TransportInfo(
1094 TransportInfo(kDataContentName, 1338 kDataContentName, TransportDescription(kUfragData, kPwdData))));
1095 TransportDescription(kCandidateUfragData,
1096 kCandidatePwdData))));
1097 } 1339 }
1098 1340
1099 void AddRtpDataChannel() { 1341 void AddRtpDataChannel() {
1100 rtc::scoped_ptr<DataContentDescription> data( 1342 rtc::scoped_ptr<DataContentDescription> data(
1101 new DataContentDescription()); 1343 new DataContentDescription());
1102 data_desc_ = data.get(); 1344 data_desc_ = data.get();
1103 1345
1104 data_desc_->AddCodec(DataCodec(101, "google-data", 1)); 1346 data_desc_->AddCodec(DataCodec(101, "google-data", 1));
1105 StreamParams data_stream; 1347 StreamParams data_stream;
1106 data_stream.id = kDataChannelMsid; 1348 data_stream.id = kDataChannelMsid;
1107 data_stream.cname = kDataChannelCname; 1349 data_stream.cname = kDataChannelCname;
1108 data_stream.sync_label = kDataChannelLabel; 1350 data_stream.sync_label = kDataChannelLabel;
1109 data_stream.ssrcs.push_back(kDataChannelSsrc); 1351 data_stream.ssrcs.push_back(kDataChannelSsrc);
1110 data_desc_->AddStream(data_stream); 1352 data_desc_->AddStream(data_stream);
1111 data_desc_->AddCrypto(CryptoParams( 1353 data_desc_->AddCrypto(CryptoParams(
1112 1, "AES_CM_128_HMAC_SHA1_80", 1354 1, "AES_CM_128_HMAC_SHA1_80",
1113 "inline:FvLcvU2P3ZWmQxgPAgcDu7Zl9vftYElFOjEzhWs5", "")); 1355 "inline:FvLcvU2P3ZWmQxgPAgcDu7Zl9vftYElFOjEzhWs5", ""));
1114 data_desc_->set_protocol(cricket::kMediaProtocolSavpf); 1356 data_desc_->set_protocol(cricket::kMediaProtocolSavpf);
1115 desc_.AddContent(kDataContentName, NS_JINGLE_RTP, data.release()); 1357 desc_.AddContent(kDataContentName, NS_JINGLE_RTP, data.release());
1116 EXPECT_TRUE(desc_.AddTransportInfo( 1358 EXPECT_TRUE(desc_.AddTransportInfo(TransportInfo(
1117 TransportInfo(kDataContentName, 1359 kDataContentName, TransportDescription(kUfragData, kPwdData))));
1118 TransportDescription(kCandidateUfragData,
1119 kCandidatePwdData))));
1120 } 1360 }
1121 1361
1122 bool TestDeserializeDirection(cricket::MediaContentDirection direction) { 1362 bool TestDeserializeDirection(cricket::MediaContentDirection direction) {
1123 std::string new_sdp = kSdpFullString; 1363 std::string new_sdp = kSdpFullString;
1124 ReplaceDirection(direction, &new_sdp); 1364 ReplaceDirection(direction, &new_sdp);
1125 JsepSessionDescription new_jdesc(kDummyString); 1365 JsepSessionDescription new_jdesc(kDummyString);
1126 1366
1127 EXPECT_TRUE(SdpDeserialize(new_sdp, &new_jdesc)); 1367 EXPECT_TRUE(SdpDeserialize(new_sdp, &new_jdesc));
1128 1368
1129 audio_desc_->set_direction(direction); 1369 audio_desc_->set_direction(direction);
(...skipping 16 matching lines...) Expand all
1146 audio_desc_ = static_cast<AudioContentDescription*>( 1386 audio_desc_ = static_cast<AudioContentDescription*>(
1147 audio_desc_->Copy()); 1387 audio_desc_->Copy());
1148 video_desc_ = static_cast<VideoContentDescription*>( 1388 video_desc_ = static_cast<VideoContentDescription*>(
1149 video_desc_->Copy()); 1389 video_desc_->Copy());
1150 desc_.RemoveContentByName(kAudioContentName); 1390 desc_.RemoveContentByName(kAudioContentName);
1151 desc_.RemoveContentByName(kVideoContentName); 1391 desc_.RemoveContentByName(kVideoContentName);
1152 desc_.AddContent(kAudioContentName, NS_JINGLE_RTP, audio_rejected, 1392 desc_.AddContent(kAudioContentName, NS_JINGLE_RTP, audio_rejected,
1153 audio_desc_); 1393 audio_desc_);
1154 desc_.AddContent(kVideoContentName, NS_JINGLE_RTP, video_rejected, 1394 desc_.AddContent(kVideoContentName, NS_JINGLE_RTP, video_rejected,
1155 video_desc_); 1395 video_desc_);
1156 SetIceUfragPwd(kAudioContentName, 1396 SetIceUfragPwd(kAudioContentName, audio_rejected ? "" : kUfragVoice,
1157 audio_rejected ? "" : kCandidateUfragVoice, 1397 audio_rejected ? "" : kPwdVoice);
1158 audio_rejected ? "" : kCandidatePwdVoice); 1398 SetIceUfragPwd(kVideoContentName, video_rejected ? "" : kUfragVideo,
1159 SetIceUfragPwd(kVideoContentName, 1399 video_rejected ? "" : kPwdVideo);
1160 video_rejected ? "" : kCandidateUfragVideo,
1161 video_rejected ? "" : kCandidatePwdVideo);
1162 JsepSessionDescription jdesc_no_candidates(kDummyString); 1400 JsepSessionDescription jdesc_no_candidates(kDummyString);
1163 if (!jdesc_no_candidates.Initialize(desc_.Copy(), jdesc_.session_id(), 1401 if (!jdesc_no_candidates.Initialize(desc_.Copy(), jdesc_.session_id(),
1164 jdesc_.session_version())) { 1402 jdesc_.session_version())) {
1165 return false; 1403 return false;
1166 } 1404 }
1167 EXPECT_TRUE(CompareSessionDescription(jdesc_no_candidates, new_jdesc)); 1405 EXPECT_TRUE(CompareSessionDescription(jdesc_no_candidates, new_jdesc));
1168 return true; 1406 return true;
1169 } 1407 }
1170 1408
1171 void TestDeserializeExtmap(bool session_level, bool media_level) { 1409 void TestDeserializeExtmap(bool session_level, bool media_level) {
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
1350 cricket::FeedbackParam(cricket::kRtcpFbParamCcm, 1588 cricket::FeedbackParam(cricket::kRtcpFbParamCcm,
1351 cricket::kRtcpFbCcmParamFir))); 1589 cricket::kRtcpFbCcmParamFir)));
1352 } 1590 }
1353 1591
1354 // Two SDP messages can mean the same thing but be different strings, e.g. 1592 // Two SDP messages can mean the same thing but be different strings, e.g.
1355 // some of the lines can be serialized in different order. 1593 // some of the lines can be serialized in different order.
1356 // However, a deserialized description can be compared field by field and has 1594 // However, a deserialized description can be compared field by field and has
1357 // no order. If deserializer has already been tested, serializing then 1595 // no order. If deserializer has already been tested, serializing then
1358 // deserializing and comparing JsepSessionDescription will test 1596 // deserializing and comparing JsepSessionDescription will test
1359 // the serializer sufficiently. 1597 // the serializer sufficiently.
1360 void TestSerialize(const JsepSessionDescription& jdesc) { 1598 void TestSerialize(const JsepSessionDescription& jdesc,
1361 std::string message = webrtc::SdpSerialize(jdesc); 1599 bool unified_plan_sdp) {
1600 std::string message = webrtc::SdpSerialize(jdesc, unified_plan_sdp);
1362 JsepSessionDescription jdesc_output_des(kDummyString); 1601 JsepSessionDescription jdesc_output_des(kDummyString);
1363 SdpParseError error; 1602 SdpParseError error;
1364 EXPECT_TRUE(webrtc::SdpDeserialize(message, &jdesc_output_des, &error)); 1603 EXPECT_TRUE(webrtc::SdpDeserialize(message, &jdesc_output_des, &error));
1365 EXPECT_TRUE(CompareSessionDescription(jdesc, jdesc_output_des)); 1604 EXPECT_TRUE(CompareSessionDescription(jdesc, jdesc_output_des));
1366 } 1605 }
1367 1606
1368 protected: 1607 protected:
1369 SessionDescription desc_; 1608 SessionDescription desc_;
1370 AudioContentDescription* audio_desc_; 1609 AudioContentDescription* audio_desc_;
1371 VideoContentDescription* video_desc_; 1610 VideoContentDescription* video_desc_;
(...skipping 950 matching lines...) Expand 10 before | Expand all | Expand 10 after
2322 TestDeserializeExtmap(true, true); 2561 TestDeserializeExtmap(true, true);
2323 } 2562 }
2324 2563
2325 TEST_F(WebRtcSdpTest, DeserializeSessionDescriptionWithoutEndLineBreak) { 2564 TEST_F(WebRtcSdpTest, DeserializeSessionDescriptionWithoutEndLineBreak) {
2326 JsepSessionDescription jdesc(kDummyString); 2565 JsepSessionDescription jdesc(kDummyString);
2327 std::string sdp = kSdpFullString; 2566 std::string sdp = kSdpFullString;
2328 sdp = sdp.substr(0, sdp.size() - 2); // Remove \r\n at the end. 2567 sdp = sdp.substr(0, sdp.size() - 2); // Remove \r\n at the end.
2329 // Deserialize 2568 // Deserialize
2330 SdpParseError error; 2569 SdpParseError error;
2331 EXPECT_FALSE(webrtc::SdpDeserialize(sdp, &jdesc, &error)); 2570 EXPECT_FALSE(webrtc::SdpDeserialize(sdp, &jdesc, &error));
2332 const std::string lastline = "a=ssrc:6 label:video_track_id_3"; 2571 const std::string lastline = "a=ssrc:3 label:video_track_id_1";
2333 EXPECT_EQ(lastline, error.line); 2572 EXPECT_EQ(lastline, error.line);
2334 EXPECT_EQ("Invalid SDP line.", error.description); 2573 EXPECT_EQ("Invalid SDP line.", error.description);
2335 } 2574 }
2336 2575
2337 TEST_F(WebRtcSdpTest, DeserializeCandidateWithDifferentTransport) { 2576 TEST_F(WebRtcSdpTest, DeserializeCandidateWithDifferentTransport) {
2338 JsepIceCandidate jcandidate(kDummyMid, kDummyIndex); 2577 JsepIceCandidate jcandidate(kDummyMid, kDummyIndex);
2339 std::string new_sdp = kSdpOneCandidate; 2578 std::string new_sdp = kSdpOneCandidate;
2340 Replace("udp", "unsupported_transport", &new_sdp); 2579 Replace("udp", "unsupported_transport", &new_sdp);
2341 EXPECT_FALSE(SdpDeserializeCandidate(new_sdp, &jcandidate)); 2580 EXPECT_FALSE(SdpDeserializeCandidate(new_sdp, &jcandidate));
2342 new_sdp = kSdpOneCandidate; 2581 new_sdp = kSdpOneCandidate;
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
2422 ExpectParseFailure("a=sendrecv", kSdpMd5); 2661 ExpectParseFailure("a=sendrecv", kSdpMd5);
2423 2662
2424 // Empty Line 2663 // Empty Line
2425 ExpectParseFailure("a=rtcp:2347 IN IP4 74.125.127.126", kSdpEmptyLine); 2664 ExpectParseFailure("a=rtcp:2347 IN IP4 74.125.127.126", kSdpEmptyLine);
2426 ExpectParseFailure("a=rtcp:2347 IN IP4 74.125.127.126", kSdpMissingValue); 2665 ExpectParseFailure("a=rtcp:2347 IN IP4 74.125.127.126", kSdpMissingValue);
2427 } 2666 }
2428 2667
2429 TEST_F(WebRtcSdpTest, DeserializeSdpWithInvalidAttributeValue) { 2668 TEST_F(WebRtcSdpTest, DeserializeSdpWithInvalidAttributeValue) {
2430 // ssrc 2669 // ssrc
2431 ExpectParseFailure("a=ssrc:1", "a=ssrc:badvalue"); 2670 ExpectParseFailure("a=ssrc:1", "a=ssrc:badvalue");
2432 ExpectParseFailure("a=ssrc-group:FEC 5 6", "a=ssrc-group:FEC badvalue 6"); 2671 ExpectParseFailure("a=ssrc-group:FEC 2 3", "a=ssrc-group:FEC badvalue 3");
2433 // crypto 2672 // crypto
2434 ExpectParseFailure("a=crypto:1 ", "a=crypto:badvalue "); 2673 ExpectParseFailure("a=crypto:1 ", "a=crypto:badvalue ");
2435 // rtpmap 2674 // rtpmap
2436 ExpectParseFailure("a=rtpmap:111 ", "a=rtpmap:badvalue "); 2675 ExpectParseFailure("a=rtpmap:111 ", "a=rtpmap:badvalue ");
2437 ExpectParseFailure("opus/48000/2", "opus/badvalue/2"); 2676 ExpectParseFailure("opus/48000/2", "opus/badvalue/2");
2438 ExpectParseFailure("opus/48000/2", "opus/48000/badvalue"); 2677 ExpectParseFailure("opus/48000/2", "opus/48000/badvalue");
2439 // candidate 2678 // candidate
2440 ExpectParseFailure("1 udp 2130706432", "badvalue udp 2130706432"); 2679 ExpectParseFailure("1 udp 2130706432", "badvalue udp 2130706432");
2441 ExpectParseFailure("1 udp 2130706432", "1 udp badvalue"); 2680 ExpectParseFailure("1 udp 2130706432", "1 udp badvalue");
2442 ExpectParseFailure("192.168.1.5 1234", "192.168.1.5 badvalue"); 2681 ExpectParseFailure("192.168.1.5 1234", "192.168.1.5 badvalue");
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
2492 JsepSessionDescription jdesc_output(kDummyString); 2731 JsepSessionDescription jdesc_output(kDummyString);
2493 CodecParams params; 2732 CodecParams params;
2494 params.max_ptime = 40; 2733 params.max_ptime = 40;
2495 params.ptime = 30; 2734 params.ptime = 30;
2496 params.min_ptime = 10; 2735 params.min_ptime = 10;
2497 params.sprop_stereo = 1; 2736 params.sprop_stereo = 1;
2498 params.stereo = 1; 2737 params.stereo = 1;
2499 params.useinband = 1; 2738 params.useinband = 1;
2500 params.maxaveragebitrate = 128000; 2739 params.maxaveragebitrate = 128000;
2501 TestDeserializeCodecParams(params, &jdesc_output); 2740 TestDeserializeCodecParams(params, &jdesc_output);
2502 TestSerialize(jdesc_output); 2741 TestSerialize(jdesc_output, false);
2503 } 2742 }
2504 2743
2505 TEST_F(WebRtcSdpTest, DeserializeSerializeRtcpFb) { 2744 TEST_F(WebRtcSdpTest, DeserializeSerializeRtcpFb) {
2506 const bool kUseWildcard = false; 2745 const bool kUseWildcard = false;
2507 JsepSessionDescription jdesc_output(kDummyString); 2746 JsepSessionDescription jdesc_output(kDummyString);
2508 TestDeserializeRtcpFb(&jdesc_output, kUseWildcard); 2747 TestDeserializeRtcpFb(&jdesc_output, kUseWildcard);
2509 TestSerialize(jdesc_output); 2748 TestSerialize(jdesc_output, false);
2510 } 2749 }
2511 2750
2512 TEST_F(WebRtcSdpTest, DeserializeSerializeRtcpFbWildcard) { 2751 TEST_F(WebRtcSdpTest, DeserializeSerializeRtcpFbWildcard) {
2513 const bool kUseWildcard = true; 2752 const bool kUseWildcard = true;
2514 JsepSessionDescription jdesc_output(kDummyString); 2753 JsepSessionDescription jdesc_output(kDummyString);
2515 TestDeserializeRtcpFb(&jdesc_output, kUseWildcard); 2754 TestDeserializeRtcpFb(&jdesc_output, kUseWildcard);
2516 TestSerialize(jdesc_output); 2755 TestSerialize(jdesc_output, false);
2517 } 2756 }
2518 2757
2519 TEST_F(WebRtcSdpTest, DeserializeVideoFmtp) { 2758 TEST_F(WebRtcSdpTest, DeserializeVideoFmtp) {
2520 JsepSessionDescription jdesc_output(kDummyString); 2759 JsepSessionDescription jdesc_output(kDummyString);
2521 2760
2522 const char kSdpWithFmtpString[] = 2761 const char kSdpWithFmtpString[] =
2523 "v=0\r\n" 2762 "v=0\r\n"
2524 "o=- 18446744069414584320 18446462598732840960 IN IP4 127.0.0.1\r\n" 2763 "o=- 18446744069414584320 18446462598732840960 IN IP4 127.0.0.1\r\n"
2525 "s=-\r\n" 2764 "s=-\r\n"
2526 "t=0 0\r\n" 2765 "t=0 0\r\n"
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
2732 const cricket::MediaContentDescription* mdesc = 2971 const cricket::MediaContentDescription* mdesc =
2733 static_cast<const cricket::MediaContentDescription*>( 2972 static_cast<const cricket::MediaContentDescription*>(
2734 desc->contents()[i].description); 2973 desc->contents()[i].description);
2735 EXPECT_EQ(media_types[media_content_in_sdp[i]], mdesc->type()); 2974 EXPECT_EQ(media_types[media_content_in_sdp[i]], mdesc->type());
2736 } 2975 }
2737 2976
2738 std::string serialized_sdp = webrtc::SdpSerialize(jdesc); 2977 std::string serialized_sdp = webrtc::SdpSerialize(jdesc);
2739 EXPECT_EQ(sdp_string, serialized_sdp); 2978 EXPECT_EQ(sdp_string, serialized_sdp);
2740 } 2979 }
2741 } 2980 }
2981
2982 TEST_F(WebRtcSdpTest, DeserializePlanBSessionDescription) {
2983 MakePlanBDescription();
2984
2985 JsepSessionDescription deserialized_description(kDummyString);
2986 EXPECT_TRUE(SdpDeserialize(kPlanBSdpFullString, &deserialized_description));
2987
2988 EXPECT_TRUE(CompareSessionDescription(jdesc_, deserialized_description));
2989 }
2990
2991 TEST_F(WebRtcSdpTest, SerializePlanBSessionDescription) {
2992 MakePlanBDescription();
2993 TestSerialize(jdesc_, false);
2994 }
2995
2996 TEST_F(WebRtcSdpTest, DeserializeUnifiedPlanSessionDescription) {
2997 MakeUnifiedPlanDescription();
2998
2999 JsepSessionDescription deserialized_description(kDummyString);
3000 EXPECT_TRUE(
3001 SdpDeserialize(kUnifiedPlanSdpFullString, &deserialized_description));
3002
3003 EXPECT_TRUE(CompareSessionDescription(jdesc_, deserialized_description));
3004 }
3005
3006 TEST_F(WebRtcSdpTest, SerializeUnifiedPlanSessionDescription) {
3007 MakeUnifiedPlanDescription();
3008 TestSerialize(jdesc_, true);
3009 }
OLDNEW
« talk/app/webrtc/webrtcsdp.cc ('K') | « talk/app/webrtc/webrtcsdp.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698