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 1263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1274 encoder_config.streams = test::CreateVideoStreams(1); | 1274 encoder_config.streams = test::CreateVideoStreams(1); |
1275 VideoStream* stream = &encoder_config.streams[0]; | 1275 VideoStream* stream = &encoder_config.streams[0]; |
1276 stream->width = width; | 1276 stream->width = width; |
1277 stream->height = height; | 1277 stream->height = height; |
1278 stream->max_framerate = 5; | 1278 stream->max_framerate = 5; |
1279 stream->min_bitrate_bps = stream->target_bitrate_bps = | 1279 stream->min_bitrate_bps = stream->target_bitrate_bps = |
1280 stream->max_bitrate_bps = 100000; | 1280 stream->max_bitrate_bps = 100000; |
1281 | 1281 |
1282 UpdateSendConfig(i, &send_config, &encoder_config, &frame_generators[i]); | 1282 UpdateSendConfig(i, &send_config, &encoder_config, &frame_generators[i]); |
1283 | 1283 |
1284 send_streams[i] = sender_call->CreateVideoSendStream( | 1284 send_streams[i] = |
1285 send_config.Copy(), encoder_config.Copy()); | 1285 sender_call->CreateVideoSendStream(send_config, encoder_config); |
1286 send_streams[i]->Start(); | 1286 send_streams[i]->Start(); |
1287 | 1287 |
1288 VideoReceiveStream::Config receive_config(receiver_transport.get()); | 1288 VideoReceiveStream::Config receive_config(receiver_transport.get()); |
1289 receive_config.rtp.remote_ssrc = ssrc; | 1289 receive_config.rtp.remote_ssrc = ssrc; |
1290 receive_config.rtp.local_ssrc = test::CallTest::kReceiverLocalVideoSsrc; | 1290 receive_config.rtp.local_ssrc = test::CallTest::kReceiverLocalVideoSsrc; |
1291 VideoReceiveStream::Decoder decoder = | 1291 VideoReceiveStream::Decoder decoder = |
1292 test::CreateMatchingDecoder(send_config.encoder_settings); | 1292 test::CreateMatchingDecoder(send_config.encoder_settings); |
1293 allocated_decoders.push_back( | 1293 allocated_decoders.push_back( |
1294 std::unique_ptr<VideoDecoder>(decoder.decoder)); | 1294 std::unique_ptr<VideoDecoder>(decoder.decoder)); |
1295 receive_config.decoders.push_back(decoder); | 1295 receive_config.decoders.push_back(decoder); |
(...skipping 1183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2479 VideoEncoderConfig* encoder_config) override { | 2479 VideoEncoderConfig* encoder_config) override { |
2480 if (num_ssrcs_ > 1) { | 2480 if (num_ssrcs_ > 1) { |
2481 // Set low simulcast bitrates to not have to wait for bandwidth ramp-up. | 2481 // Set low simulcast bitrates to not have to wait for bandwidth ramp-up. |
2482 for (size_t i = 0; i < encoder_config->streams.size(); ++i) { | 2482 for (size_t i = 0; i < encoder_config->streams.size(); ++i) { |
2483 encoder_config->streams[i].min_bitrate_bps = 10000; | 2483 encoder_config->streams[i].min_bitrate_bps = 10000; |
2484 encoder_config->streams[i].target_bitrate_bps = 15000; | 2484 encoder_config->streams[i].target_bitrate_bps = 15000; |
2485 encoder_config->streams[i].max_bitrate_bps = 20000; | 2485 encoder_config->streams[i].max_bitrate_bps = 20000; |
2486 } | 2486 } |
2487 } | 2487 } |
2488 | 2488 |
2489 video_encoder_config_all_streams_ = encoder_config->Copy(); | 2489 video_encoder_config_all_streams_ = *encoder_config; |
2490 if (send_single_ssrc_first_) | 2490 if (send_single_ssrc_first_) |
2491 encoder_config->streams.resize(1); | 2491 encoder_config->streams.resize(1); |
2492 } | 2492 } |
2493 | 2493 |
2494 void OnVideoStreamsCreated( | 2494 void OnVideoStreamsCreated( |
2495 VideoSendStream* send_stream, | 2495 VideoSendStream* send_stream, |
2496 const std::vector<VideoReceiveStream*>& receive_streams) override { | 2496 const std::vector<VideoReceiveStream*>& receive_streams) override { |
2497 send_stream_ = send_stream; | 2497 send_stream_ = send_stream; |
2498 } | 2498 } |
2499 | 2499 |
2500 void PerformTest() override { | 2500 void PerformTest() override { |
2501 EXPECT_TRUE(Wait()) << "Timed out while waiting for " | 2501 EXPECT_TRUE(Wait()) << "Timed out while waiting for " |
2502 << (send_single_ssrc_first_ ? "first SSRC." | 2502 << (send_single_ssrc_first_ ? "first SSRC." |
2503 : "SSRCs."); | 2503 : "SSRCs."); |
2504 | 2504 |
2505 if (send_single_ssrc_first_) { | 2505 if (send_single_ssrc_first_) { |
2506 // Set full simulcast and continue with the rest of the SSRCs. | 2506 // Set full simulcast and continue with the rest of the SSRCs. |
2507 send_stream_->ReconfigureVideoEncoder( | 2507 send_stream_->ReconfigureVideoEncoder( |
2508 std::move(video_encoder_config_all_streams_)); | 2508 video_encoder_config_all_streams_); |
2509 EXPECT_TRUE(Wait()) << "Timed out while waiting on additional SSRCs."; | 2509 EXPECT_TRUE(Wait()) << "Timed out while waiting on additional SSRCs."; |
2510 } | 2510 } |
2511 } | 2511 } |
2512 | 2512 |
2513 private: | 2513 private: |
2514 std::map<uint32_t, bool> valid_ssrcs_; | 2514 std::map<uint32_t, bool> valid_ssrcs_; |
2515 std::map<uint32_t, bool> is_observed_; | 2515 std::map<uint32_t, bool> is_observed_; |
2516 | 2516 |
2517 const size_t num_ssrcs_; | 2517 const size_t num_ssrcs_; |
2518 const bool send_single_ssrc_first_; | 2518 const bool send_single_ssrc_first_; |
(...skipping 674 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3193 | 3193 |
3194 // Lower bitrates so that all streams send initially. | 3194 // Lower bitrates so that all streams send initially. |
3195 for (size_t i = 0; i < video_encoder_config_.streams.size(); ++i) { | 3195 for (size_t i = 0; i < video_encoder_config_.streams.size(); ++i) { |
3196 video_encoder_config_.streams[i].min_bitrate_bps = 10000; | 3196 video_encoder_config_.streams[i].min_bitrate_bps = 10000; |
3197 video_encoder_config_.streams[i].target_bitrate_bps = 15000; | 3197 video_encoder_config_.streams[i].target_bitrate_bps = 15000; |
3198 video_encoder_config_.streams[i].max_bitrate_bps = 20000; | 3198 video_encoder_config_.streams[i].max_bitrate_bps = 20000; |
3199 } | 3199 } |
3200 | 3200 |
3201 // Use the same total bitrates when sending a single stream to avoid lowering | 3201 // Use the same total bitrates when sending a single stream to avoid lowering |
3202 // the bitrate estimate and requiring a subsequent rampup. | 3202 // the bitrate estimate and requiring a subsequent rampup. |
3203 VideoEncoderConfig one_stream = video_encoder_config_.Copy(); | 3203 VideoEncoderConfig one_stream = video_encoder_config_; |
3204 one_stream.streams.resize(1); | 3204 one_stream.streams.resize(1); |
3205 for (size_t i = 1; i < video_encoder_config_.streams.size(); ++i) { | 3205 for (size_t i = 1; i < video_encoder_config_.streams.size(); ++i) { |
3206 one_stream.streams.front().min_bitrate_bps += | 3206 one_stream.streams.front().min_bitrate_bps += |
3207 video_encoder_config_.streams[i].min_bitrate_bps; | 3207 video_encoder_config_.streams[i].min_bitrate_bps; |
3208 one_stream.streams.front().target_bitrate_bps += | 3208 one_stream.streams.front().target_bitrate_bps += |
3209 video_encoder_config_.streams[i].target_bitrate_bps; | 3209 video_encoder_config_.streams[i].target_bitrate_bps; |
3210 one_stream.streams.front().max_bitrate_bps += | 3210 one_stream.streams.front().max_bitrate_bps += |
3211 video_encoder_config_.streams[i].max_bitrate_bps; | 3211 video_encoder_config_.streams[i].max_bitrate_bps; |
3212 } | 3212 } |
3213 | 3213 |
3214 CreateMatchingReceiveConfigs(&receive_transport); | 3214 CreateMatchingReceiveConfigs(&receive_transport); |
3215 | 3215 |
3216 CreateVideoStreams(); | 3216 CreateVideoStreams(); |
3217 CreateFrameGeneratorCapturer(); | 3217 CreateFrameGeneratorCapturer(); |
3218 | 3218 |
3219 Start(); | 3219 Start(); |
3220 EXPECT_TRUE(observer.Wait()) | 3220 EXPECT_TRUE(observer.Wait()) |
3221 << "Timed out waiting for all SSRCs to send packets."; | 3221 << "Timed out waiting for all SSRCs to send packets."; |
3222 | 3222 |
3223 // Test stream resetting more than once to make sure that the state doesn't | 3223 // Test stream resetting more than once to make sure that the state doesn't |
3224 // get set once (this could be due to using std::map::insert for instance). | 3224 // get set once (this could be due to using std::map::insert for instance). |
3225 for (size_t i = 0; i < 3; ++i) { | 3225 for (size_t i = 0; i < 3; ++i) { |
3226 frame_generator_capturer_->Stop(); | 3226 frame_generator_capturer_->Stop(); |
3227 sender_call_->DestroyVideoSendStream(video_send_stream_); | 3227 sender_call_->DestroyVideoSendStream(video_send_stream_); |
3228 | 3228 |
3229 // Re-create VideoSendStream with only one stream. | 3229 // Re-create VideoSendStream with only one stream. |
3230 video_send_stream_ = sender_call_->CreateVideoSendStream( | 3230 video_send_stream_ = |
3231 video_send_config_.Copy(), one_stream.Copy()); | 3231 sender_call_->CreateVideoSendStream(video_send_config_, one_stream); |
3232 video_send_stream_->Start(); | 3232 video_send_stream_->Start(); |
3233 if (provoke_rtcpsr_before_rtp) { | 3233 if (provoke_rtcpsr_before_rtp) { |
3234 // Rapid Resync Request forces sending RTCP Sender Report back. | 3234 // Rapid Resync Request forces sending RTCP Sender Report back. |
3235 // Using this request speeds up this test because then there is no need | 3235 // Using this request speeds up this test because then there is no need |
3236 // to wait for a second for periodic Sender Report. | 3236 // to wait for a second for periodic Sender Report. |
3237 rtcp::RapidResyncRequest force_send_sr_back_request; | 3237 rtcp::RapidResyncRequest force_send_sr_back_request; |
3238 rtc::Buffer packet = force_send_sr_back_request.Build(); | 3238 rtc::Buffer packet = force_send_sr_back_request.Build(); |
3239 static_cast<webrtc::test::DirectTransport&>(receive_transport) | 3239 static_cast<webrtc::test::DirectTransport&>(receive_transport) |
3240 .SendRtcp(packet.data(), packet.size()); | 3240 .SendRtcp(packet.data(), packet.size()); |
3241 } | 3241 } |
3242 CreateFrameGeneratorCapturer(); | 3242 CreateFrameGeneratorCapturer(); |
3243 frame_generator_capturer_->Start(); | 3243 frame_generator_capturer_->Start(); |
3244 | 3244 |
3245 observer.ResetExpectedSsrcs(1); | 3245 observer.ResetExpectedSsrcs(1); |
3246 EXPECT_TRUE(observer.Wait()) << "Timed out waiting for single RTP packet."; | 3246 EXPECT_TRUE(observer.Wait()) << "Timed out waiting for single RTP packet."; |
3247 | 3247 |
3248 // Reconfigure back to use all streams. | 3248 // Reconfigure back to use all streams. |
3249 video_send_stream_->ReconfigureVideoEncoder(video_encoder_config_.Copy()); | 3249 video_send_stream_->ReconfigureVideoEncoder(video_encoder_config_); |
3250 observer.ResetExpectedSsrcs(kNumSsrcs); | 3250 observer.ResetExpectedSsrcs(kNumSsrcs); |
3251 EXPECT_TRUE(observer.Wait()) | 3251 EXPECT_TRUE(observer.Wait()) |
3252 << "Timed out waiting for all SSRCs to send packets."; | 3252 << "Timed out waiting for all SSRCs to send packets."; |
3253 | 3253 |
3254 // Reconfigure down to one stream. | 3254 // Reconfigure down to one stream. |
3255 video_send_stream_->ReconfigureVideoEncoder(one_stream.Copy()); | 3255 video_send_stream_->ReconfigureVideoEncoder(one_stream); |
3256 observer.ResetExpectedSsrcs(1); | 3256 observer.ResetExpectedSsrcs(1); |
3257 EXPECT_TRUE(observer.Wait()) << "Timed out waiting for single RTP packet."; | 3257 EXPECT_TRUE(observer.Wait()) << "Timed out waiting for single RTP packet."; |
3258 | 3258 |
3259 // Reconfigure back to use all streams. | 3259 // Reconfigure back to use all streams. |
3260 video_send_stream_->ReconfigureVideoEncoder(video_encoder_config_.Copy()); | 3260 video_send_stream_->ReconfigureVideoEncoder(video_encoder_config_); |
3261 observer.ResetExpectedSsrcs(kNumSsrcs); | 3261 observer.ResetExpectedSsrcs(kNumSsrcs); |
3262 EXPECT_TRUE(observer.Wait()) | 3262 EXPECT_TRUE(observer.Wait()) |
3263 << "Timed out waiting for all SSRCs to send packets."; | 3263 << "Timed out waiting for all SSRCs to send packets."; |
3264 } | 3264 } |
3265 | 3265 |
3266 send_transport.StopSending(); | 3266 send_transport.StopSending(); |
3267 receive_transport.StopSending(); | 3267 receive_transport.StopSending(); |
3268 | 3268 |
3269 Stop(); | 3269 Stop(); |
3270 DestroyStreams(); | 3270 DestroyStreams(); |
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3731 private: | 3731 private: |
3732 bool video_observed_; | 3732 bool video_observed_; |
3733 bool audio_observed_; | 3733 bool audio_observed_; |
3734 SequenceNumberUnwrapper unwrapper_; | 3734 SequenceNumberUnwrapper unwrapper_; |
3735 std::set<int64_t> received_packet_ids_; | 3735 std::set<int64_t> received_packet_ids_; |
3736 } test; | 3736 } test; |
3737 | 3737 |
3738 RunBaseTest(&test); | 3738 RunBaseTest(&test); |
3739 } | 3739 } |
3740 } // namespace webrtc | 3740 } // namespace webrtc |
OLD | NEW |