| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 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 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 307 break; | 307 break; |
| 308 case RTCPPacketTypes::kXrHeader: | 308 case RTCPPacketTypes::kXrHeader: |
| 309 HandleXrHeader(*rtcpParser, rtcpPacketInformation); | 309 HandleXrHeader(*rtcpParser, rtcpPacketInformation); |
| 310 break; | 310 break; |
| 311 case RTCPPacketTypes::kXrReceiverReferenceTime: | 311 case RTCPPacketTypes::kXrReceiverReferenceTime: |
| 312 HandleXrReceiveReferenceTime(*rtcpParser, rtcpPacketInformation); | 312 HandleXrReceiveReferenceTime(*rtcpParser, rtcpPacketInformation); |
| 313 break; | 313 break; |
| 314 case RTCPPacketTypes::kXrDlrrReportBlock: | 314 case RTCPPacketTypes::kXrDlrrReportBlock: |
| 315 HandleXrDlrrReportBlock(*rtcpParser, rtcpPacketInformation); | 315 HandleXrDlrrReportBlock(*rtcpParser, rtcpPacketInformation); |
| 316 break; | 316 break; |
| 317 case RTCPPacketTypes::kXrVoipMetric: | |
| 318 HandleXRVOIPMetric(*rtcpParser, rtcpPacketInformation); | |
| 319 break; | |
| 320 case RTCPPacketTypes::kBye: | 317 case RTCPPacketTypes::kBye: |
| 321 HandleBYE(*rtcpParser); | 318 HandleBYE(*rtcpParser); |
| 322 break; | 319 break; |
| 323 case RTCPPacketTypes::kRtpfbNack: | 320 case RTCPPacketTypes::kRtpfbNack: |
| 324 HandleNACK(*rtcpParser, rtcpPacketInformation); | 321 HandleNACK(*rtcpParser, rtcpPacketInformation); |
| 325 break; | 322 break; |
| 326 case RTCPPacketTypes::kRtpfbTmmbr: | 323 case RTCPPacketTypes::kRtpfbTmmbr: |
| 327 HandleTMMBR(*rtcpParser, rtcpPacketInformation); | 324 HandleTMMBR(*rtcpParser, rtcpPacketInformation); |
| 328 break; | 325 break; |
| 329 case RTCPPacketTypes::kRtpfbTmmbn: | 326 case RTCPPacketTypes::kRtpfbTmmbn: |
| 330 HandleTMMBN(*rtcpParser, rtcpPacketInformation); | 327 HandleTMMBN(*rtcpParser, rtcpPacketInformation); |
| 331 break; | 328 break; |
| 332 case RTCPPacketTypes::kRtpfbSrReq: | 329 case RTCPPacketTypes::kRtpfbSrReq: |
| 333 HandleSR_REQ(*rtcpParser, rtcpPacketInformation); | 330 HandleSR_REQ(*rtcpParser, rtcpPacketInformation); |
| 334 break; | 331 break; |
| 335 case RTCPPacketTypes::kPsfbPli: | 332 case RTCPPacketTypes::kPsfbPli: |
| 336 HandlePLI(*rtcpParser, rtcpPacketInformation); | 333 HandlePLI(*rtcpParser, rtcpPacketInformation); |
| 337 break; | 334 break; |
| 338 case RTCPPacketTypes::kPsfbSli: | 335 case RTCPPacketTypes::kPsfbSli: |
| 339 HandleSLI(*rtcpParser, rtcpPacketInformation); | 336 HandleSLI(*rtcpParser, rtcpPacketInformation); |
| 340 break; | 337 break; |
| 341 case RTCPPacketTypes::kPsfbRpsi: | 338 case RTCPPacketTypes::kPsfbRpsi: |
| 342 HandleRPSI(*rtcpParser, rtcpPacketInformation); | 339 HandleRPSI(*rtcpParser, rtcpPacketInformation); |
| 343 break; | 340 break; |
| 344 case RTCPPacketTypes::kExtendedIj: | |
| 345 HandleIJ(*rtcpParser, rtcpPacketInformation); | |
| 346 break; | |
| 347 case RTCPPacketTypes::kPsfbFir: | 341 case RTCPPacketTypes::kPsfbFir: |
| 348 HandleFIR(*rtcpParser, rtcpPacketInformation); | 342 HandleFIR(*rtcpParser, rtcpPacketInformation); |
| 349 break; | 343 break; |
| 350 case RTCPPacketTypes::kPsfbApp: | 344 case RTCPPacketTypes::kPsfbApp: |
| 351 HandlePsfbApp(*rtcpParser, rtcpPacketInformation); | 345 HandlePsfbApp(*rtcpParser, rtcpPacketInformation); |
| 352 break; | 346 break; |
| 353 case RTCPPacketTypes::kApp: | |
| 354 // generic application messages | |
| 355 HandleAPP(*rtcpParser, rtcpPacketInformation); | |
| 356 break; | |
| 357 case RTCPPacketTypes::kAppItem: | |
| 358 // generic application messages | |
| 359 HandleAPPItem(*rtcpParser, rtcpPacketInformation); | |
| 360 break; | |
| 361 case RTCPPacketTypes::kTransportFeedback: | 347 case RTCPPacketTypes::kTransportFeedback: |
| 362 HandleTransportFeedback(rtcpParser, &rtcpPacketInformation); | 348 HandleTransportFeedback(rtcpParser, &rtcpPacketInformation); |
| 363 break; | 349 break; |
| 364 default: | 350 default: |
| 365 rtcpParser->Iterate(); | 351 rtcpParser->Iterate(); |
| 366 break; | 352 break; |
| 367 } | 353 } |
| 368 pktType = rtcpParser->PacketType(); | 354 pktType = rtcpParser->PacketType(); |
| 369 } | 355 } |
| 370 | 356 |
| (...skipping 531 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 902 | 888 |
| 903 uint32_t delay_rr = packet.XRDLRRReportBlockItem.DelayLastRR; | 889 uint32_t delay_rr = packet.XRDLRRReportBlockItem.DelayLastRR; |
| 904 uint32_t now = CompactNtp(NtpTime(*_clock)); | 890 uint32_t now = CompactNtp(NtpTime(*_clock)); |
| 905 | 891 |
| 906 uint32_t rtt_ntp = now - delay_rr - send_time; | 892 uint32_t rtt_ntp = now - delay_rr - send_time; |
| 907 xr_rr_rtt_ms_ = CompactNtpRttToMs(rtt_ntp); | 893 xr_rr_rtt_ms_ = CompactNtpRttToMs(rtt_ntp); |
| 908 | 894 |
| 909 rtcpPacketInformation.rtcpPacketTypeFlags |= kRtcpXrDlrrReportBlock; | 895 rtcpPacketInformation.rtcpPacketTypeFlags |= kRtcpXrDlrrReportBlock; |
| 910 } | 896 } |
| 911 | 897 |
| 912 void RTCPReceiver::HandleXRVOIPMetric( | |
| 913 RTCPUtility::RTCPParserV2& rtcpParser, | |
| 914 RTCPPacketInformation& rtcpPacketInformation) { | |
| 915 const RTCPUtility::RTCPPacket& rtcpPacket = rtcpParser.Packet(); | |
| 916 | |
| 917 if (rtcpPacket.XRVOIPMetricItem.SSRC == main_ssrc_) { | |
| 918 // Store VoIP metrics block if it's about me | |
| 919 // from OriginatorSSRC do we filter it? | |
| 920 // rtcpPacket.XR.OriginatorSSRC; | |
| 921 | |
| 922 RTCPVoIPMetric receivedVoIPMetrics; | |
| 923 receivedVoIPMetrics.burstDensity = rtcpPacket.XRVOIPMetricItem.burstDensity; | |
| 924 receivedVoIPMetrics.burstDuration = | |
| 925 rtcpPacket.XRVOIPMetricItem.burstDuration; | |
| 926 receivedVoIPMetrics.discardRate = rtcpPacket.XRVOIPMetricItem.discardRate; | |
| 927 receivedVoIPMetrics.endSystemDelay = | |
| 928 rtcpPacket.XRVOIPMetricItem.endSystemDelay; | |
| 929 receivedVoIPMetrics.extRfactor = rtcpPacket.XRVOIPMetricItem.extRfactor; | |
| 930 receivedVoIPMetrics.gapDensity = rtcpPacket.XRVOIPMetricItem.gapDensity; | |
| 931 receivedVoIPMetrics.gapDuration = rtcpPacket.XRVOIPMetricItem.gapDuration; | |
| 932 receivedVoIPMetrics.Gmin = rtcpPacket.XRVOIPMetricItem.Gmin; | |
| 933 receivedVoIPMetrics.JBabsMax = rtcpPacket.XRVOIPMetricItem.JBabsMax; | |
| 934 receivedVoIPMetrics.JBmax = rtcpPacket.XRVOIPMetricItem.JBmax; | |
| 935 receivedVoIPMetrics.JBnominal = rtcpPacket.XRVOIPMetricItem.JBnominal; | |
| 936 receivedVoIPMetrics.lossRate = rtcpPacket.XRVOIPMetricItem.lossRate; | |
| 937 receivedVoIPMetrics.MOSCQ = rtcpPacket.XRVOIPMetricItem.MOSCQ; | |
| 938 receivedVoIPMetrics.MOSLQ = rtcpPacket.XRVOIPMetricItem.MOSLQ; | |
| 939 receivedVoIPMetrics.noiseLevel = rtcpPacket.XRVOIPMetricItem.noiseLevel; | |
| 940 receivedVoIPMetrics.RERL = rtcpPacket.XRVOIPMetricItem.RERL; | |
| 941 receivedVoIPMetrics.Rfactor = rtcpPacket.XRVOIPMetricItem.Rfactor; | |
| 942 receivedVoIPMetrics.roundTripDelay = | |
| 943 rtcpPacket.XRVOIPMetricItem.roundTripDelay; | |
| 944 receivedVoIPMetrics.RXconfig = rtcpPacket.XRVOIPMetricItem.RXconfig; | |
| 945 receivedVoIPMetrics.signalLevel = rtcpPacket.XRVOIPMetricItem.signalLevel; | |
| 946 | |
| 947 rtcpPacketInformation.AddVoIPMetric(&receivedVoIPMetrics); | |
| 948 | |
| 949 rtcpPacketInformation.rtcpPacketTypeFlags |= | |
| 950 kRtcpXrVoipMetric; // received signal | |
| 951 } | |
| 952 rtcpParser.Iterate(); | |
| 953 } | |
| 954 | |
| 955 void RTCPReceiver::HandlePLI(RTCPUtility::RTCPParserV2& rtcpParser, | 898 void RTCPReceiver::HandlePLI(RTCPUtility::RTCPParserV2& rtcpParser, |
| 956 RTCPPacketInformation& rtcpPacketInformation) { | 899 RTCPPacketInformation& rtcpPacketInformation) { |
| 957 const RTCPUtility::RTCPPacket& rtcpPacket = rtcpParser.Packet(); | 900 const RTCPUtility::RTCPPacket& rtcpPacket = rtcpParser.Packet(); |
| 958 if (main_ssrc_ == rtcpPacket.PLI.MediaSSRC) { | 901 if (main_ssrc_ == rtcpPacket.PLI.MediaSSRC) { |
| 959 TRACE_EVENT_INSTANT0(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), "PLI"); | 902 TRACE_EVENT_INSTANT0(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), "PLI"); |
| 960 | 903 |
| 961 ++packet_type_counter_.pli_packets; | 904 ++packet_type_counter_.pli_packets; |
| 962 // Received a signal that we need to send a new key frame. | 905 // Received a signal that we need to send a new key frame. |
| 963 rtcpPacketInformation.rtcpPacketTypeFlags |= kRtcpPli; | 906 rtcpPacketInformation.rtcpPacketTypeFlags |= kRtcpPli; |
| 964 } | 907 } |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1111 RTCPUtility::RTCPPacketTypes pktType = rtcpParser.Iterate(); | 1054 RTCPUtility::RTCPPacketTypes pktType = rtcpParser.Iterate(); |
| 1112 if (pktType == RTCPPacketTypes::kPsfbRemb) { | 1055 if (pktType == RTCPPacketTypes::kPsfbRemb) { |
| 1113 pktType = rtcpParser.Iterate(); | 1056 pktType = rtcpParser.Iterate(); |
| 1114 if (pktType == RTCPPacketTypes::kPsfbRembItem) { | 1057 if (pktType == RTCPPacketTypes::kPsfbRembItem) { |
| 1115 HandleREMBItem(rtcpParser, rtcpPacketInformation); | 1058 HandleREMBItem(rtcpParser, rtcpPacketInformation); |
| 1116 rtcpParser.Iterate(); | 1059 rtcpParser.Iterate(); |
| 1117 } | 1060 } |
| 1118 } | 1061 } |
| 1119 } | 1062 } |
| 1120 | 1063 |
| 1121 void RTCPReceiver::HandleIJ(RTCPUtility::RTCPParserV2& rtcpParser, | |
| 1122 RTCPPacketInformation& rtcpPacketInformation) { | |
| 1123 const RTCPUtility::RTCPPacket& rtcpPacket = rtcpParser.Packet(); | |
| 1124 | |
| 1125 RTCPUtility::RTCPPacketTypes pktType = rtcpParser.Iterate(); | |
| 1126 while (pktType == RTCPPacketTypes::kExtendedIjItem) { | |
| 1127 HandleIJItem(rtcpPacket, rtcpPacketInformation); | |
| 1128 pktType = rtcpParser.Iterate(); | |
| 1129 } | |
| 1130 } | |
| 1131 | |
| 1132 void RTCPReceiver::HandleIJItem(const RTCPUtility::RTCPPacket& rtcpPacket, | |
| 1133 RTCPPacketInformation& rtcpPacketInformation) { | |
| 1134 rtcpPacketInformation.rtcpPacketTypeFlags |= kRtcpTransmissionTimeOffset; | |
| 1135 rtcpPacketInformation.interArrivalJitter = | |
| 1136 rtcpPacket.ExtendedJitterReportItem.Jitter; | |
| 1137 } | |
| 1138 | |
| 1139 void RTCPReceiver::HandleREMBItem( | 1064 void RTCPReceiver::HandleREMBItem( |
| 1140 RTCPUtility::RTCPParserV2& rtcpParser, | 1065 RTCPUtility::RTCPParserV2& rtcpParser, |
| 1141 RTCPPacketInformation& rtcpPacketInformation) { | 1066 RTCPPacketInformation& rtcpPacketInformation) { |
| 1142 const RTCPUtility::RTCPPacket& rtcpPacket = rtcpParser.Packet(); | 1067 const RTCPUtility::RTCPPacket& rtcpPacket = rtcpParser.Packet(); |
| 1143 rtcpPacketInformation.rtcpPacketTypeFlags |= kRtcpRemb; | 1068 rtcpPacketInformation.rtcpPacketTypeFlags |= kRtcpRemb; |
| 1144 rtcpPacketInformation.receiverEstimatedMaxBitrate = | 1069 rtcpPacketInformation.receiverEstimatedMaxBitrate = |
| 1145 rtcpPacket.REMBItem.BitRate; | 1070 rtcpPacket.REMBItem.BitRate; |
| 1146 } | 1071 } |
| 1147 | 1072 |
| 1148 void RTCPReceiver::HandleFIR(RTCPUtility::RTCPParserV2& rtcpParser, | 1073 void RTCPReceiver::HandleFIR(RTCPUtility::RTCPParserV2& rtcpParser, |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1183 // received signal that we need to send a new key frame | 1108 // received signal that we need to send a new key frame |
| 1184 rtcpPacketInformation.rtcpPacketTypeFlags |= kRtcpFir; | 1109 rtcpPacketInformation.rtcpPacketTypeFlags |= kRtcpFir; |
| 1185 } | 1110 } |
| 1186 } | 1111 } |
| 1187 } else { | 1112 } else { |
| 1188 // received signal that we need to send a new key frame | 1113 // received signal that we need to send a new key frame |
| 1189 rtcpPacketInformation.rtcpPacketTypeFlags |= kRtcpFir; | 1114 rtcpPacketInformation.rtcpPacketTypeFlags |= kRtcpFir; |
| 1190 } | 1115 } |
| 1191 } | 1116 } |
| 1192 | 1117 |
| 1193 void RTCPReceiver::HandleAPP(RTCPUtility::RTCPParserV2& rtcpParser, | |
| 1194 RTCPPacketInformation& rtcpPacketInformation) { | |
| 1195 const RTCPUtility::RTCPPacket& rtcpPacket = rtcpParser.Packet(); | |
| 1196 | |
| 1197 rtcpPacketInformation.rtcpPacketTypeFlags |= kRtcpApp; | |
| 1198 rtcpPacketInformation.applicationSubType = rtcpPacket.APP.SubType; | |
| 1199 rtcpPacketInformation.applicationName = rtcpPacket.APP.Name; | |
| 1200 | |
| 1201 rtcpParser.Iterate(); | |
| 1202 } | |
| 1203 | |
| 1204 void RTCPReceiver::HandleAPPItem(RTCPUtility::RTCPParserV2& rtcpParser, | |
| 1205 RTCPPacketInformation& rtcpPacketInformation) { | |
| 1206 const RTCPUtility::RTCPPacket& rtcpPacket = rtcpParser.Packet(); | |
| 1207 | |
| 1208 rtcpPacketInformation.AddApplicationData(rtcpPacket.APP.Data, | |
| 1209 rtcpPacket.APP.Size); | |
| 1210 | |
| 1211 rtcpParser.Iterate(); | |
| 1212 } | |
| 1213 | |
| 1214 void RTCPReceiver::HandleTransportFeedback( | 1118 void RTCPReceiver::HandleTransportFeedback( |
| 1215 RTCPUtility::RTCPParserV2* rtcp_parser, | 1119 RTCPUtility::RTCPParserV2* rtcp_parser, |
| 1216 RTCPHelp::RTCPPacketInformation* rtcp_packet_information) { | 1120 RTCPHelp::RTCPPacketInformation* rtcp_packet_information) { |
| 1217 rtcp::RtcpPacket* packet = rtcp_parser->ReleaseRtcpPacket(); | 1121 rtcp::RtcpPacket* packet = rtcp_parser->ReleaseRtcpPacket(); |
| 1218 RTC_DCHECK(packet != nullptr); | 1122 RTC_DCHECK(packet != nullptr); |
| 1219 rtcp_packet_information->rtcpPacketTypeFlags |= kRtcpTransportFeedback; | 1123 rtcp_packet_information->rtcpPacketTypeFlags |= kRtcpTransportFeedback; |
| 1220 rtcp_packet_information->transport_feedback_.reset( | 1124 rtcp_packet_information->transport_feedback_.reset( |
| 1221 static_cast<rtcp::TransportFeedback*>(packet)); | 1125 static_cast<rtcp::TransportFeedback*>(packet)); |
| 1222 | 1126 |
| 1223 rtcp_parser->Iterate(); | 1127 rtcp_parser->Iterate(); |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1379 | 1283 |
| 1380 for (const auto& kv : _receivedInfoMap) { | 1284 for (const auto& kv : _receivedInfoMap) { |
| 1381 RTCPReceiveInformation* receive_info = kv.second; | 1285 RTCPReceiveInformation* receive_info = kv.second; |
| 1382 RTC_DCHECK(receive_info); | 1286 RTC_DCHECK(receive_info); |
| 1383 receive_info->GetTmmbrSet(now_ms, &candidates); | 1287 receive_info->GetTmmbrSet(now_ms, &candidates); |
| 1384 } | 1288 } |
| 1385 return candidates; | 1289 return candidates; |
| 1386 } | 1290 } |
| 1387 | 1291 |
| 1388 } // namespace webrtc | 1292 } // namespace webrtc |
| OLD | NEW |