OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 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 #include <algorithm> | 10 #include <algorithm> |
(...skipping 1290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1301 class RtcpModeObserver : public test::EndToEndTest { | 1301 class RtcpModeObserver : public test::EndToEndTest { |
1302 public: | 1302 public: |
1303 explicit RtcpModeObserver(RtcpMode rtcp_mode) | 1303 explicit RtcpModeObserver(RtcpMode rtcp_mode) |
1304 : EndToEndTest(kDefaultTimeoutMs), | 1304 : EndToEndTest(kDefaultTimeoutMs), |
1305 rtcp_mode_(rtcp_mode), | 1305 rtcp_mode_(rtcp_mode), |
1306 sent_rtp_(0), | 1306 sent_rtp_(0), |
1307 sent_rtcp_(0) {} | 1307 sent_rtcp_(0) {} |
1308 | 1308 |
1309 private: | 1309 private: |
1310 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 1310 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
| 1311 rtc::CritScope lock(&crit_); |
1311 if (++sent_rtp_ % 3 == 0) | 1312 if (++sent_rtp_ % 3 == 0) |
1312 return DROP_PACKET; | 1313 return DROP_PACKET; |
1313 | 1314 |
1314 return SEND_PACKET; | 1315 return SEND_PACKET; |
1315 } | 1316 } |
1316 | 1317 |
1317 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { | 1318 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { |
| 1319 rtc::CritScope lock(&crit_); |
1318 ++sent_rtcp_; | 1320 ++sent_rtcp_; |
1319 test::RtcpPacketParser parser; | 1321 test::RtcpPacketParser parser; |
1320 EXPECT_TRUE(parser.Parse(packet, length)); | 1322 EXPECT_TRUE(parser.Parse(packet, length)); |
1321 | 1323 |
1322 EXPECT_EQ(0, parser.sender_report()->num_packets()); | 1324 EXPECT_EQ(0, parser.sender_report()->num_packets()); |
1323 | 1325 |
1324 switch (rtcp_mode_) { | 1326 switch (rtcp_mode_) { |
1325 case RtcpMode::kCompound: | 1327 case RtcpMode::kCompound: |
1326 if (parser.receiver_report()->num_packets() == 0) { | 1328 // TODO(holmer): We shouldn't send transport feedback alone if |
| 1329 // compound RTCP is negotiated. |
| 1330 if (parser.receiver_report()->num_packets() == 0 && |
| 1331 parser.transport_feedback()->num_packets() == 0) { |
1327 ADD_FAILURE() << "Received RTCP packet without receiver report for " | 1332 ADD_FAILURE() << "Received RTCP packet without receiver report for " |
1328 "RtcpMode::kCompound."; | 1333 "RtcpMode::kCompound."; |
1329 observation_complete_.Set(); | 1334 observation_complete_.Set(); |
1330 } | 1335 } |
1331 | 1336 |
1332 if (sent_rtcp_ >= kNumCompoundRtcpPacketsToObserve) | 1337 if (sent_rtcp_ >= kNumCompoundRtcpPacketsToObserve) |
1333 observation_complete_.Set(); | 1338 observation_complete_.Set(); |
1334 | 1339 |
1335 break; | 1340 break; |
1336 case RtcpMode::kReducedSize: | 1341 case RtcpMode::kReducedSize: |
(...skipping 18 matching lines...) Expand all Loading... |
1355 } | 1360 } |
1356 | 1361 |
1357 void PerformTest() override { | 1362 void PerformTest() override { |
1358 EXPECT_TRUE(Wait()) | 1363 EXPECT_TRUE(Wait()) |
1359 << (rtcp_mode_ == RtcpMode::kCompound | 1364 << (rtcp_mode_ == RtcpMode::kCompound |
1360 ? "Timed out before observing enough compound packets." | 1365 ? "Timed out before observing enough compound packets." |
1361 : "Timed out before receiving a non-compound RTCP packet."); | 1366 : "Timed out before receiving a non-compound RTCP packet."); |
1362 } | 1367 } |
1363 | 1368 |
1364 RtcpMode rtcp_mode_; | 1369 RtcpMode rtcp_mode_; |
1365 int sent_rtp_; | 1370 rtc::CriticalSection crit_; |
1366 int sent_rtcp_; | 1371 // Must be protected since RTCP can be sent by both the process thread |
| 1372 // and the pacer thread. |
| 1373 int sent_rtp_ GUARDED_BY(&crit_); |
| 1374 int sent_rtcp_ GUARDED_BY(&crit_); |
1367 } test(rtcp_mode); | 1375 } test(rtcp_mode); |
1368 | 1376 |
1369 RunBaseTest(&test); | 1377 RunBaseTest(&test); |
1370 } | 1378 } |
1371 | 1379 |
1372 TEST_P(EndToEndTest, UsesRtcpCompoundMode) { | 1380 TEST_P(EndToEndTest, UsesRtcpCompoundMode) { |
1373 RespectsRtcpMode(RtcpMode::kCompound); | 1381 RespectsRtcpMode(RtcpMode::kCompound); |
1374 } | 1382 } |
1375 | 1383 |
1376 TEST_P(EndToEndTest, UsesRtcpReducedSizeMode) { | 1384 TEST_P(EndToEndTest, UsesRtcpReducedSizeMode) { |
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1796 receiver_call_ = receiver_call; | 1804 receiver_call_ = receiver_call; |
1797 } | 1805 } |
1798 | 1806 |
1799 size_t GetNumVideoStreams() const override { return num_video_streams_; } | 1807 size_t GetNumVideoStreams() const override { return num_video_streams_; } |
1800 size_t GetNumAudioStreams() const override { return num_audio_streams_; } | 1808 size_t GetNumAudioStreams() const override { return num_audio_streams_; } |
1801 | 1809 |
1802 void ModifyVideoConfigs( | 1810 void ModifyVideoConfigs( |
1803 VideoSendStream::Config* send_config, | 1811 VideoSendStream::Config* send_config, |
1804 std::vector<VideoReceiveStream::Config>* receive_configs, | 1812 std::vector<VideoReceiveStream::Config>* receive_configs, |
1805 VideoEncoderConfig* encoder_config) override { | 1813 VideoEncoderConfig* encoder_config) override { |
1806 send_config->rtp.extensions.clear(); | |
1807 send_config->rtp.extensions.push_back( | |
1808 RtpExtension(RtpExtension::kTransportSequenceNumberUri, kExtensionId)); | |
1809 (*receive_configs)[0].rtp.extensions = send_config->rtp.extensions; | |
1810 (*receive_configs)[0].rtp.transport_cc = feedback_enabled_; | 1814 (*receive_configs)[0].rtp.transport_cc = feedback_enabled_; |
1811 } | 1815 } |
1812 | 1816 |
1813 void ModifyAudioConfigs( | 1817 void ModifyAudioConfigs( |
1814 AudioSendStream::Config* send_config, | 1818 AudioSendStream::Config* send_config, |
1815 std::vector<AudioReceiveStream::Config>* receive_configs) override { | 1819 std::vector<AudioReceiveStream::Config>* receive_configs) override { |
1816 send_config->rtp.extensions.clear(); | 1820 send_config->rtp.extensions.clear(); |
1817 send_config->rtp.extensions.push_back( | 1821 send_config->rtp.extensions.push_back( |
1818 RtpExtension(RtpExtension::kTransportSequenceNumberUri, kExtensionId)); | 1822 RtpExtension(RtpExtension::kTransportSequenceNumberUri, kExtensionId)); |
1819 (*receive_configs)[0].rtp.extensions.clear(); | 1823 (*receive_configs)[0].rtp.extensions.clear(); |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1927 receiver_transport.StopSending(); | 1931 receiver_transport.StopSending(); |
1928 | 1932 |
1929 DestroyStreams(); | 1933 DestroyStreams(); |
1930 } | 1934 } |
1931 | 1935 |
1932 TEST_P(EndToEndTest, ReceiveStreamSendsRemb) { | 1936 TEST_P(EndToEndTest, ReceiveStreamSendsRemb) { |
1933 class RembObserver : public test::EndToEndTest { | 1937 class RembObserver : public test::EndToEndTest { |
1934 public: | 1938 public: |
1935 RembObserver() : EndToEndTest(kDefaultTimeoutMs) {} | 1939 RembObserver() : EndToEndTest(kDefaultTimeoutMs) {} |
1936 | 1940 |
| 1941 void ModifyVideoConfigs( |
| 1942 VideoSendStream::Config* send_config, |
| 1943 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 1944 VideoEncoderConfig* encoder_config) override { |
| 1945 send_config->rtp.extensions.clear(); |
| 1946 send_config->rtp.extensions.push_back(RtpExtension( |
| 1947 RtpExtension::kAbsSendTimeUri, test::kAbsSendTimeExtensionId)); |
| 1948 (*receive_configs)[0].rtp.remb = true; |
| 1949 (*receive_configs)[0].rtp.transport_cc = false; |
| 1950 } |
| 1951 |
1937 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { | 1952 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { |
1938 test::RtcpPacketParser parser; | 1953 test::RtcpPacketParser parser; |
1939 EXPECT_TRUE(parser.Parse(packet, length)); | 1954 EXPECT_TRUE(parser.Parse(packet, length)); |
1940 | 1955 |
1941 if (parser.remb()->num_packets() > 0) { | 1956 if (parser.remb()->num_packets() > 0) { |
1942 EXPECT_EQ(kReceiverLocalVideoSsrc, parser.remb()->sender_ssrc()); | 1957 EXPECT_EQ(kReceiverLocalVideoSsrc, parser.remb()->sender_ssrc()); |
1943 EXPECT_LT(0U, parser.remb()->bitrate_bps()); | 1958 EXPECT_LT(0U, parser.remb()->bitrate_bps()); |
1944 EXPECT_EQ(1U, parser.remb()->ssrcs().size()); | 1959 EXPECT_EQ(1U, parser.remb()->ssrcs().size()); |
1945 EXPECT_EQ(kVideoSendSsrcs[0], parser.remb()->ssrcs()[0]); | 1960 EXPECT_EQ(kVideoSendSsrcs[0], parser.remb()->ssrcs()[0]); |
1946 observation_complete_.Set(); | 1961 observation_complete_.Set(); |
1947 } | 1962 } |
1948 | 1963 |
1949 return SEND_PACKET; | 1964 return SEND_PACKET; |
1950 } | 1965 } |
1951 void PerformTest() override { | 1966 void PerformTest() override { |
1952 EXPECT_TRUE(Wait()) << "Timed out while waiting for a " | 1967 EXPECT_TRUE(Wait()) << "Timed out while waiting for a " |
1953 "receiver RTCP REMB packet to be " | 1968 "receiver RTCP REMB packet to be " |
1954 "sent."; | 1969 "sent."; |
1955 } | 1970 } |
1956 } test; | 1971 } test; |
1957 | 1972 |
1958 RunBaseTest(&test); | 1973 RunBaseTest(&test); |
1959 } | 1974 } |
1960 | 1975 |
1961 TEST_P(EndToEndTest, VerifyBandwidthStats) { | 1976 class BandwidthStatsTest : public test::EndToEndTest { |
1962 class RtcpObserver : public test::EndToEndTest { | 1977 public: |
1963 public: | 1978 explicit BandwidthStatsTest(bool send_side_bwe) |
1964 RtcpObserver() | 1979 : EndToEndTest(test::CallTest::kDefaultTimeoutMs), |
1965 : EndToEndTest(kDefaultTimeoutMs), | 1980 sender_call_(nullptr), |
1966 sender_call_(nullptr), | 1981 receiver_call_(nullptr), |
1967 receiver_call_(nullptr), | 1982 has_seen_pacer_delay_(false), |
1968 has_seen_pacer_delay_(false) {} | 1983 send_side_bwe_(send_side_bwe) {} |
1969 | 1984 |
1970 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 1985 void ModifyVideoConfigs( |
1971 Call::Stats sender_stats = sender_call_->GetStats(); | 1986 VideoSendStream::Config* send_config, |
1972 Call::Stats receiver_stats = receiver_call_->GetStats(); | 1987 std::vector<VideoReceiveStream::Config>* receive_configs, |
1973 if (!has_seen_pacer_delay_) | 1988 VideoEncoderConfig* encoder_config) override { |
1974 has_seen_pacer_delay_ = sender_stats.pacer_delay_ms > 0; | 1989 if (!send_side_bwe_) { |
1975 if (sender_stats.send_bandwidth_bps > 0 && | 1990 send_config->rtp.extensions.clear(); |
1976 receiver_stats.recv_bandwidth_bps > 0 && has_seen_pacer_delay_) { | 1991 send_config->rtp.extensions.push_back(RtpExtension( |
| 1992 RtpExtension::kAbsSendTimeUri, test::kAbsSendTimeExtensionId)); |
| 1993 (*receive_configs)[0].rtp.remb = true; |
| 1994 (*receive_configs)[0].rtp.transport_cc = false; |
| 1995 } |
| 1996 } |
| 1997 |
| 1998 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
| 1999 Call::Stats sender_stats = sender_call_->GetStats(); |
| 2000 Call::Stats receiver_stats = receiver_call_->GetStats(); |
| 2001 if (!has_seen_pacer_delay_) |
| 2002 has_seen_pacer_delay_ = sender_stats.pacer_delay_ms > 0; |
| 2003 if (sender_stats.send_bandwidth_bps > 0 && has_seen_pacer_delay_) { |
| 2004 if (send_side_bwe_ || receiver_stats.recv_bandwidth_bps > 0) |
1977 observation_complete_.Set(); | 2005 observation_complete_.Set(); |
1978 } | |
1979 return SEND_PACKET; | |
1980 } | 2006 } |
| 2007 return SEND_PACKET; |
| 2008 } |
1981 | 2009 |
1982 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { | 2010 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { |
1983 sender_call_ = sender_call; | 2011 sender_call_ = sender_call; |
1984 receiver_call_ = receiver_call; | 2012 receiver_call_ = receiver_call; |
1985 } | 2013 } |
1986 | 2014 |
1987 void PerformTest() override { | 2015 void PerformTest() override { |
1988 EXPECT_TRUE(Wait()) << "Timed out while waiting for " | 2016 EXPECT_TRUE(Wait()) << "Timed out while waiting for " |
1989 "non-zero bandwidth stats."; | 2017 "non-zero bandwidth stats."; |
1990 } | 2018 } |
1991 | 2019 |
1992 private: | 2020 private: |
1993 Call* sender_call_; | 2021 Call* sender_call_; |
1994 Call* receiver_call_; | 2022 Call* receiver_call_; |
1995 bool has_seen_pacer_delay_; | 2023 bool has_seen_pacer_delay_; |
1996 } test; | 2024 const bool send_side_bwe_; |
| 2025 }; |
1997 | 2026 |
| 2027 TEST_P(EndToEndTest, VerifySendSideBweStats) { |
| 2028 BandwidthStatsTest test(true); |
1998 RunBaseTest(&test); | 2029 RunBaseTest(&test); |
1999 } | 2030 } |
2000 | 2031 |
| 2032 TEST_P(EndToEndTest, VerifyRecvSideBweStats) { |
| 2033 BandwidthStatsTest test(false); |
| 2034 RunBaseTest(&test); |
| 2035 } |
2001 | 2036 |
2002 // Verifies that it's possible to limit the send BWE by sending a REMB. | 2037 // Verifies that it's possible to limit the send BWE by sending a REMB. |
2003 // This is verified by allowing the send BWE to ramp-up to >1000 kbps, | 2038 // This is verified by allowing the send BWE to ramp-up to >1000 kbps, |
2004 // then have the test generate a REMB of 500 kbps and verify that the send BWE | 2039 // then have the test generate a REMB of 500 kbps and verify that the send BWE |
2005 // is reduced to exactly 500 kbps. Then a REMB of 1000 kbps is generated and the | 2040 // is reduced to exactly 500 kbps. Then a REMB of 1000 kbps is generated and the |
2006 // test verifies that the send BWE ramps back up to exactly 1000 kbps. | 2041 // test verifies that the send BWE ramps back up to exactly 1000 kbps. |
2007 TEST_P(EndToEndTest, RembWithSendSideBwe) { | 2042 TEST_P(EndToEndTest, RembWithSendSideBwe) { |
2008 class BweObserver : public test::EndToEndTest { | 2043 class BweObserver : public test::EndToEndTest { |
2009 public: | 2044 public: |
2010 BweObserver() | 2045 BweObserver() |
(...skipping 24 matching lines...) Expand all Loading... |
2035 // Set a high start bitrate to reduce the test completion time. | 2070 // Set a high start bitrate to reduce the test completion time. |
2036 config.bitrate_config.start_bitrate_bps = remb_bitrate_bps_; | 2071 config.bitrate_config.start_bitrate_bps = remb_bitrate_bps_; |
2037 return config; | 2072 return config; |
2038 } | 2073 } |
2039 | 2074 |
2040 void ModifyVideoConfigs( | 2075 void ModifyVideoConfigs( |
2041 VideoSendStream::Config* send_config, | 2076 VideoSendStream::Config* send_config, |
2042 std::vector<VideoReceiveStream::Config>* receive_configs, | 2077 std::vector<VideoReceiveStream::Config>* receive_configs, |
2043 VideoEncoderConfig* encoder_config) override { | 2078 VideoEncoderConfig* encoder_config) override { |
2044 ASSERT_EQ(1u, send_config->rtp.ssrcs.size()); | 2079 ASSERT_EQ(1u, send_config->rtp.ssrcs.size()); |
2045 send_config->rtp.extensions.clear(); | |
2046 send_config->rtp.extensions.push_back( | |
2047 RtpExtension(RtpExtension::kTransportSequenceNumberUri, | |
2048 test::kTransportSequenceNumberExtensionId)); | |
2049 sender_ssrc_ = send_config->rtp.ssrcs[0]; | 2080 sender_ssrc_ = send_config->rtp.ssrcs[0]; |
2050 | 2081 |
2051 encoder_config->max_bitrate_bps = 2000000; | 2082 encoder_config->max_bitrate_bps = 2000000; |
2052 | 2083 |
2053 ASSERT_EQ(1u, receive_configs->size()); | 2084 ASSERT_EQ(1u, receive_configs->size()); |
2054 (*receive_configs)[0].rtp.remb = false; | |
2055 (*receive_configs)[0].rtp.transport_cc = true; | |
2056 (*receive_configs)[0].rtp.extensions = send_config->rtp.extensions; | |
2057 RtpRtcp::Configuration config; | 2085 RtpRtcp::Configuration config; |
2058 config.receiver_only = true; | 2086 config.receiver_only = true; |
2059 config.clock = clock_; | 2087 config.clock = clock_; |
2060 config.outgoing_transport = receive_transport_; | 2088 config.outgoing_transport = receive_transport_; |
2061 config.retransmission_rate_limiter = &retransmission_rate_limiter_; | 2089 config.retransmission_rate_limiter = &retransmission_rate_limiter_; |
2062 rtp_rtcp_.reset(RtpRtcp::CreateRtpRtcp(config)); | 2090 rtp_rtcp_.reset(RtpRtcp::CreateRtpRtcp(config)); |
2063 rtp_rtcp_->SetRemoteSSRC((*receive_configs)[0].rtp.remote_ssrc); | 2091 rtp_rtcp_->SetRemoteSSRC((*receive_configs)[0].rtp.remote_ssrc); |
2064 rtp_rtcp_->SetSSRC((*receive_configs)[0].rtp.local_ssrc); | 2092 rtp_rtcp_->SetSSRC((*receive_configs)[0].rtp.local_ssrc); |
2065 rtp_rtcp_->SetREMBStatus(true); | 2093 rtp_rtcp_->SetREMBStatus(true); |
2066 rtp_rtcp_->SetSendingStatus(true); | 2094 rtp_rtcp_->SetSendingStatus(true); |
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2300 bool MinNumberOfFramesReceived() const { | 2328 bool MinNumberOfFramesReceived() const { |
2301 const int kMinRequiredHistogramSamples = 200; | 2329 const int kMinRequiredHistogramSamples = 200; |
2302 rtc::CritScope lock(&crit_); | 2330 rtc::CritScope lock(&crit_); |
2303 return num_frames_received_ > kMinRequiredHistogramSamples; | 2331 return num_frames_received_ > kMinRequiredHistogramSamples; |
2304 } | 2332 } |
2305 | 2333 |
2306 void ModifyVideoConfigs( | 2334 void ModifyVideoConfigs( |
2307 VideoSendStream::Config* send_config, | 2335 VideoSendStream::Config* send_config, |
2308 std::vector<VideoReceiveStream::Config>* receive_configs, | 2336 std::vector<VideoReceiveStream::Config>* receive_configs, |
2309 VideoEncoderConfig* encoder_config) override { | 2337 VideoEncoderConfig* encoder_config) override { |
2310 static const int kExtensionId = 8; | |
2311 send_config->rtp.extensions.push_back(RtpExtension( | |
2312 RtpExtension::kTransportSequenceNumberUri, kExtensionId)); | |
2313 (*receive_configs)[0].rtp.extensions.push_back(RtpExtension( | |
2314 RtpExtension::kTransportSequenceNumberUri, kExtensionId)); | |
2315 // NACK | 2338 // NACK |
2316 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 2339 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
2317 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 2340 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
2318 (*receive_configs)[0].renderer = this; | 2341 (*receive_configs)[0].renderer = this; |
2319 // FEC | 2342 // FEC |
2320 if (use_red_) { | 2343 if (use_red_) { |
2321 send_config->rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType; | 2344 send_config->rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType; |
2322 send_config->rtp.ulpfec.red_payload_type = kRedPayloadType; | 2345 send_config->rtp.ulpfec.red_payload_type = kRedPayloadType; |
2323 send_config->encoder_settings.encoder = vp8_encoder_.get(); | 2346 send_config->encoder_settings.encoder = vp8_encoder_.get(); |
2324 send_config->encoder_settings.payload_name = "VP8"; | 2347 send_config->encoder_settings.payload_name = "VP8"; |
(...skipping 1642 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3967 : EndToEndTest(kDefaultTimeoutMs), | 3990 : EndToEndTest(kDefaultTimeoutMs), |
3968 video_observed_(false), | 3991 video_observed_(false), |
3969 audio_observed_(false) { | 3992 audio_observed_(false) { |
3970 parser_->RegisterRtpHeaderExtension(kRtpExtensionTransportSequenceNumber, | 3993 parser_->RegisterRtpHeaderExtension(kRtpExtensionTransportSequenceNumber, |
3971 kExtensionId); | 3994 kExtensionId); |
3972 } | 3995 } |
3973 | 3996 |
3974 size_t GetNumVideoStreams() const override { return 1; } | 3997 size_t GetNumVideoStreams() const override { return 1; } |
3975 size_t GetNumAudioStreams() const override { return 1; } | 3998 size_t GetNumAudioStreams() const override { return 1; } |
3976 | 3999 |
3977 void ModifyVideoConfigs( | |
3978 VideoSendStream::Config* send_config, | |
3979 std::vector<VideoReceiveStream::Config>* receive_configs, | |
3980 VideoEncoderConfig* encoder_config) override { | |
3981 send_config->rtp.extensions.clear(); | |
3982 send_config->rtp.extensions.push_back(RtpExtension( | |
3983 RtpExtension::kTransportSequenceNumberUri, kExtensionId)); | |
3984 (*receive_configs)[0].rtp.extensions = send_config->rtp.extensions; | |
3985 } | |
3986 | |
3987 void ModifyAudioConfigs( | 4000 void ModifyAudioConfigs( |
3988 AudioSendStream::Config* send_config, | 4001 AudioSendStream::Config* send_config, |
3989 std::vector<AudioReceiveStream::Config>* receive_configs) override { | 4002 std::vector<AudioReceiveStream::Config>* receive_configs) override { |
3990 send_config->rtp.extensions.clear(); | 4003 send_config->rtp.extensions.clear(); |
3991 send_config->rtp.extensions.push_back(RtpExtension( | 4004 send_config->rtp.extensions.push_back(RtpExtension( |
3992 RtpExtension::kTransportSequenceNumberUri, kExtensionId)); | 4005 RtpExtension::kTransportSequenceNumberUri, kExtensionId)); |
3993 (*receive_configs)[0].rtp.extensions.clear(); | 4006 (*receive_configs)[0].rtp.extensions.clear(); |
3994 (*receive_configs)[0].rtp.extensions = send_config->rtp.extensions; | 4007 (*receive_configs)[0].rtp.extensions = send_config->rtp.extensions; |
3995 } | 4008 } |
3996 | 4009 |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4126 std::unique_ptr<VideoEncoder> encoder_; | 4139 std::unique_ptr<VideoEncoder> encoder_; |
4127 std::unique_ptr<VideoDecoder> decoder_; | 4140 std::unique_ptr<VideoDecoder> decoder_; |
4128 rtc::CriticalSection crit_; | 4141 rtc::CriticalSection crit_; |
4129 int recorded_frames_ GUARDED_BY(crit_); | 4142 int recorded_frames_ GUARDED_BY(crit_); |
4130 } test(this); | 4143 } test(this); |
4131 | 4144 |
4132 RunBaseTest(&test); | 4145 RunBaseTest(&test); |
4133 } | 4146 } |
4134 | 4147 |
4135 } // namespace webrtc | 4148 } // namespace webrtc |
OLD | NEW |