| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2015 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 |
| 11 #include "webrtc/call/rtc_event_log.h" | 11 #include "webrtc/call/rtc_event_log.h" |
| 12 | 12 |
| 13 #include <deque> | 13 #include <deque> |
| 14 #include <vector> | 14 #include <vector> |
| 15 | 15 |
| 16 #include "webrtc/base/checks.h" | 16 #include "webrtc/base/checks.h" |
| 17 #include "webrtc/base/criticalsection.h" | 17 #include "webrtc/base/criticalsection.h" |
| 18 #include "webrtc/base/thread_annotations.h" | 18 #include "webrtc/base/thread_annotations.h" |
| 19 #include "webrtc/call.h" | 19 #include "webrtc/call.h" |
| 20 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h" |
| 20 #include "webrtc/modules/rtp_rtcp/source/byte_io.h" | 21 #include "webrtc/modules/rtp_rtcp/source/byte_io.h" |
| 22 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h" |
| 21 #include "webrtc/system_wrappers/include/clock.h" | 23 #include "webrtc/system_wrappers/include/clock.h" |
| 22 #include "webrtc/system_wrappers/include/file_wrapper.h" | 24 #include "webrtc/system_wrappers/include/file_wrapper.h" |
| 23 | 25 |
| 24 #ifdef ENABLE_RTC_EVENT_LOG | 26 #ifdef ENABLE_RTC_EVENT_LOG |
| 25 // Files generated at build-time by the protobuf compiler. | 27 // Files generated at build-time by the protobuf compiler. |
| 26 #ifdef WEBRTC_ANDROID_PLATFORM_BUILD | 28 #ifdef WEBRTC_ANDROID_PLATFORM_BUILD |
| 27 #include "external/webrtc/webrtc/call/rtc_event_log.pb.h" | 29 #include "external/webrtc/webrtc/call/rtc_event_log.pb.h" |
| 28 #else | 30 #else |
| 29 #include "webrtc/call/rtc_event_log.pb.h" | 31 #include "webrtc/call/rtc_event_log.pb.h" |
| 30 #endif | 32 #endif |
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 rtclog::Event event; | 264 rtclog::Event event; |
| 263 event.set_timestamp_us(clock_->TimeInMicroseconds()); | 265 event.set_timestamp_us(clock_->TimeInMicroseconds()); |
| 264 event.set_type(rtclog::Event::VIDEO_RECEIVER_CONFIG_EVENT); | 266 event.set_type(rtclog::Event::VIDEO_RECEIVER_CONFIG_EVENT); |
| 265 | 267 |
| 266 rtclog::VideoReceiveConfig* receiver_config = | 268 rtclog::VideoReceiveConfig* receiver_config = |
| 267 event.mutable_video_receiver_config(); | 269 event.mutable_video_receiver_config(); |
| 268 receiver_config->set_remote_ssrc(config.rtp.remote_ssrc); | 270 receiver_config->set_remote_ssrc(config.rtp.remote_ssrc); |
| 269 receiver_config->set_local_ssrc(config.rtp.local_ssrc); | 271 receiver_config->set_local_ssrc(config.rtp.local_ssrc); |
| 270 | 272 |
| 271 receiver_config->set_rtcp_mode(ConvertRtcpMode(config.rtp.rtcp_mode)); | 273 receiver_config->set_rtcp_mode(ConvertRtcpMode(config.rtp.rtcp_mode)); |
| 272 | |
| 273 receiver_config->set_receiver_reference_time_report( | |
| 274 config.rtp.rtcp_xr.receiver_reference_time_report); | |
| 275 receiver_config->set_remb(config.rtp.remb); | 274 receiver_config->set_remb(config.rtp.remb); |
| 276 | 275 |
| 277 for (const auto& kv : config.rtp.rtx) { | 276 for (const auto& kv : config.rtp.rtx) { |
| 278 rtclog::RtxMap* rtx = receiver_config->add_rtx_map(); | 277 rtclog::RtxMap* rtx = receiver_config->add_rtx_map(); |
| 279 rtx->set_payload_type(kv.first); | 278 rtx->set_payload_type(kv.first); |
| 280 rtx->mutable_config()->set_rtx_ssrc(kv.second.ssrc); | 279 rtx->mutable_config()->set_rtx_ssrc(kv.second.ssrc); |
| 281 rtx->mutable_config()->set_rtx_payload_type(kv.second.payload_type); | 280 rtx->mutable_config()->set_rtx_payload_type(kv.second.payload_type); |
| 282 } | 281 } |
| 283 | 282 |
| 284 for (const auto& e : config.rtp.extensions) { | 283 for (const auto& e : config.rtp.extensions) { |
| (...skipping 30 matching lines...) Expand all Loading... |
| 315 sender_config->add_header_extensions(); | 314 sender_config->add_header_extensions(); |
| 316 extension->set_name(e.name); | 315 extension->set_name(e.name); |
| 317 extension->set_id(e.id); | 316 extension->set_id(e.id); |
| 318 } | 317 } |
| 319 | 318 |
| 320 for (const auto& rtx_ssrc : config.rtp.rtx.ssrcs) { | 319 for (const auto& rtx_ssrc : config.rtp.rtx.ssrcs) { |
| 321 sender_config->add_rtx_ssrcs(rtx_ssrc); | 320 sender_config->add_rtx_ssrcs(rtx_ssrc); |
| 322 } | 321 } |
| 323 sender_config->set_rtx_payload_type(config.rtp.rtx.payload_type); | 322 sender_config->set_rtx_payload_type(config.rtp.rtx.payload_type); |
| 324 | 323 |
| 325 sender_config->set_c_name(config.rtp.c_name); | |
| 326 | |
| 327 rtclog::EncoderConfig* encoder = sender_config->mutable_encoder(); | 324 rtclog::EncoderConfig* encoder = sender_config->mutable_encoder(); |
| 328 encoder->set_name(config.encoder_settings.payload_name); | 325 encoder->set_name(config.encoder_settings.payload_name); |
| 329 encoder->set_payload_type(config.encoder_settings.payload_type); | 326 encoder->set_payload_type(config.encoder_settings.payload_type); |
| 330 HandleEvent(&event); | 327 HandleEvent(&event); |
| 331 } | 328 } |
| 332 | 329 |
| 333 void RtcEventLogImpl::LogRtpHeader(bool incoming, | 330 void RtcEventLogImpl::LogRtpHeader(bool incoming, |
| 334 MediaType media_type, | 331 MediaType media_type, |
| 335 const uint8_t* header, | 332 const uint8_t* header, |
| 336 size_t packet_length) { | 333 size_t packet_length) { |
| (...skipping 27 matching lines...) Expand all Loading... |
| 364 void RtcEventLogImpl::LogRtcpPacket(bool incoming, | 361 void RtcEventLogImpl::LogRtcpPacket(bool incoming, |
| 365 MediaType media_type, | 362 MediaType media_type, |
| 366 const uint8_t* packet, | 363 const uint8_t* packet, |
| 367 size_t length) { | 364 size_t length) { |
| 368 rtc::CritScope lock(&crit_); | 365 rtc::CritScope lock(&crit_); |
| 369 rtclog::Event rtcp_event; | 366 rtclog::Event rtcp_event; |
| 370 rtcp_event.set_timestamp_us(clock_->TimeInMicroseconds()); | 367 rtcp_event.set_timestamp_us(clock_->TimeInMicroseconds()); |
| 371 rtcp_event.set_type(rtclog::Event::RTCP_EVENT); | 368 rtcp_event.set_type(rtclog::Event::RTCP_EVENT); |
| 372 rtcp_event.mutable_rtcp_packet()->set_incoming(incoming); | 369 rtcp_event.mutable_rtcp_packet()->set_incoming(incoming); |
| 373 rtcp_event.mutable_rtcp_packet()->set_type(ConvertMediaType(media_type)); | 370 rtcp_event.mutable_rtcp_packet()->set_type(ConvertMediaType(media_type)); |
| 374 rtcp_event.mutable_rtcp_packet()->set_packet_data(packet, length); | 371 |
| 372 RTCPUtility::RtcpCommonHeader header; |
| 373 const uint8_t* block_begin = packet; |
| 374 const uint8_t* packet_end = packet + length; |
| 375 RTC_DCHECK(length <= IP_PACKET_SIZE); |
| 376 uint8_t buffer[IP_PACKET_SIZE]; |
| 377 uint32_t buffer_length = 0; |
| 378 while (block_begin < packet_end) { |
| 379 if (!RtcpParseCommonHeader(block_begin, packet_end - block_begin, |
| 380 &header)) { |
| 381 break; // Incorrect message header. |
| 382 } |
| 383 uint32_t block_size = header.BlockSize(); |
| 384 switch (header.packet_type) { |
| 385 case RTCPUtility::PT_SR: |
| 386 FALLTHROUGH(); |
| 387 case RTCPUtility::PT_RR: |
| 388 FALLTHROUGH(); |
| 389 case RTCPUtility::PT_BYE: |
| 390 FALLTHROUGH(); |
| 391 case RTCPUtility::PT_IJ: |
| 392 FALLTHROUGH(); |
| 393 case RTCPUtility::PT_RTPFB: |
| 394 FALLTHROUGH(); |
| 395 case RTCPUtility::PT_PSFB: |
| 396 FALLTHROUGH(); |
| 397 case RTCPUtility::PT_XR: |
| 398 // We log sender reports, receiver reports, bye messages |
| 399 // inter-arrival jitter, third-party loss reports, payload-specific |
| 400 // feedback and extended reports. |
| 401 memcpy(buffer + buffer_length, block_begin, block_size); |
| 402 buffer_length += block_size; |
| 403 break; |
| 404 case RTCPUtility::PT_SDES: |
| 405 FALLTHROUGH(); |
| 406 case RTCPUtility::PT_APP: |
| 407 FALLTHROUGH(); |
| 408 default: |
| 409 // We don't log sender descriptions, application defined messages |
| 410 // or message blocks of unknown type. |
| 411 break; |
| 412 } |
| 413 |
| 414 block_begin += block_size; |
| 415 } |
| 416 rtcp_event.mutable_rtcp_packet()->set_packet_data(buffer, buffer_length); |
| 375 HandleEvent(&rtcp_event); | 417 HandleEvent(&rtcp_event); |
| 376 } | 418 } |
| 377 | 419 |
| 378 void RtcEventLogImpl::LogAudioPlayout(uint32_t ssrc) { | 420 void RtcEventLogImpl::LogAudioPlayout(uint32_t ssrc) { |
| 379 rtc::CritScope lock(&crit_); | 421 rtc::CritScope lock(&crit_); |
| 380 rtclog::Event event; | 422 rtclog::Event event; |
| 381 event.set_timestamp_us(clock_->TimeInMicroseconds()); | 423 event.set_timestamp_us(clock_->TimeInMicroseconds()); |
| 382 event.set_type(rtclog::Event::AUDIO_PLAYOUT_EVENT); | 424 event.set_type(rtclog::Event::AUDIO_PLAYOUT_EVENT); |
| 383 auto playout_event = event.mutable_audio_playout_event(); | 425 auto playout_event = event.mutable_audio_playout_event(); |
| 384 playout_event->set_local_ssrc(ssrc); | 426 playout_event->set_local_ssrc(ssrc); |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 472 } | 514 } |
| 473 | 515 |
| 474 #endif // ENABLE_RTC_EVENT_LOG | 516 #endif // ENABLE_RTC_EVENT_LOG |
| 475 | 517 |
| 476 // RtcEventLog member functions. | 518 // RtcEventLog member functions. |
| 477 rtc::scoped_ptr<RtcEventLog> RtcEventLog::Create() { | 519 rtc::scoped_ptr<RtcEventLog> RtcEventLog::Create() { |
| 478 return rtc::scoped_ptr<RtcEventLog>(new RtcEventLogImpl()); | 520 return rtc::scoped_ptr<RtcEventLog>(new RtcEventLogImpl()); |
| 479 } | 521 } |
| 480 | 522 |
| 481 } // namespace webrtc | 523 } // namespace webrtc |
| OLD | NEW |