OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright 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 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
246 } | 246 } |
247 | 247 |
248 cricket::TransportChannel* data_rtp_transport_channel() { | 248 cricket::TransportChannel* data_rtp_transport_channel() { |
249 return rtp_transport_channel(data_channel()); | 249 return rtp_transport_channel(data_channel()); |
250 } | 250 } |
251 | 251 |
252 cricket::TransportChannel* data_rtcp_transport_channel() { | 252 cricket::TransportChannel* data_rtcp_transport_channel() { |
253 return rtcp_transport_channel(data_channel()); | 253 return rtcp_transport_channel(data_channel()); |
254 } | 254 } |
255 | 255 |
| 256 using webrtc::WebRtcSession::SetAudioPlayout; |
| 257 using webrtc::WebRtcSession::SetAudioSend; |
| 258 using webrtc::WebRtcSession::SetVideoPlayout; |
| 259 using webrtc::WebRtcSession::SetVideoSend; |
| 260 |
256 private: | 261 private: |
257 cricket::TransportChannel* rtp_transport_channel(cricket::BaseChannel* ch) { | 262 cricket::TransportChannel* rtp_transport_channel(cricket::BaseChannel* ch) { |
258 if (!ch) { | 263 if (!ch) { |
259 return nullptr; | 264 return nullptr; |
260 } | 265 } |
261 return ch->transport_channel(); | 266 return ch->transport_channel(); |
262 } | 267 } |
263 | 268 |
264 cricket::TransportChannel* rtcp_transport_channel(cricket::BaseChannel* ch) { | 269 cricket::TransportChannel* rtcp_transport_channel(cricket::BaseChannel* ch) { |
265 if (!ch) { | 270 if (!ch) { |
(...skipping 3114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3380 EXPECT_TRUE((local_offer)->Initialize(offer_str, NULL)); | 3385 EXPECT_TRUE((local_offer)->Initialize(offer_str, NULL)); |
3381 SetLocalDescriptionOfferExpectError(kBundleWithoutRtcpMux, local_offer); | 3386 SetLocalDescriptionOfferExpectError(kBundleWithoutRtcpMux, local_offer); |
3382 JsepSessionDescription* remote_offer = | 3387 JsepSessionDescription* remote_offer = |
3383 new JsepSessionDescription(JsepSessionDescription::kOffer); | 3388 new JsepSessionDescription(JsepSessionDescription::kOffer); |
3384 EXPECT_TRUE((remote_offer)->Initialize(offer_str, NULL)); | 3389 EXPECT_TRUE((remote_offer)->Initialize(offer_str, NULL)); |
3385 SetRemoteDescriptionOfferExpectError(kBundleWithoutRtcpMux, remote_offer); | 3390 SetRemoteDescriptionOfferExpectError(kBundleWithoutRtcpMux, remote_offer); |
3386 // Trying unmodified SDP. | 3391 // Trying unmodified SDP. |
3387 SetLocalDescriptionWithoutError(offer); | 3392 SetLocalDescriptionWithoutError(offer); |
3388 } | 3393 } |
3389 | 3394 |
| 3395 TEST_F(WebRtcSessionTest, SetAudioPlayout) { |
| 3396 Init(); |
| 3397 SendAudioVideoStream1(); |
| 3398 CreateAndSetRemoteOfferAndLocalAnswer(); |
| 3399 cricket::FakeVoiceMediaChannel* channel = media_engine_->GetVoiceChannel(0); |
| 3400 ASSERT_TRUE(channel != NULL); |
| 3401 ASSERT_EQ(1u, channel->recv_streams().size()); |
| 3402 uint32_t receive_ssrc = channel->recv_streams()[0].first_ssrc(); |
| 3403 double volume; |
| 3404 EXPECT_TRUE(channel->GetOutputVolume(receive_ssrc, &volume)); |
| 3405 EXPECT_EQ(1, volume); |
| 3406 session_->SetAudioPlayout(receive_ssrc, false); |
| 3407 EXPECT_TRUE(channel->GetOutputVolume(receive_ssrc, &volume)); |
| 3408 EXPECT_EQ(0, volume); |
| 3409 session_->SetAudioPlayout(receive_ssrc, true); |
| 3410 EXPECT_TRUE(channel->GetOutputVolume(receive_ssrc, &volume)); |
| 3411 EXPECT_EQ(1, volume); |
| 3412 } |
| 3413 |
| 3414 TEST_F(WebRtcSessionTest, SetAudioMaxSendBitrate) { |
| 3415 Init(); |
| 3416 SendAudioVideoStream1(); |
| 3417 CreateAndSetRemoteOfferAndLocalAnswer(); |
| 3418 cricket::FakeVoiceMediaChannel* channel = media_engine_->GetVoiceChannel(0); |
| 3419 ASSERT_TRUE(channel != NULL); |
| 3420 uint32_t send_ssrc = channel->send_streams()[0].first_ssrc(); |
| 3421 EXPECT_EQ(-1, channel->max_bps()); |
| 3422 webrtc::RtpParameters params = session_->GetAudioRtpSendParameters(send_ssrc); |
| 3423 EXPECT_EQ(1, params.encodings.size()); |
| 3424 EXPECT_EQ(-1, params.encodings[0].max_bitrate_bps); |
| 3425 params.encodings[0].max_bitrate_bps = 1000; |
| 3426 EXPECT_TRUE(session_->SetAudioRtpSendParameters(send_ssrc, params)); |
| 3427 |
| 3428 // Read back the parameters and verify they have been changed. |
| 3429 params = session_->GetAudioRtpSendParameters(send_ssrc); |
| 3430 EXPECT_EQ(1, params.encodings.size()); |
| 3431 EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps); |
| 3432 |
| 3433 // Verify that the audio channel received the new parameters. |
| 3434 params = channel->GetRtpSendParameters(send_ssrc); |
| 3435 EXPECT_EQ(1, params.encodings.size()); |
| 3436 EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps); |
| 3437 |
| 3438 // Verify that the global bitrate limit has not been changed. |
| 3439 EXPECT_EQ(-1, channel->max_bps()); |
| 3440 } |
| 3441 |
| 3442 TEST_F(WebRtcSessionTest, SetAudioSend) { |
| 3443 Init(); |
| 3444 SendAudioVideoStream1(); |
| 3445 CreateAndSetRemoteOfferAndLocalAnswer(); |
| 3446 cricket::FakeVoiceMediaChannel* channel = media_engine_->GetVoiceChannel(0); |
| 3447 ASSERT_TRUE(channel != NULL); |
| 3448 ASSERT_EQ(1u, channel->send_streams().size()); |
| 3449 uint32_t send_ssrc = channel->send_streams()[0].first_ssrc(); |
| 3450 EXPECT_FALSE(channel->IsStreamMuted(send_ssrc)); |
| 3451 |
| 3452 cricket::AudioOptions options; |
| 3453 options.echo_cancellation = rtc::Optional<bool>(true); |
| 3454 |
| 3455 std::unique_ptr<FakeAudioSource> source(new FakeAudioSource()); |
| 3456 session_->SetAudioSend(send_ssrc, false, options, source.get()); |
| 3457 EXPECT_TRUE(channel->IsStreamMuted(send_ssrc)); |
| 3458 EXPECT_EQ(rtc::Optional<bool>(), channel->options().echo_cancellation); |
| 3459 EXPECT_TRUE(source->sink() != nullptr); |
| 3460 |
| 3461 // This will trigger SetSink(nullptr) to the |source|. |
| 3462 session_->SetAudioSend(send_ssrc, true, options, nullptr); |
| 3463 EXPECT_FALSE(channel->IsStreamMuted(send_ssrc)); |
| 3464 EXPECT_EQ(rtc::Optional<bool>(true), channel->options().echo_cancellation); |
| 3465 EXPECT_TRUE(source->sink() == nullptr); |
| 3466 } |
| 3467 |
| 3468 TEST_F(WebRtcSessionTest, AudioSourceForLocalStream) { |
| 3469 Init(); |
| 3470 SendAudioVideoStream1(); |
| 3471 CreateAndSetRemoteOfferAndLocalAnswer(); |
| 3472 cricket::FakeVoiceMediaChannel* channel = media_engine_->GetVoiceChannel(0); |
| 3473 ASSERT_TRUE(channel != NULL); |
| 3474 ASSERT_EQ(1u, channel->send_streams().size()); |
| 3475 uint32_t send_ssrc = channel->send_streams()[0].first_ssrc(); |
| 3476 |
| 3477 std::unique_ptr<FakeAudioSource> source(new FakeAudioSource()); |
| 3478 cricket::AudioOptions options; |
| 3479 session_->SetAudioSend(send_ssrc, true, options, source.get()); |
| 3480 EXPECT_TRUE(source->sink() != nullptr); |
| 3481 |
| 3482 // Delete the |source| and it will trigger OnClose() to the sink, and this |
| 3483 // will invalidate the |source_| pointer in the sink and prevent getting a |
| 3484 // SetSink(nullptr) callback afterwards. |
| 3485 source.reset(); |
| 3486 |
| 3487 // This will trigger SetSink(nullptr) if no OnClose() callback. |
| 3488 session_->SetAudioSend(send_ssrc, true, options, nullptr); |
| 3489 } |
| 3490 |
| 3491 TEST_F(WebRtcSessionTest, SetVideoPlayout) { |
| 3492 Init(); |
| 3493 SendAudioVideoStream1(); |
| 3494 CreateAndSetRemoteOfferAndLocalAnswer(); |
| 3495 cricket::FakeVideoMediaChannel* channel = media_engine_->GetVideoChannel(0); |
| 3496 ASSERT_TRUE(channel != NULL); |
| 3497 ASSERT_LT(0u, channel->sinks().size()); |
| 3498 EXPECT_TRUE(channel->sinks().begin()->second == NULL); |
| 3499 ASSERT_EQ(1u, channel->recv_streams().size()); |
| 3500 uint32_t receive_ssrc = channel->recv_streams()[0].first_ssrc(); |
| 3501 cricket::FakeVideoRenderer renderer; |
| 3502 session_->SetVideoPlayout(receive_ssrc, true, &renderer); |
| 3503 EXPECT_TRUE(channel->sinks().begin()->second == &renderer); |
| 3504 session_->SetVideoPlayout(receive_ssrc, false, &renderer); |
| 3505 EXPECT_TRUE(channel->sinks().begin()->second == NULL); |
| 3506 } |
| 3507 |
| 3508 TEST_F(WebRtcSessionTest, SetVideoMaxSendBitrate) { |
| 3509 Init(); |
| 3510 SendAudioVideoStream1(); |
| 3511 CreateAndSetRemoteOfferAndLocalAnswer(); |
| 3512 cricket::FakeVideoMediaChannel* channel = media_engine_->GetVideoChannel(0); |
| 3513 ASSERT_TRUE(channel != NULL); |
| 3514 uint32_t send_ssrc = channel->send_streams()[0].first_ssrc(); |
| 3515 EXPECT_EQ(-1, channel->max_bps()); |
| 3516 webrtc::RtpParameters params = session_->GetVideoRtpSendParameters(send_ssrc); |
| 3517 EXPECT_EQ(1, params.encodings.size()); |
| 3518 EXPECT_EQ(-1, params.encodings[0].max_bitrate_bps); |
| 3519 params.encodings[0].max_bitrate_bps = 1000; |
| 3520 EXPECT_TRUE(session_->SetVideoRtpSendParameters(send_ssrc, params)); |
| 3521 |
| 3522 // Read back the parameters and verify they have been changed. |
| 3523 params = session_->GetVideoRtpSendParameters(send_ssrc); |
| 3524 EXPECT_EQ(1, params.encodings.size()); |
| 3525 EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps); |
| 3526 |
| 3527 // Verify that the video channel received the new parameters. |
| 3528 params = channel->GetRtpSendParameters(send_ssrc); |
| 3529 EXPECT_EQ(1, params.encodings.size()); |
| 3530 EXPECT_EQ(1000, params.encodings[0].max_bitrate_bps); |
| 3531 |
| 3532 // Verify that the global bitrate limit has not been changed. |
| 3533 EXPECT_EQ(-1, channel->max_bps()); |
| 3534 } |
| 3535 |
| 3536 TEST_F(WebRtcSessionTest, SetVideoSend) { |
| 3537 Init(); |
| 3538 SendAudioVideoStream1(); |
| 3539 CreateAndSetRemoteOfferAndLocalAnswer(); |
| 3540 cricket::FakeVideoMediaChannel* channel = media_engine_->GetVideoChannel(0); |
| 3541 ASSERT_TRUE(channel != NULL); |
| 3542 ASSERT_EQ(1u, channel->send_streams().size()); |
| 3543 uint32_t send_ssrc = channel->send_streams()[0].first_ssrc(); |
| 3544 EXPECT_FALSE(channel->IsStreamMuted(send_ssrc)); |
| 3545 cricket::VideoOptions* options = NULL; |
| 3546 session_->SetVideoSend(send_ssrc, false, options, nullptr); |
| 3547 EXPECT_TRUE(channel->IsStreamMuted(send_ssrc)); |
| 3548 session_->SetVideoSend(send_ssrc, true, options, nullptr); |
| 3549 EXPECT_FALSE(channel->IsStreamMuted(send_ssrc)); |
| 3550 } |
| 3551 |
3390 TEST_F(WebRtcSessionTest, CanNotInsertDtmf) { | 3552 TEST_F(WebRtcSessionTest, CanNotInsertDtmf) { |
3391 TestCanInsertDtmf(false); | 3553 TestCanInsertDtmf(false); |
3392 } | 3554 } |
3393 | 3555 |
3394 TEST_F(WebRtcSessionTest, CanInsertDtmf) { | 3556 TEST_F(WebRtcSessionTest, CanInsertDtmf) { |
3395 TestCanInsertDtmf(true); | 3557 TestCanInsertDtmf(true); |
3396 } | 3558 } |
3397 | 3559 |
3398 TEST_F(WebRtcSessionTest, InsertDtmf) { | 3560 TEST_F(WebRtcSessionTest, InsertDtmf) { |
3399 // Setup | 3561 // Setup |
(...skipping 857 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4257 } | 4419 } |
4258 | 4420 |
4259 // TODO(bemasc): Add a TestIceStatesBundle with BUNDLE enabled. That test | 4421 // TODO(bemasc): Add a TestIceStatesBundle with BUNDLE enabled. That test |
4260 // currently fails because upon disconnection and reconnection OnIceComplete is | 4422 // currently fails because upon disconnection and reconnection OnIceComplete is |
4261 // called more than once without returning to IceGatheringGathering. | 4423 // called more than once without returning to IceGatheringGathering. |
4262 | 4424 |
4263 INSTANTIATE_TEST_CASE_P(WebRtcSessionTests, | 4425 INSTANTIATE_TEST_CASE_P(WebRtcSessionTests, |
4264 WebRtcSessionTest, | 4426 WebRtcSessionTest, |
4265 testing::Values(ALREADY_GENERATED, | 4427 testing::Values(ALREADY_GENERATED, |
4266 DTLS_IDENTITY_STORE)); | 4428 DTLS_IDENTITY_STORE)); |
OLD | NEW |