1 /* 2 * libjingle 3 * Copyright 2013, Google Inc. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright notice, 9 * this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright notice, 11 * this list of conditions and the following disclaimer in the documentation 12 * and/or other materials provided with the distribution. 13 * 3. The name of the author may not be used to endorse or promote products 14 * derived from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 19 * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 * 27 */ 28 29 #ifndef TALK_APP_WEBRTC_TEST_FAKEMEDIASTREAMSIGNALING_H_ 30 #define TALK_APP_WEBRTC_TEST_FAKEMEDIASTREAMSIGNALING_H_ 31 32 #include "talk/app/webrtc/audiotrack.h" 33 #include "talk/app/webrtc/mediastreamsignaling.h" 34 #include "talk/app/webrtc/videotrack.h" 35 36 static const char kStream1[] = "stream1"; 37 static const char kVideoTrack1[] = "video1"; 38 static const char kAudioTrack1[] = "audio1"; 39 40 static const char kStream2[] = "stream2"; 41 static const char kVideoTrack2[] = "video2"; 42 static const char kAudioTrack2[] = "audio2"; 43 44 class FakeMediaStreamSignaling : public webrtc::MediaStreamSignaling, 45 public webrtc::MediaStreamSignalingObserver { 46 public: 47 FakeMediaStreamSignaling() : 48 webrtc::MediaStreamSignaling(talk_base::Thread::Current(), this) { 49 } 50 51 void SendAudioVideoStream1() { 52 ClearLocalStreams(); 53 AddLocalStream(CreateStream(kStream1, kAudioTrack1, kVideoTrack1)); 54 } 55 56 void SendAudioVideoStream2() { 57 ClearLocalStreams(); 58 AddLocalStream(CreateStream(kStream2, kAudioTrack2, kVideoTrack2)); 59 } 60 61 void SendAudioVideoStream1And2() { 62 ClearLocalStreams(); 63 AddLocalStream(CreateStream(kStream1, kAudioTrack1, kVideoTrack1)); 64 AddLocalStream(CreateStream(kStream2, kAudioTrack2, kVideoTrack2)); 65 } 66 67 void SendNothing() { 68 ClearLocalStreams(); 69 } 70 71 void UseOptionsAudioOnly() { 72 ClearLocalStreams(); 73 AddLocalStream(CreateStream(kStream2, kAudioTrack2, "")); 74 } 75 76 void UseOptionsVideoOnly() { 77 ClearLocalStreams(); 78 AddLocalStream(CreateStream(kStream2, "", kVideoTrack2)); 79 } 80 81 void ClearLocalStreams() { 82 while (local_streams()->count() != 0) { 83 RemoveLocalStream(local_streams()->at(0)); 84 } 85 } 86 87 // Implements MediaStreamSignalingObserver. 88 virtual void OnAddRemoteStream(webrtc::MediaStreamInterface* stream) { 89 } 90 virtual void OnRemoveRemoteStream(webrtc::MediaStreamInterface* stream) { 91 } 92 virtual void OnAddDataChannel(webrtc::DataChannelInterface* data_channel) { 93 } 94 virtual void OnAddLocalAudioTrack(webrtc::MediaStreamInterface* stream, 95 webrtc::AudioTrackInterface* audio_track, 96 uint32 ssrc) { 97 } 98 virtual void OnAddLocalVideoTrack(webrtc::MediaStreamInterface* stream, 99 webrtc::VideoTrackInterface* video_track, 100 uint32 ssrc) { 101 } 102 virtual void OnAddRemoteAudioTrack(webrtc::MediaStreamInterface* stream, 103 webrtc::AudioTrackInterface* audio_track, 104 uint32 ssrc) { 105 } 106 107 virtual void OnAddRemoteVideoTrack(webrtc::MediaStreamInterface* stream, 108 webrtc::VideoTrackInterface* video_track, 109 uint32 ssrc) { 110 } 111 112 virtual void OnRemoveRemoteAudioTrack( 113 webrtc::MediaStreamInterface* stream, 114 webrtc::AudioTrackInterface* audio_track) { 115 } 116 117 virtual void OnRemoveRemoteVideoTrack( 118 webrtc::MediaStreamInterface* stream, 119 webrtc::VideoTrackInterface* video_track) { 120 } 121 122 virtual void OnRemoveLocalAudioTrack( 123 webrtc::MediaStreamInterface* stream, 124 webrtc::AudioTrackInterface* audio_track) { 125 } 126 virtual void OnRemoveLocalVideoTrack( 127 webrtc::MediaStreamInterface* stream, 128 webrtc::VideoTrackInterface* video_track) { 129 } 130 virtual void OnRemoveLocalStream(webrtc::MediaStreamInterface* stream) { 131 } 132 133 private: 134 talk_base::scoped_refptr<webrtc::MediaStreamInterface> CreateStream( 135 const std::string& stream_label, 136 const std::string& audio_track_id, 137 const std::string& video_track_id) { 138 talk_base::scoped_refptr<webrtc::MediaStreamInterface> stream( 139 webrtc::MediaStream::Create(stream_label)); 140 141 if (!audio_track_id.empty()) { 142 talk_base::scoped_refptr<webrtc::AudioTrackInterface> audio_track( 143 webrtc::AudioTrack::Create(audio_track_id, NULL)); 144 stream->AddTrack(audio_track); 145 } 146 147 if (!video_track_id.empty()) { 148 talk_base::scoped_refptr<webrtc::VideoTrackInterface> video_track( 149 webrtc::VideoTrack::Create(video_track_id, NULL)); 150 stream->AddTrack(video_track); 151 } 152 return stream; 153 } 154 }; 155 156 #endif // TALK_APP_WEBRTC_TEST_FAKEMEDIASTREAMSIGNALING_H_ 157