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 |
11 #include <string> | 11 #include <string> |
12 #include <utility> | 12 #include <utility> |
13 | 13 |
14 #include "webrtc/api/audiotrack.h" | 14 #include "webrtc/api/audiotrack.h" |
15 #include "webrtc/api/jsepsessiondescription.h" | 15 #include "webrtc/api/jsepsessiondescription.h" |
16 #include "webrtc/api/mediastream.h" | 16 #include "webrtc/api/mediastream.h" |
17 #include "webrtc/api/mediastreaminterface.h" | 17 #include "webrtc/api/mediastreaminterface.h" |
18 #include "webrtc/api/peerconnection.h" | 18 #include "webrtc/api/peerconnection.h" |
19 #include "webrtc/api/peerconnectioninterface.h" | 19 #include "webrtc/api/peerconnectioninterface.h" |
20 #include "webrtc/api/rtpreceiverinterface.h" | 20 #include "webrtc/api/rtpreceiverinterface.h" |
21 #include "webrtc/api/rtpsenderinterface.h" | 21 #include "webrtc/api/rtpsenderinterface.h" |
22 #include "webrtc/api/streamcollection.h" | 22 #include "webrtc/api/streamcollection.h" |
23 #ifdef WEBRTC_ANDROID | 23 #ifdef WEBRTC_ANDROID |
24 #include "webrtc/api/test/androidtestinitializer.h" | 24 #include "webrtc/api/test/androidtestinitializer.h" |
25 #endif | 25 #endif |
26 #include "webrtc/api/test/fakeconstraints.h" | 26 #include "webrtc/api/test/fakeconstraints.h" |
27 #include "webrtc/api/test/fakedtlsidentitystore.h" | 27 #include "webrtc/api/test/fakedtlsidentitystore.h" |
| 28 #include "webrtc/api/test/fakevideotracksource.h" |
28 #include "webrtc/api/test/mockpeerconnectionobservers.h" | 29 #include "webrtc/api/test/mockpeerconnectionobservers.h" |
29 #include "webrtc/api/test/testsdpstrings.h" | 30 #include "webrtc/api/test/testsdpstrings.h" |
30 #include "webrtc/api/videocapturertracksource.h" | 31 #include "webrtc/api/videocapturertracksource.h" |
31 #include "webrtc/api/videotrack.h" | 32 #include "webrtc/api/videotrack.h" |
32 #include "webrtc/base/gunit.h" | 33 #include "webrtc/base/gunit.h" |
33 #include "webrtc/base/scoped_ptr.h" | 34 #include "webrtc/base/scoped_ptr.h" |
34 #include "webrtc/base/ssladapter.h" | 35 #include "webrtc/base/ssladapter.h" |
35 #include "webrtc/base/sslstreamadapter.h" | 36 #include "webrtc/base/sslstreamadapter.h" |
36 #include "webrtc/base/stringutils.h" | 37 #include "webrtc/base/stringutils.h" |
37 #include "webrtc/base/thread.h" | 38 #include "webrtc/base/thread.h" |
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
334 rtc::scoped_refptr<webrtc::MediaStreamInterface> stream( | 335 rtc::scoped_refptr<webrtc::MediaStreamInterface> stream( |
335 webrtc::MediaStream::Create(kStreams[i])); | 336 webrtc::MediaStream::Create(kStreams[i])); |
336 | 337 |
337 // Add a local audio track. | 338 // Add a local audio track. |
338 rtc::scoped_refptr<webrtc::AudioTrackInterface> audio_track( | 339 rtc::scoped_refptr<webrtc::AudioTrackInterface> audio_track( |
339 webrtc::AudioTrack::Create(kAudioTracks[i], nullptr)); | 340 webrtc::AudioTrack::Create(kAudioTracks[i], nullptr)); |
340 stream->AddTrack(audio_track); | 341 stream->AddTrack(audio_track); |
341 | 342 |
342 // Add a local video track. | 343 // Add a local video track. |
343 rtc::scoped_refptr<webrtc::VideoTrackInterface> video_track( | 344 rtc::scoped_refptr<webrtc::VideoTrackInterface> video_track( |
344 webrtc::VideoTrack::Create(kVideoTracks[i], nullptr)); | 345 webrtc::VideoTrack::Create(kVideoTracks[i], |
| 346 webrtc::FakeVideoTrackSource::Create())); |
345 stream->AddTrack(video_track); | 347 stream->AddTrack(video_track); |
346 | 348 |
347 local_collection->AddStream(stream); | 349 local_collection->AddStream(stream); |
348 } | 350 } |
349 return local_collection; | 351 return local_collection; |
350 } | 352 } |
351 | 353 |
352 // Check equality of StreamCollections. | 354 // Check equality of StreamCollections. |
353 bool CompareStreamCollections(StreamCollectionInterface* s1, | 355 bool CompareStreamCollections(StreamCollectionInterface* s1, |
354 StreamCollectionInterface* s2) { | 356 StreamCollectionInterface* s2) { |
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
623 const std::string& audio_track_label, | 625 const std::string& audio_track_label, |
624 const std::string& video_track_label) { | 626 const std::string& video_track_label) { |
625 // Create a local stream. | 627 // Create a local stream. |
626 scoped_refptr<MediaStreamInterface> stream( | 628 scoped_refptr<MediaStreamInterface> stream( |
627 pc_factory_->CreateLocalMediaStream(stream_label)); | 629 pc_factory_->CreateLocalMediaStream(stream_label)); |
628 scoped_refptr<AudioTrackInterface> audio_track( | 630 scoped_refptr<AudioTrackInterface> audio_track( |
629 pc_factory_->CreateAudioTrack( | 631 pc_factory_->CreateAudioTrack( |
630 audio_track_label, static_cast<AudioSourceInterface*>(NULL))); | 632 audio_track_label, static_cast<AudioSourceInterface*>(NULL))); |
631 stream->AddTrack(audio_track.get()); | 633 stream->AddTrack(audio_track.get()); |
632 scoped_refptr<VideoTrackInterface> video_track( | 634 scoped_refptr<VideoTrackInterface> video_track( |
633 pc_factory_->CreateVideoTrack(video_track_label, NULL)); | 635 pc_factory_->CreateVideoTrack( |
| 636 video_track_label, |
| 637 pc_factory_->CreateVideoSource(new cricket::FakeVideoCapturer()))); |
634 stream->AddTrack(video_track.get()); | 638 stream->AddTrack(video_track.get()); |
635 EXPECT_TRUE(pc_->AddStream(stream)); | 639 EXPECT_TRUE(pc_->AddStream(stream)); |
636 EXPECT_TRUE_WAIT(observer_.renegotiation_needed_, kTimeout); | 640 EXPECT_TRUE_WAIT(observer_.renegotiation_needed_, kTimeout); |
637 observer_.renegotiation_needed_ = false; | 641 observer_.renegotiation_needed_ = false; |
638 } | 642 } |
639 | 643 |
640 bool DoCreateOfferAnswer(rtc::scoped_ptr<SessionDescriptionInterface>* desc, | 644 bool DoCreateOfferAnswer(rtc::scoped_ptr<SessionDescriptionInterface>* desc, |
641 bool offer, | 645 bool offer, |
642 MediaConstraintsInterface* constraints) { | 646 MediaConstraintsInterface* constraints) { |
643 rtc::scoped_refptr<MockCreateSessionDescriptionObserver> | 647 rtc::scoped_refptr<MockCreateSessionDescriptionObserver> |
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
892 void AddAudioTrack(const std::string& track_id, | 896 void AddAudioTrack(const std::string& track_id, |
893 MediaStreamInterface* stream) { | 897 MediaStreamInterface* stream) { |
894 rtc::scoped_refptr<webrtc::AudioTrackInterface> audio_track( | 898 rtc::scoped_refptr<webrtc::AudioTrackInterface> audio_track( |
895 webrtc::AudioTrack::Create(track_id, nullptr)); | 899 webrtc::AudioTrack::Create(track_id, nullptr)); |
896 ASSERT_TRUE(stream->AddTrack(audio_track)); | 900 ASSERT_TRUE(stream->AddTrack(audio_track)); |
897 } | 901 } |
898 | 902 |
899 void AddVideoTrack(const std::string& track_id, | 903 void AddVideoTrack(const std::string& track_id, |
900 MediaStreamInterface* stream) { | 904 MediaStreamInterface* stream) { |
901 rtc::scoped_refptr<webrtc::VideoTrackInterface> video_track( | 905 rtc::scoped_refptr<webrtc::VideoTrackInterface> video_track( |
902 webrtc::VideoTrack::Create(track_id, nullptr)); | 906 webrtc::VideoTrack::Create(track_id, |
| 907 webrtc::FakeVideoTrackSource::Create())); |
903 ASSERT_TRUE(stream->AddTrack(video_track)); | 908 ASSERT_TRUE(stream->AddTrack(video_track)); |
904 } | 909 } |
905 | 910 |
906 cricket::FakePortAllocator* port_allocator_ = nullptr; | 911 cricket::FakePortAllocator* port_allocator_ = nullptr; |
907 scoped_refptr<webrtc::PeerConnectionFactoryInterface> pc_factory_; | 912 scoped_refptr<webrtc::PeerConnectionFactoryInterface> pc_factory_; |
908 scoped_refptr<PeerConnectionInterface> pc_; | 913 scoped_refptr<PeerConnectionInterface> pc_; |
909 MockPeerConnectionObserver observer_; | 914 MockPeerConnectionObserver observer_; |
910 rtc::scoped_refptr<StreamCollection> reference_collection_; | 915 rtc::scoped_refptr<StreamCollection> reference_collection_; |
911 }; | 916 }; |
912 | 917 |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1003 // Also tests that RemoveTrack removes the tracks from subsequent offers. | 1008 // Also tests that RemoveTrack removes the tracks from subsequent offers. |
1004 TEST_F(PeerConnectionInterfaceTest, AddTrackRemoveTrack) { | 1009 TEST_F(PeerConnectionInterfaceTest, AddTrackRemoveTrack) { |
1005 CreatePeerConnection(); | 1010 CreatePeerConnection(); |
1006 // Create a dummy stream, so tracks share a stream label. | 1011 // Create a dummy stream, so tracks share a stream label. |
1007 scoped_refptr<MediaStreamInterface> stream( | 1012 scoped_refptr<MediaStreamInterface> stream( |
1008 pc_factory_->CreateLocalMediaStream(kStreamLabel1)); | 1013 pc_factory_->CreateLocalMediaStream(kStreamLabel1)); |
1009 std::vector<MediaStreamInterface*> stream_list; | 1014 std::vector<MediaStreamInterface*> stream_list; |
1010 stream_list.push_back(stream.get()); | 1015 stream_list.push_back(stream.get()); |
1011 scoped_refptr<AudioTrackInterface> audio_track( | 1016 scoped_refptr<AudioTrackInterface> audio_track( |
1012 pc_factory_->CreateAudioTrack("audio_track", nullptr)); | 1017 pc_factory_->CreateAudioTrack("audio_track", nullptr)); |
1013 scoped_refptr<VideoTrackInterface> video_track( | 1018 scoped_refptr<VideoTrackInterface> video_track(pc_factory_->CreateVideoTrack( |
1014 pc_factory_->CreateVideoTrack("video_track", nullptr)); | 1019 "video_track", |
| 1020 pc_factory_->CreateVideoSource(new cricket::FakeVideoCapturer()))); |
1015 auto audio_sender = pc_->AddTrack(audio_track, stream_list); | 1021 auto audio_sender = pc_->AddTrack(audio_track, stream_list); |
1016 auto video_sender = pc_->AddTrack(video_track, stream_list); | 1022 auto video_sender = pc_->AddTrack(video_track, stream_list); |
1017 EXPECT_EQ(kStreamLabel1, audio_sender->stream_id()); | 1023 EXPECT_EQ(kStreamLabel1, audio_sender->stream_id()); |
1018 EXPECT_EQ("audio_track", audio_sender->id()); | 1024 EXPECT_EQ("audio_track", audio_sender->id()); |
1019 EXPECT_EQ(audio_track, audio_sender->track()); | 1025 EXPECT_EQ(audio_track, audio_sender->track()); |
1020 EXPECT_EQ(kStreamLabel1, video_sender->stream_id()); | 1026 EXPECT_EQ(kStreamLabel1, video_sender->stream_id()); |
1021 EXPECT_EQ("video_track", video_sender->id()); | 1027 EXPECT_EQ("video_track", video_sender->id()); |
1022 EXPECT_EQ(video_track, video_sender->track()); | 1028 EXPECT_EQ(video_track, video_sender->track()); |
1023 | 1029 |
1024 // Now create an offer and check for the senders. | 1030 // Now create an offer and check for the senders. |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1070 EXPECT_FALSE(pc_->RemoveTrack(video_sender)); | 1076 EXPECT_FALSE(pc_->RemoveTrack(video_sender)); |
1071 } | 1077 } |
1072 | 1078 |
1073 // Test creating senders without a stream specified, | 1079 // Test creating senders without a stream specified, |
1074 // expecting a random stream ID to be generated. | 1080 // expecting a random stream ID to be generated. |
1075 TEST_F(PeerConnectionInterfaceTest, AddTrackWithoutStream) { | 1081 TEST_F(PeerConnectionInterfaceTest, AddTrackWithoutStream) { |
1076 CreatePeerConnection(); | 1082 CreatePeerConnection(); |
1077 // Create a dummy stream, so tracks share a stream label. | 1083 // Create a dummy stream, so tracks share a stream label. |
1078 scoped_refptr<AudioTrackInterface> audio_track( | 1084 scoped_refptr<AudioTrackInterface> audio_track( |
1079 pc_factory_->CreateAudioTrack("audio_track", nullptr)); | 1085 pc_factory_->CreateAudioTrack("audio_track", nullptr)); |
1080 scoped_refptr<VideoTrackInterface> video_track( | 1086 scoped_refptr<VideoTrackInterface> video_track(pc_factory_->CreateVideoTrack( |
1081 pc_factory_->CreateVideoTrack("video_track", nullptr)); | 1087 "video_track", |
| 1088 pc_factory_->CreateVideoSource(new cricket::FakeVideoCapturer()))); |
1082 auto audio_sender = | 1089 auto audio_sender = |
1083 pc_->AddTrack(audio_track, std::vector<MediaStreamInterface*>()); | 1090 pc_->AddTrack(audio_track, std::vector<MediaStreamInterface*>()); |
1084 auto video_sender = | 1091 auto video_sender = |
1085 pc_->AddTrack(video_track, std::vector<MediaStreamInterface*>()); | 1092 pc_->AddTrack(video_track, std::vector<MediaStreamInterface*>()); |
1086 EXPECT_EQ("audio_track", audio_sender->id()); | 1093 EXPECT_EQ("audio_track", audio_sender->id()); |
1087 EXPECT_EQ(audio_track, audio_sender->track()); | 1094 EXPECT_EQ(audio_track, audio_sender->track()); |
1088 EXPECT_EQ("video_track", video_sender->id()); | 1095 EXPECT_EQ("video_track", video_sender->id()); |
1089 EXPECT_EQ(video_track, video_sender->track()); | 1096 EXPECT_EQ(video_track, video_sender->track()); |
1090 // If the ID is truly a random GUID, it should be infinitely unlikely they | 1097 // If the ID is truly a random GUID, it should be infinitely unlikely they |
1091 // will be the same. | 1098 // will be the same. |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1230 // Test that it's possible to call AddTrack on a MediaStream after adding | 1237 // Test that it's possible to call AddTrack on a MediaStream after adding |
1231 // the stream to a PeerConnection. | 1238 // the stream to a PeerConnection. |
1232 // TODO(deadbeef): Remove this test once this behavior is no longer supported. | 1239 // TODO(deadbeef): Remove this test once this behavior is no longer supported. |
1233 TEST_F(PeerConnectionInterfaceTest, AddTrackAfterAddStream) { | 1240 TEST_F(PeerConnectionInterfaceTest, AddTrackAfterAddStream) { |
1234 CreatePeerConnection(); | 1241 CreatePeerConnection(); |
1235 // Create audio stream and add to PeerConnection. | 1242 // Create audio stream and add to PeerConnection. |
1236 AddVoiceStream(kStreamLabel1); | 1243 AddVoiceStream(kStreamLabel1); |
1237 MediaStreamInterface* stream = pc_->local_streams()->at(0); | 1244 MediaStreamInterface* stream = pc_->local_streams()->at(0); |
1238 | 1245 |
1239 // Add video track to the audio-only stream. | 1246 // Add video track to the audio-only stream. |
1240 scoped_refptr<VideoTrackInterface> video_track( | 1247 scoped_refptr<VideoTrackInterface> video_track(pc_factory_->CreateVideoTrack( |
1241 pc_factory_->CreateVideoTrack("video_label", nullptr)); | 1248 "video_label", |
| 1249 pc_factory_->CreateVideoSource(new cricket::FakeVideoCapturer()))); |
1242 stream->AddTrack(video_track.get()); | 1250 stream->AddTrack(video_track.get()); |
1243 | 1251 |
1244 scoped_ptr<SessionDescriptionInterface> offer; | 1252 scoped_ptr<SessionDescriptionInterface> offer; |
1245 ASSERT_TRUE(DoCreateOffer(&offer, nullptr)); | 1253 ASSERT_TRUE(DoCreateOffer(&offer, nullptr)); |
1246 | 1254 |
1247 const cricket::MediaContentDescription* video_desc = | 1255 const cricket::MediaContentDescription* video_desc = |
1248 cricket::GetFirstVideoContentDescription(offer->description()); | 1256 cricket::GetFirstVideoContentDescription(offer->description()); |
1249 EXPECT_TRUE(video_desc != nullptr); | 1257 EXPECT_TRUE(video_desc != nullptr); |
1250 } | 1258 } |
1251 | 1259 |
(...skipping 1170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2422 } | 2430 } |
2423 | 2431 |
2424 // Mutable, so they can be modified in the above const-declared method. | 2432 // Mutable, so they can be modified in the above const-declared method. |
2425 mutable bool create_media_controller_called_ = false; | 2433 mutable bool create_media_controller_called_ = false; |
2426 mutable cricket::MediaConfig create_media_controller_config_; | 2434 mutable cricket::MediaConfig create_media_controller_config_; |
2427 }; | 2435 }; |
2428 | 2436 |
2429 class PeerConnectionMediaConfigTest : public testing::Test { | 2437 class PeerConnectionMediaConfigTest : public testing::Test { |
2430 protected: | 2438 protected: |
2431 void SetUp() override { | 2439 void SetUp() override { |
2432 pcf_= new rtc::RefCountedObject<PeerConnectionFactoryForTest>(); | 2440 pcf_ = new rtc::RefCountedObject<PeerConnectionFactoryForTest>(); |
2433 pcf_->Initialize(); | 2441 pcf_->Initialize(); |
2434 } | 2442 } |
2435 const cricket::MediaConfig& TestCreatePeerConnection( | 2443 const cricket::MediaConfig& TestCreatePeerConnection( |
2436 const PeerConnectionInterface::RTCConfiguration& config, | 2444 const PeerConnectionInterface::RTCConfiguration& config, |
2437 const MediaConstraintsInterface *constraints) { | 2445 const MediaConstraintsInterface *constraints) { |
2438 pcf_->create_media_controller_called_ = false; | 2446 pcf_->create_media_controller_called_ = false; |
2439 | 2447 |
2440 scoped_refptr<PeerConnectionInterface> pc( | 2448 scoped_refptr<PeerConnectionInterface> pc( |
2441 pcf_->CreatePeerConnection(config, constraints, nullptr, nullptr, | 2449 pcf_->CreatePeerConnection(config, constraints, nullptr, nullptr, |
2442 &observer_)); | 2450 &observer_)); |
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2683 FakeConstraints updated_answer_c; | 2691 FakeConstraints updated_answer_c; |
2684 answer_c.SetMandatoryReceiveAudio(false); | 2692 answer_c.SetMandatoryReceiveAudio(false); |
2685 answer_c.SetMandatoryReceiveVideo(false); | 2693 answer_c.SetMandatoryReceiveVideo(false); |
2686 | 2694 |
2687 cricket::MediaSessionOptions updated_answer_options; | 2695 cricket::MediaSessionOptions updated_answer_options; |
2688 EXPECT_TRUE( | 2696 EXPECT_TRUE( |
2689 ParseConstraintsForAnswer(&updated_answer_c, &updated_answer_options)); | 2697 ParseConstraintsForAnswer(&updated_answer_c, &updated_answer_options)); |
2690 EXPECT_TRUE(updated_answer_options.has_audio()); | 2698 EXPECT_TRUE(updated_answer_options.has_audio()); |
2691 EXPECT_TRUE(updated_answer_options.has_video()); | 2699 EXPECT_TRUE(updated_answer_options.has_video()); |
2692 } | 2700 } |
OLD | NEW |