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

Side by Side Diff: webrtc/logging/rtc_event_log/rtc_event_log_parser.cc

Issue 2918103002: Make rtc_event_log2text output header extensions (Closed)
Patch Set: Add comment about colliding video and audio ssrcs and extension maps Created 3 years, 6 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
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 uint64_t tag; 151 uint64_t tag;
152 uint64_t message_length; 152 uint64_t message_length;
153 bool success; 153 bool success;
154 154
155 RTC_DCHECK(stream.good()); 155 RTC_DCHECK(stream.good());
156 156
157 while (1) { 157 while (1) {
158 // Check whether we have reached end of file. 158 // Check whether we have reached end of file.
159 stream.peek(); 159 stream.peek();
160 if (stream.eof()) { 160 if (stream.eof()) {
161 // Process all extensions maps for faster look-up later.
162 for (auto& event_stream : streams_) {
163 rtp_extensions_maps_[StreamId(event_stream.ssrc,
164 event_stream.direction)] =
165 &event_stream.rtp_extensions_map;
166 }
161 return true; 167 return true;
162 } 168 }
163 169
164 // Read the next message tag. The tag number is defined as 170 // Read the next message tag. The tag number is defined as
165 // (fieldnumber << 3) | wire_type. In our case, the field number is 171 // (fieldnumber << 3) | wire_type. In our case, the field number is
166 // supposed to be 1 and the wire type for an 172 // supposed to be 1 and the wire type for an
167 // length-delimited field is 2. 173 // length-delimited field is 2.
168 const uint64_t kExpectedTag = (1 << 3) | 2; 174 const uint64_t kExpectedTag = (1 << 3) | 2;
169 std::tie(tag, success) = ParseVarInt(stream); 175 std::tie(tag, success) = ParseVarInt(stream);
170 if (!success) { 176 if (!success) {
(...skipping 26 matching lines...) Expand all
197 if (!event.ParseFromArray(tmp_buffer.data(), message_length)) { 203 if (!event.ParseFromArray(tmp_buffer.data(), message_length)) {
198 LOG(LS_WARNING) << "Failed to parse protobuf message."; 204 LOG(LS_WARNING) << "Failed to parse protobuf message.";
199 return false; 205 return false;
200 } 206 }
201 207
202 EventType type = GetRuntimeEventType(event.type()); 208 EventType type = GetRuntimeEventType(event.type());
203 switch (type) { 209 switch (type) {
204 case VIDEO_RECEIVER_CONFIG_EVENT: { 210 case VIDEO_RECEIVER_CONFIG_EVENT: {
205 rtclog::StreamConfig config = GetVideoReceiveConfig(event); 211 rtclog::StreamConfig config = GetVideoReceiveConfig(event);
206 streams_.emplace_back(config.remote_ssrc, MediaType::VIDEO, 212 streams_.emplace_back(config.remote_ssrc, MediaType::VIDEO,
207 kIncomingPacket); 213 kIncomingPacket,
214 RtpHeaderExtensionMap(config.rtp_extensions));
208 streams_.emplace_back(config.local_ssrc, MediaType::VIDEO, 215 streams_.emplace_back(config.local_ssrc, MediaType::VIDEO,
209 kOutgoingPacket); 216 kOutgoingPacket,
217 RtpHeaderExtensionMap(config.rtp_extensions));
210 break; 218 break;
211 } 219 }
212 case VIDEO_SENDER_CONFIG_EVENT: { 220 case VIDEO_SENDER_CONFIG_EVENT: {
213 std::vector<rtclog::StreamConfig> configs = GetVideoSendConfig(event); 221 std::vector<rtclog::StreamConfig> configs = GetVideoSendConfig(event);
214 for (size_t i = 0; i < configs.size(); i++) { 222 for (size_t i = 0; i < configs.size(); i++) {
215 streams_.emplace_back(configs[i].local_ssrc, MediaType::VIDEO, 223 streams_.emplace_back(
216 kOutgoingPacket); 224 configs[i].local_ssrc, MediaType::VIDEO, kOutgoingPacket,
225 RtpHeaderExtensionMap(configs[i].rtp_extensions));
217 226
218 streams_.emplace_back(configs[i].rtx_ssrc, MediaType::VIDEO, 227 streams_.emplace_back(
219 kOutgoingPacket); 228 configs[i].rtx_ssrc, MediaType::VIDEO, kOutgoingPacket,
229 RtpHeaderExtensionMap(configs[i].rtp_extensions));
220 } 230 }
221 break; 231 break;
222 } 232 }
223 case AUDIO_RECEIVER_CONFIG_EVENT: { 233 case AUDIO_RECEIVER_CONFIG_EVENT: {
224 rtclog::StreamConfig config = GetAudioReceiveConfig(event); 234 rtclog::StreamConfig config = GetAudioReceiveConfig(event);
225 streams_.emplace_back(config.remote_ssrc, MediaType::AUDIO, 235 streams_.emplace_back(config.remote_ssrc, MediaType::AUDIO,
226 kIncomingPacket); 236 kIncomingPacket,
237 RtpHeaderExtensionMap(config.rtp_extensions));
227 streams_.emplace_back(config.local_ssrc, MediaType::AUDIO, 238 streams_.emplace_back(config.local_ssrc, MediaType::AUDIO,
228 kOutgoingPacket); 239 kOutgoingPacket,
240 RtpHeaderExtensionMap(config.rtp_extensions));
229 break; 241 break;
230 } 242 }
231 case AUDIO_SENDER_CONFIG_EVENT: { 243 case AUDIO_SENDER_CONFIG_EVENT: {
232 rtclog::StreamConfig config = GetAudioSendConfig(event); 244 rtclog::StreamConfig config = GetAudioSendConfig(event);
233 streams_.emplace_back(config.local_ssrc, MediaType::AUDIO, 245 streams_.emplace_back(config.local_ssrc, MediaType::AUDIO,
234 kOutgoingPacket); 246 kOutgoingPacket,
247 RtpHeaderExtensionMap(config.rtp_extensions));
235 break; 248 break;
236 } 249 }
237 default: 250 default:
238 break; 251 break;
239 } 252 }
240 253
241 events_.push_back(event); 254 events_.push_back(event);
242 } 255 }
243 } 256 }
244 257
(...skipping 10 matching lines...) Expand all
255 268
256 ParsedRtcEventLog::EventType ParsedRtcEventLog::GetEventType( 269 ParsedRtcEventLog::EventType ParsedRtcEventLog::GetEventType(
257 size_t index) const { 270 size_t index) const {
258 RTC_CHECK_LT(index, GetNumberOfEvents()); 271 RTC_CHECK_LT(index, GetNumberOfEvents());
259 const rtclog::Event& event = events_[index]; 272 const rtclog::Event& event = events_[index];
260 RTC_CHECK(event.has_type()); 273 RTC_CHECK(event.has_type());
261 return GetRuntimeEventType(event.type()); 274 return GetRuntimeEventType(event.type());
262 } 275 }
263 276
264 // The header must have space for at least IP_PACKET_SIZE bytes. 277 // The header must have space for at least IP_PACKET_SIZE bytes.
265 void ParsedRtcEventLog::GetRtpHeader(size_t index, 278 webrtc::RtpHeaderExtensionMap* ParsedRtcEventLog::GetRtpHeader(
266 PacketDirection* incoming, 279 size_t index,
267 uint8_t* header, 280 PacketDirection* incoming,
268 size_t* header_length, 281 uint8_t* header,
269 size_t* total_length) const { 282 size_t* header_length,
283 size_t* total_length) const {
270 RTC_CHECK_LT(index, GetNumberOfEvents()); 284 RTC_CHECK_LT(index, GetNumberOfEvents());
271 const rtclog::Event& event = events_[index]; 285 const rtclog::Event& event = events_[index];
272 RTC_CHECK(event.has_type()); 286 RTC_CHECK(event.has_type());
273 RTC_CHECK_EQ(event.type(), rtclog::Event::RTP_EVENT); 287 RTC_CHECK_EQ(event.type(), rtclog::Event::RTP_EVENT);
274 RTC_CHECK(event.has_rtp_packet()); 288 RTC_CHECK(event.has_rtp_packet());
275 const rtclog::RtpPacket& rtp_packet = event.rtp_packet(); 289 const rtclog::RtpPacket& rtp_packet = event.rtp_packet();
276 // Get direction of packet. 290 // Get direction of packet.
277 RTC_CHECK(rtp_packet.has_incoming()); 291 RTC_CHECK(rtp_packet.has_incoming());
278 if (incoming != nullptr) { 292 if (incoming != nullptr) {
279 *incoming = rtp_packet.incoming() ? kIncomingPacket : kOutgoingPacket; 293 *incoming = rtp_packet.incoming() ? kIncomingPacket : kOutgoingPacket;
280 } 294 }
281 // Get packet length. 295 // Get packet length.
282 RTC_CHECK(rtp_packet.has_packet_length()); 296 RTC_CHECK(rtp_packet.has_packet_length());
283 if (total_length != nullptr) { 297 if (total_length != nullptr) {
284 *total_length = rtp_packet.packet_length(); 298 *total_length = rtp_packet.packet_length();
285 } 299 }
286 // Get header length. 300 // Get header length.
287 RTC_CHECK(rtp_packet.has_header()); 301 RTC_CHECK(rtp_packet.has_header());
288 if (header_length != nullptr) { 302 if (header_length != nullptr) {
289 *header_length = rtp_packet.header().size(); 303 *header_length = rtp_packet.header().size();
290 } 304 }
291 // Get header contents. 305 // Get header contents.
292 if (header != nullptr) { 306 if (header != nullptr) {
293 const size_t kMinRtpHeaderSize = 12; 307 const size_t kMinRtpHeaderSize = 12;
294 RTC_CHECK_GE(rtp_packet.header().size(), kMinRtpHeaderSize); 308 RTC_CHECK_GE(rtp_packet.header().size(), kMinRtpHeaderSize);
295 RTC_CHECK_LE(rtp_packet.header().size(), 309 RTC_CHECK_LE(rtp_packet.header().size(),
296 static_cast<size_t>(IP_PACKET_SIZE)); 310 static_cast<size_t>(IP_PACKET_SIZE));
297 memcpy(header, rtp_packet.header().data(), rtp_packet.header().size()); 311 memcpy(header, rtp_packet.header().data(), rtp_packet.header().size());
312 uint32_t ssrc = ByteReader<uint32_t>::ReadBigEndian(header + 8);
313 StreamId stream_id(
314 ssrc, rtp_packet.incoming() ? kIncomingPacket : kOutgoingPacket);
315 auto it = rtp_extensions_maps_.find(stream_id);
316 if (it != rtp_extensions_maps_.end()) {
317 return it->second;
318 }
298 } 319 }
320 return nullptr;
299 } 321 }
300 322
301 // The packet must have space for at least IP_PACKET_SIZE bytes. 323 // The packet must have space for at least IP_PACKET_SIZE bytes.
302 void ParsedRtcEventLog::GetRtcpPacket(size_t index, 324 void ParsedRtcEventLog::GetRtcpPacket(size_t index,
303 PacketDirection* incoming, 325 PacketDirection* incoming,
304 uint8_t* packet, 326 uint8_t* packet,
305 size_t* length) const { 327 size_t* length) const {
306 RTC_CHECK_LT(index, GetNumberOfEvents()); 328 RTC_CHECK_LT(index, GetNumberOfEvents());
307 const rtclog::Event& event = events_[index]; 329 const rtclog::Event& event = events_[index];
308 RTC_CHECK(event.has_type()); 330 RTC_CHECK(event.has_type());
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after
625 ParsedRtcEventLog::MediaType ParsedRtcEventLog::GetMediaType( 647 ParsedRtcEventLog::MediaType ParsedRtcEventLog::GetMediaType(
626 uint32_t ssrc, 648 uint32_t ssrc,
627 PacketDirection direction) const { 649 PacketDirection direction) const {
628 for (auto rit = streams_.rbegin(); rit != streams_.rend(); ++rit) { 650 for (auto rit = streams_.rbegin(); rit != streams_.rend(); ++rit) {
629 if (rit->ssrc == ssrc && rit->direction == direction) 651 if (rit->ssrc == ssrc && rit->direction == direction)
630 return rit->media_type; 652 return rit->media_type;
631 } 653 }
632 return MediaType::ANY; 654 return MediaType::ANY;
633 } 655 }
634 } // namespace webrtc 656 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698