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 1012 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1023 system_clock_.AdvanceTimeMilliseconds(2 * kRtcpIntervalMs); | 1023 system_clock_.AdvanceTimeMilliseconds(2 * kRtcpIntervalMs); |
1024 EXPECT_EQ(0, InjectRtcpPacket(p2.data(), p2.size())); | 1024 EXPECT_EQ(0, InjectRtcpPacket(p2.data(), p2.size())); |
1025 system_clock_.AdvanceTimeMilliseconds(kRtcpIntervalMs + 1); | 1025 system_clock_.AdvanceTimeMilliseconds(kRtcpIntervalMs + 1); |
1026 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); | 1026 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); |
1027 EXPECT_TRUE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); | 1027 EXPECT_TRUE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); |
1028 system_clock_.AdvanceTimeMilliseconds(2 * kRtcpIntervalMs); | 1028 system_clock_.AdvanceTimeMilliseconds(2 * kRtcpIntervalMs); |
1029 EXPECT_TRUE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); | 1029 EXPECT_TRUE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); |
1030 } | 1030 } |
1031 | 1031 |
1032 TEST_F(RtcpReceiverTest, TmmbrReceivedWithNoIncomingPacket) { | 1032 TEST_F(RtcpReceiverTest, TmmbrReceivedWithNoIncomingPacket) { |
1033 // This call is expected to fail because no data has arrived. | 1033 EXPECT_EQ(0u, rtcp_receiver_->TMMBRReceived().size()); |
1034 EXPECT_EQ(-1, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); | |
1035 } | 1034 } |
1036 | 1035 |
1037 TEST_F(RtcpReceiverTest, TmmbrPacketAccepted) { | 1036 TEST_F(RtcpReceiverTest, TmmbrPacketAccepted) { |
1038 const uint32_t kMediaFlowSsrc = 0x2040608; | 1037 const uint32_t kMediaFlowSsrc = 0x2040608; |
1039 const uint32_t kSenderSsrc = 0x10203; | 1038 const uint32_t kSenderSsrc = 0x10203; |
1040 std::set<uint32_t> ssrcs; | 1039 std::set<uint32_t> ssrcs; |
1041 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above. | 1040 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above. |
1042 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); | 1041 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); |
1043 | 1042 |
1044 rtcp::Tmmbr tmmbr; | 1043 rtcp::Tmmbr tmmbr; |
1045 tmmbr.From(kSenderSsrc); | 1044 tmmbr.From(kSenderSsrc); |
1046 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 30000, 0)); | 1045 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 30000, 0)); |
1047 | 1046 |
1048 rtcp::SenderReport sr; | 1047 rtcp::SenderReport sr; |
1049 sr.From(kSenderSsrc); | 1048 sr.From(kSenderSsrc); |
1050 rtcp::CompoundPacket compound; | 1049 rtcp::CompoundPacket compound; |
1051 compound.Append(&sr); | 1050 compound.Append(&sr); |
1052 compound.Append(&tmmbr); | 1051 compound.Append(&tmmbr); |
1053 rtc::Buffer packet = compound.Build(); | 1052 rtc::Buffer packet = compound.Build(); |
1054 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); | 1053 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
1055 | 1054 |
1056 EXPECT_EQ(1, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); | 1055 std::vector<rtcp::TmmbItem> candidate_set = rtcp_receiver_->TMMBRReceived(); |
1057 TMMBRSet candidate_set; | 1056 EXPECT_EQ(1u, candidate_set.size()); |
1058 candidate_set.VerifyAndAllocateSet(1); | 1057 EXPECT_LT(0U, candidate_set[0].bitrate_bps()); |
1059 EXPECT_EQ(1, rtcp_receiver_->TMMBRReceived(1, 0, &candidate_set)); | 1058 EXPECT_EQ(kSenderSsrc, candidate_set[0].ssrc()); |
1060 EXPECT_LT(0U, candidate_set.Tmmbr(0)); | |
1061 EXPECT_EQ(kSenderSsrc, candidate_set.Ssrc(0)); | |
1062 } | 1059 } |
1063 | 1060 |
1064 TEST_F(RtcpReceiverTest, TmmbrPacketNotForUsIgnored) { | 1061 TEST_F(RtcpReceiverTest, TmmbrPacketNotForUsIgnored) { |
1065 const uint32_t kMediaFlowSsrc = 0x2040608; | 1062 const uint32_t kMediaFlowSsrc = 0x2040608; |
1066 const uint32_t kSenderSsrc = 0x10203; | 1063 const uint32_t kSenderSsrc = 0x10203; |
1067 | 1064 |
1068 rtcp::Tmmbr tmmbr; | 1065 rtcp::Tmmbr tmmbr; |
1069 tmmbr.From(kSenderSsrc); | 1066 tmmbr.From(kSenderSsrc); |
1070 // This SSRC is not what we are sending. | 1067 // This SSRC is not what we are sending. |
1071 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc + 1, 30000, 0)); | 1068 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc + 1, 30000, 0)); |
1072 | 1069 |
1073 rtcp::SenderReport sr; | 1070 rtcp::SenderReport sr; |
1074 sr.From(kSenderSsrc); | 1071 sr.From(kSenderSsrc); |
1075 rtcp::CompoundPacket compound; | 1072 rtcp::CompoundPacket compound; |
1076 compound.Append(&sr); | 1073 compound.Append(&sr); |
1077 compound.Append(&tmmbr); | 1074 compound.Append(&tmmbr); |
1078 rtc::Buffer packet = compound.Build(); | 1075 rtc::Buffer packet = compound.Build(); |
1079 | 1076 |
1080 std::set<uint32_t> ssrcs; | 1077 std::set<uint32_t> ssrcs; |
1081 ssrcs.insert(kMediaFlowSsrc); | 1078 ssrcs.insert(kMediaFlowSsrc); |
1082 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); | 1079 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); |
1083 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); | 1080 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
1084 EXPECT_EQ(0, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); | 1081 EXPECT_EQ(0u, rtcp_receiver_->TMMBRReceived().size()); |
1085 } | 1082 } |
1086 | 1083 |
1087 TEST_F(RtcpReceiverTest, TmmbrPacketZeroRateIgnored) { | 1084 TEST_F(RtcpReceiverTest, TmmbrPacketZeroRateIgnored) { |
1088 const uint32_t kMediaFlowSsrc = 0x2040608; | 1085 const uint32_t kMediaFlowSsrc = 0x2040608; |
1089 const uint32_t kSenderSsrc = 0x10203; | 1086 const uint32_t kSenderSsrc = 0x10203; |
1090 std::set<uint32_t> ssrcs; | 1087 std::set<uint32_t> ssrcs; |
1091 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above. | 1088 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above. |
1092 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); | 1089 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); |
1093 | 1090 |
1094 rtcp::Tmmbr tmmbr; | 1091 rtcp::Tmmbr tmmbr; |
1095 tmmbr.From(kSenderSsrc); | 1092 tmmbr.From(kSenderSsrc); |
1096 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 0, 0)); | 1093 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 0, 0)); |
1097 | 1094 |
1098 rtcp::SenderReport sr; | 1095 rtcp::SenderReport sr; |
1099 sr.From(kSenderSsrc); | 1096 sr.From(kSenderSsrc); |
1100 rtcp::CompoundPacket compound; | 1097 rtcp::CompoundPacket compound; |
1101 compound.Append(&sr); | 1098 compound.Append(&sr); |
1102 compound.Append(&tmmbr); | 1099 compound.Append(&tmmbr); |
1103 rtc::Buffer packet = compound.Build(); | 1100 rtc::Buffer packet = compound.Build(); |
1104 | 1101 |
1105 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); | 1102 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
1106 EXPECT_EQ(0, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); | 1103 EXPECT_EQ(0u, rtcp_receiver_->TMMBRReceived().size()); |
1107 } | 1104 } |
1108 | 1105 |
1109 TEST_F(RtcpReceiverTest, TmmbrThreeConstraintsTimeOut) { | 1106 TEST_F(RtcpReceiverTest, TmmbrThreeConstraintsTimeOut) { |
1110 const uint32_t kMediaFlowSsrc = 0x2040608; | 1107 const uint32_t kMediaFlowSsrc = 0x2040608; |
1111 const uint32_t kSenderSsrc = 0x10203; | 1108 const uint32_t kSenderSsrc = 0x10203; |
1112 std::set<uint32_t> ssrcs; | 1109 std::set<uint32_t> ssrcs; |
1113 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above. | 1110 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above. |
1114 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); | 1111 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); |
1115 | 1112 |
1116 // Inject 3 packets "from" kSenderSsrc, kSenderSsrc+1, kSenderSsrc+2. | 1113 // Inject 3 packets "from" kSenderSsrc, kSenderSsrc+1, kSenderSsrc+2. |
1117 // The times of arrival are starttime + 0, starttime + 5 and starttime + 10. | 1114 // The times of arrival are starttime + 0, starttime + 5 and starttime + 10. |
1118 for (uint32_t ssrc = kSenderSsrc; ssrc < kSenderSsrc + 3; ++ssrc) { | 1115 for (uint32_t ssrc = kSenderSsrc; ssrc < kSenderSsrc + 3; ++ssrc) { |
1119 rtcp::Tmmbr tmmbr; | 1116 rtcp::Tmmbr tmmbr; |
1120 tmmbr.From(ssrc); | 1117 tmmbr.From(ssrc); |
1121 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 30000, 0)); | 1118 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 30000, 0)); |
1122 | 1119 |
1123 rtcp::SenderReport sr; | 1120 rtcp::SenderReport sr; |
1124 sr.From(ssrc); | 1121 sr.From(ssrc); |
1125 rtcp::CompoundPacket compound; | 1122 rtcp::CompoundPacket compound; |
1126 compound.Append(&sr); | 1123 compound.Append(&sr); |
1127 compound.Append(&tmmbr); | 1124 compound.Append(&tmmbr); |
1128 rtc::Buffer packet = compound.Build(); | 1125 rtc::Buffer packet = compound.Build(); |
1129 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); | 1126 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size())); |
1130 // 5 seconds between each packet. | 1127 // 5 seconds between each packet. |
1131 system_clock_.AdvanceTimeMilliseconds(5000); | 1128 system_clock_.AdvanceTimeMilliseconds(5000); |
1132 } | 1129 } |
1133 // It is now starttime + 15. | 1130 // It is now starttime + 15. |
1134 EXPECT_EQ(3, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); | 1131 std::vector<rtcp::TmmbItem> candidate_set = rtcp_receiver_->TMMBRReceived(); |
1135 TMMBRSet candidate_set; | 1132 EXPECT_EQ(3u, candidate_set.size()); |
1136 candidate_set.VerifyAndAllocateSet(3); | 1133 EXPECT_LT(0U, candidate_set[0].bitrate_bps()); |
1137 EXPECT_EQ(3, rtcp_receiver_->TMMBRReceived(3, 0, &candidate_set)); | |
1138 EXPECT_LT(0U, candidate_set.Tmmbr(0)); | |
1139 // We expect the timeout to be 25 seconds. Advance the clock by 12 | 1134 // We expect the timeout to be 25 seconds. Advance the clock by 12 |
1140 // seconds, timing out the first packet. | 1135 // seconds, timing out the first packet. |
1141 system_clock_.AdvanceTimeMilliseconds(12000); | 1136 system_clock_.AdvanceTimeMilliseconds(12000); |
1142 // Odd behaviour: Just counting them does not trigger the timeout. | 1137 candidate_set = rtcp_receiver_->TMMBRReceived(); |
1143 EXPECT_EQ(3, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); | 1138 EXPECT_EQ(2u, candidate_set.size()); |
1144 EXPECT_EQ(2, rtcp_receiver_->TMMBRReceived(3, 0, &candidate_set)); | 1139 EXPECT_EQ(kSenderSsrc + 1, candidate_set[0].ssrc()); |
1145 EXPECT_EQ(kSenderSsrc + 1, candidate_set.Ssrc(0)); | |
1146 } | 1140 } |
1147 | 1141 |
1148 TEST_F(RtcpReceiverTest, Callbacks) { | 1142 TEST_F(RtcpReceiverTest, Callbacks) { |
1149 class RtcpCallbackImpl : public RtcpStatisticsCallback { | 1143 class RtcpCallbackImpl : public RtcpStatisticsCallback { |
1150 public: | 1144 public: |
1151 RtcpCallbackImpl() : RtcpStatisticsCallback(), ssrc_(0) {} | 1145 RtcpCallbackImpl() : RtcpStatisticsCallback(), ssrc_(0) {} |
1152 virtual ~RtcpCallbackImpl() {} | 1146 virtual ~RtcpCallbackImpl() {} |
1153 | 1147 |
1154 void StatisticsUpdated(const RtcpStatistics& statistics, | 1148 void StatisticsUpdated(const RtcpStatistics& statistics, |
1155 uint32_t ssrc) override { | 1149 uint32_t ssrc) override { |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1289 | 1283 |
1290 // Transport feedback should be ignored, but next packet should work. | 1284 // Transport feedback should be ignored, but next packet should work. |
1291 EXPECT_EQ(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpTransportFeedback); | 1285 EXPECT_EQ(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpTransportFeedback); |
1292 EXPECT_NE(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpRemb); | 1286 EXPECT_NE(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpRemb); |
1293 EXPECT_EQ(kBitrateBps, rtcp_packet_info_.receiverEstimatedMaxBitrate); | 1287 EXPECT_EQ(kBitrateBps, rtcp_packet_info_.receiverEstimatedMaxBitrate); |
1294 } | 1288 } |
1295 | 1289 |
1296 } // Anonymous namespace | 1290 } // Anonymous namespace |
1297 | 1291 |
1298 } // namespace webrtc | 1292 } // namespace webrtc |
OLD | NEW |