OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2017 The WebRTC project authors. All Rights Reserved. | 2 * Copyright 2017 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 27 matching lines...) Expand all Loading... |
38 cricket::FakeMediaEngine* fake_media_engine_; | 38 cricket::FakeMediaEngine* fake_media_engine_; |
39 std::unique_ptr<OrtcFactoryInterface> ortc_factory_; | 39 std::unique_ptr<OrtcFactoryInterface> ortc_factory_; |
40 }; | 40 }; |
41 | 41 |
42 // Test GetRtpPacketTransport and GetRtcpPacketTransport, with and without RTCP | 42 // Test GetRtpPacketTransport and GetRtcpPacketTransport, with and without RTCP |
43 // muxing. | 43 // muxing. |
44 TEST_F(RtpTransportTest, GetPacketTransports) { | 44 TEST_F(RtpTransportTest, GetPacketTransports) { |
45 rtc::FakePacketTransport rtp("rtp"); | 45 rtc::FakePacketTransport rtp("rtp"); |
46 rtc::FakePacketTransport rtcp("rtcp"); | 46 rtc::FakePacketTransport rtcp("rtcp"); |
47 // With muxed RTCP. | 47 // With muxed RTCP. |
48 RtcpParameters rtcp_parameters; | 48 RtpTransportParameters parameters; |
49 rtcp_parameters.mux = true; | 49 parameters.rtcp.mux = true; |
50 auto result = ortc_factory_->CreateRtpTransport(rtcp_parameters, &rtp, | 50 auto result = |
51 nullptr, nullptr); | 51 ortc_factory_->CreateRtpTransport(parameters, &rtp, nullptr, nullptr); |
52 ASSERT_TRUE(result.ok()); | 52 ASSERT_TRUE(result.ok()); |
53 EXPECT_EQ(&rtp, result.value()->GetRtpPacketTransport()); | 53 EXPECT_EQ(&rtp, result.value()->GetRtpPacketTransport()); |
54 EXPECT_EQ(nullptr, result.value()->GetRtcpPacketTransport()); | 54 EXPECT_EQ(nullptr, result.value()->GetRtcpPacketTransport()); |
55 result.MoveValue().reset(); | 55 result.MoveValue().reset(); |
56 // With non-muxed RTCP. | 56 // With non-muxed RTCP. |
57 rtcp_parameters.mux = false; | 57 parameters.rtcp.mux = false; |
58 result = | 58 result = ortc_factory_->CreateRtpTransport(parameters, &rtp, &rtcp, nullptr); |
59 ortc_factory_->CreateRtpTransport(rtcp_parameters, &rtp, &rtcp, nullptr); | |
60 ASSERT_TRUE(result.ok()); | 59 ASSERT_TRUE(result.ok()); |
61 EXPECT_EQ(&rtp, result.value()->GetRtpPacketTransport()); | 60 EXPECT_EQ(&rtp, result.value()->GetRtpPacketTransport()); |
62 EXPECT_EQ(&rtcp, result.value()->GetRtcpPacketTransport()); | 61 EXPECT_EQ(&rtcp, result.value()->GetRtcpPacketTransport()); |
63 } | 62 } |
64 | 63 |
65 // If an RtpTransport starts out un-muxed and then starts muxing, the RTCP | 64 // If an RtpTransport starts out un-muxed and then starts muxing, the RTCP |
66 // packet transport should be forgotten and GetRtcpPacketTransport should | 65 // packet transport should be forgotten and GetRtcpPacketTransport should |
67 // return null. | 66 // return null. |
68 TEST_F(RtpTransportTest, EnablingRtcpMuxingUnsetsRtcpTransport) { | 67 TEST_F(RtpTransportTest, EnablingRtcpMuxingUnsetsRtcpTransport) { |
69 rtc::FakePacketTransport rtp("rtp"); | 68 rtc::FakePacketTransport rtp("rtp"); |
70 rtc::FakePacketTransport rtcp("rtcp"); | 69 rtc::FakePacketTransport rtcp("rtcp"); |
71 | 70 |
72 // Create non-muxed. | 71 // Create non-muxed. |
73 RtcpParameters rtcp_parameters; | 72 RtpTransportParameters parameters; |
74 rtcp_parameters.mux = false; | 73 parameters.rtcp.mux = false; |
75 auto result = | 74 auto result = |
76 ortc_factory_->CreateRtpTransport(rtcp_parameters, &rtp, &rtcp, nullptr); | 75 ortc_factory_->CreateRtpTransport(parameters, &rtp, &rtcp, nullptr); |
77 ASSERT_TRUE(result.ok()); | 76 ASSERT_TRUE(result.ok()); |
78 auto rtp_transport = result.MoveValue(); | 77 auto rtp_transport = result.MoveValue(); |
79 | 78 |
80 // Enable muxing. | 79 // Enable muxing. |
81 rtcp_parameters.mux = true; | 80 parameters.rtcp.mux = true; |
82 EXPECT_TRUE(rtp_transport->SetRtcpParameters(rtcp_parameters).ok()); | 81 EXPECT_TRUE(rtp_transport->SetParameters(parameters).ok()); |
83 EXPECT_EQ(nullptr, rtp_transport->GetRtcpPacketTransport()); | 82 EXPECT_EQ(nullptr, rtp_transport->GetRtcpPacketTransport()); |
84 } | 83 } |
85 | 84 |
86 TEST_F(RtpTransportTest, GetAndSetRtcpParameters) { | 85 TEST_F(RtpTransportTest, GetAndSetRtcpParameters) { |
87 rtc::FakePacketTransport rtp("rtp"); | 86 rtc::FakePacketTransport rtp("rtp"); |
88 rtc::FakePacketTransport rtcp("rtcp"); | 87 rtc::FakePacketTransport rtcp("rtcp"); |
89 // Start with non-muxed RTCP. | 88 // Start with non-muxed RTCP. |
90 RtcpParameters rtcp_parameters; | 89 RtpTransportParameters parameters; |
91 rtcp_parameters.mux = false; | 90 parameters.rtcp.mux = false; |
92 rtcp_parameters.cname = "teST"; | 91 parameters.rtcp.cname = "teST"; |
93 rtcp_parameters.reduced_size = false; | 92 parameters.rtcp.reduced_size = false; |
94 auto result = | 93 auto result = |
95 ortc_factory_->CreateRtpTransport(rtcp_parameters, &rtp, &rtcp, nullptr); | 94 ortc_factory_->CreateRtpTransport(parameters, &rtp, &rtcp, nullptr); |
96 ASSERT_TRUE(result.ok()); | 95 ASSERT_TRUE(result.ok()); |
97 auto transport = result.MoveValue(); | 96 auto transport = result.MoveValue(); |
98 EXPECT_EQ(rtcp_parameters, transport->GetRtcpParameters()); | 97 EXPECT_EQ(parameters, transport->GetParameters()); |
99 | 98 |
100 // Changing the CNAME is currently unsupported. | 99 // Changing the CNAME is currently unsupported. |
101 rtcp_parameters.cname = "different"; | 100 parameters.rtcp.cname = "different"; |
102 EXPECT_EQ(RTCErrorType::UNSUPPORTED_OPERATION, | 101 EXPECT_EQ(RTCErrorType::UNSUPPORTED_OPERATION, |
103 transport->SetRtcpParameters(rtcp_parameters).type()); | 102 transport->SetParameters(parameters).type()); |
104 rtcp_parameters.cname = "teST"; | 103 parameters.rtcp.cname = "teST"; |
105 | 104 |
106 // Enable RTCP muxing and reduced-size RTCP. | 105 // Enable RTCP muxing and reduced-size RTCP. |
107 rtcp_parameters.mux = true; | 106 parameters.rtcp.mux = true; |
108 rtcp_parameters.reduced_size = true; | 107 parameters.rtcp.reduced_size = true; |
109 EXPECT_TRUE(transport->SetRtcpParameters(rtcp_parameters).ok()); | 108 EXPECT_TRUE(transport->SetParameters(parameters).ok()); |
110 EXPECT_EQ(rtcp_parameters, transport->GetRtcpParameters()); | 109 EXPECT_EQ(parameters, transport->GetParameters()); |
111 | 110 |
112 // Empty CNAME should result in the existing CNAME being used. | 111 // Empty CNAME should result in the existing CNAME being used. |
113 rtcp_parameters.cname.clear(); | 112 parameters.rtcp.cname.clear(); |
114 EXPECT_TRUE(transport->SetRtcpParameters(rtcp_parameters).ok()); | 113 EXPECT_TRUE(transport->SetParameters(parameters).ok()); |
115 EXPECT_EQ("teST", transport->GetRtcpParameters().cname); | 114 EXPECT_EQ("teST", transport->GetParameters().rtcp.cname); |
116 | 115 |
117 // Disabling RTCP muxing after enabling shouldn't be allowed, since enabling | 116 // Disabling RTCP muxing after enabling shouldn't be allowed, since enabling |
118 // muxing should have made the RTP transport forget about the RTCP packet | 117 // muxing should have made the RTP transport forget about the RTCP packet |
119 // transport initially passed into it. | 118 // transport initially passed into it. |
120 rtcp_parameters.mux = false; | 119 parameters.rtcp.mux = false; |
121 EXPECT_EQ(RTCErrorType::INVALID_STATE, | 120 EXPECT_EQ(RTCErrorType::INVALID_STATE, |
122 transport->SetRtcpParameters(rtcp_parameters).type()); | 121 transport->SetParameters(parameters).type()); |
123 } | 122 } |
124 | 123 |
125 // When Send or Receive is called on a sender or receiver, the RTCP parameters | 124 // When Send or Receive is called on a sender or receiver, the RTCP parameters |
126 // from the RtpTransport underneath the sender should be applied to the created | 125 // from the RtpTransport underneath the sender should be applied to the created |
127 // media stream. The only relevant parameters (currently) are |cname| and | 126 // media stream. The only relevant parameters (currently) are |cname| and |
128 // |reduced_size|. | 127 // |reduced_size|. |
129 TEST_F(RtpTransportTest, SendAndReceiveApplyRtcpParametersToMediaEngine) { | 128 TEST_F(RtpTransportTest, SendAndReceiveApplyRtcpParametersToMediaEngine) { |
130 // First, create video transport with reduced-size RTCP. | 129 // First, create video transport with reduced-size RTCP. |
131 rtc::FakePacketTransport fake_packet_transport1("1"); | 130 rtc::FakePacketTransport fake_packet_transport1("1"); |
132 RtcpParameters rtcp_parameters; | 131 RtpTransportParameters parameters; |
133 rtcp_parameters.mux = true; | 132 parameters.rtcp.mux = true; |
134 rtcp_parameters.reduced_size = true; | 133 parameters.rtcp.reduced_size = true; |
135 rtcp_parameters.cname = "foo"; | 134 parameters.rtcp.cname = "foo"; |
136 auto rtp_transport_result = ortc_factory_->CreateRtpTransport( | 135 auto rtp_transport_result = ortc_factory_->CreateRtpTransport( |
137 rtcp_parameters, &fake_packet_transport1, nullptr, nullptr); | 136 parameters, &fake_packet_transport1, nullptr, nullptr); |
138 auto video_transport = rtp_transport_result.MoveValue(); | 137 auto video_transport = rtp_transport_result.MoveValue(); |
139 | 138 |
140 // Create video sender and call Send, expecting parameters to be applied. | 139 // Create video sender and call Send, expecting parameters to be applied. |
141 auto sender_result = ortc_factory_->CreateRtpSender(cricket::MEDIA_TYPE_VIDEO, | 140 auto sender_result = ortc_factory_->CreateRtpSender(cricket::MEDIA_TYPE_VIDEO, |
142 video_transport.get()); | 141 video_transport.get()); |
143 auto video_sender = sender_result.MoveValue(); | 142 auto video_sender = sender_result.MoveValue(); |
144 EXPECT_TRUE(video_sender->Send(MakeMinimalVp8Parameters()).ok()); | 143 EXPECT_TRUE(video_sender->Send(MakeMinimalVp8Parameters()).ok()); |
145 cricket::FakeVideoMediaChannel* fake_video_channel = | 144 cricket::FakeVideoMediaChannel* fake_video_channel = |
146 fake_media_engine_->GetVideoChannel(0); | 145 fake_media_engine_->GetVideoChannel(0); |
147 ASSERT_NE(nullptr, fake_video_channel); | 146 ASSERT_NE(nullptr, fake_video_channel); |
148 EXPECT_TRUE(fake_video_channel->send_rtcp_parameters().reduced_size); | 147 EXPECT_TRUE(fake_video_channel->send_rtcp_parameters().reduced_size); |
149 ASSERT_EQ(1u, fake_video_channel->send_streams().size()); | 148 ASSERT_EQ(1u, fake_video_channel->send_streams().size()); |
150 const cricket::StreamParams& video_send_stream = | 149 const cricket::StreamParams& video_send_stream = |
151 fake_video_channel->send_streams()[0]; | 150 fake_video_channel->send_streams()[0]; |
152 EXPECT_EQ("foo", video_send_stream.cname); | 151 EXPECT_EQ("foo", video_send_stream.cname); |
153 | 152 |
154 // Create video receiver and call Receive, expecting parameters to be applied | 153 // Create video receiver and call Receive, expecting parameters to be applied |
155 // (minus |cname|, since that's the sent cname, not received). | 154 // (minus |cname|, since that's the sent cname, not received). |
156 auto receiver_result = ortc_factory_->CreateRtpReceiver( | 155 auto receiver_result = ortc_factory_->CreateRtpReceiver( |
157 cricket::MEDIA_TYPE_VIDEO, video_transport.get()); | 156 cricket::MEDIA_TYPE_VIDEO, video_transport.get()); |
158 auto video_receiver = receiver_result.MoveValue(); | 157 auto video_receiver = receiver_result.MoveValue(); |
159 EXPECT_TRUE( | 158 EXPECT_TRUE( |
160 video_receiver->Receive(MakeMinimalVp8ParametersWithSsrc(0xdeadbeef)) | 159 video_receiver->Receive(MakeMinimalVp8ParametersWithSsrc(0xdeadbeef)) |
161 .ok()); | 160 .ok()); |
162 EXPECT_TRUE(fake_video_channel->recv_rtcp_parameters().reduced_size); | 161 EXPECT_TRUE(fake_video_channel->recv_rtcp_parameters().reduced_size); |
163 | 162 |
164 // Create audio transport with non-reduced size RTCP. | 163 // Create audio transport with non-reduced size RTCP. |
165 rtc::FakePacketTransport fake_packet_transport2("2"); | 164 rtc::FakePacketTransport fake_packet_transport2("2"); |
166 rtcp_parameters.reduced_size = false; | 165 parameters.rtcp.reduced_size = false; |
167 rtcp_parameters.cname = "bar"; | 166 parameters.rtcp.cname = "bar"; |
168 rtp_transport_result = ortc_factory_->CreateRtpTransport( | 167 rtp_transport_result = ortc_factory_->CreateRtpTransport( |
169 rtcp_parameters, &fake_packet_transport2, nullptr, nullptr); | 168 parameters, &fake_packet_transport2, nullptr, nullptr); |
170 auto audio_transport = rtp_transport_result.MoveValue(); | 169 auto audio_transport = rtp_transport_result.MoveValue(); |
171 | 170 |
172 // Create audio sender and call Send, expecting parameters to be applied. | 171 // Create audio sender and call Send, expecting parameters to be applied. |
173 sender_result = ortc_factory_->CreateRtpSender(cricket::MEDIA_TYPE_AUDIO, | 172 sender_result = ortc_factory_->CreateRtpSender(cricket::MEDIA_TYPE_AUDIO, |
174 audio_transport.get()); | 173 audio_transport.get()); |
175 auto audio_sender = sender_result.MoveValue(); | 174 auto audio_sender = sender_result.MoveValue(); |
176 EXPECT_TRUE(audio_sender->Send(MakeMinimalIsacParameters()).ok()); | 175 EXPECT_TRUE(audio_sender->Send(MakeMinimalIsacParameters()).ok()); |
177 | 176 |
178 cricket::FakeVoiceMediaChannel* fake_voice_channel = | 177 cricket::FakeVoiceMediaChannel* fake_voice_channel = |
179 fake_media_engine_->GetVoiceChannel(0); | 178 fake_media_engine_->GetVoiceChannel(0); |
180 ASSERT_NE(nullptr, fake_voice_channel); | 179 ASSERT_NE(nullptr, fake_voice_channel); |
181 EXPECT_FALSE(fake_voice_channel->send_rtcp_parameters().reduced_size); | 180 EXPECT_FALSE(fake_voice_channel->send_rtcp_parameters().reduced_size); |
182 ASSERT_EQ(1u, fake_voice_channel->send_streams().size()); | 181 ASSERT_EQ(1u, fake_voice_channel->send_streams().size()); |
183 const cricket::StreamParams& audio_send_stream = | 182 const cricket::StreamParams& audio_send_stream = |
184 fake_voice_channel->send_streams()[0]; | 183 fake_voice_channel->send_streams()[0]; |
185 EXPECT_EQ("bar", audio_send_stream.cname); | 184 EXPECT_EQ("bar", audio_send_stream.cname); |
186 | 185 |
187 // Create audio receiver and call Receive, expecting parameters to be applied | 186 // Create audio receiver and call Receive, expecting parameters to be applied |
188 // (minus |cname|, since that's the sent cname, not received). | 187 // (minus |cname|, since that's the sent cname, not received). |
189 receiver_result = ortc_factory_->CreateRtpReceiver(cricket::MEDIA_TYPE_AUDIO, | 188 receiver_result = ortc_factory_->CreateRtpReceiver(cricket::MEDIA_TYPE_AUDIO, |
190 audio_transport.get()); | 189 audio_transport.get()); |
191 auto audio_receiver = receiver_result.MoveValue(); | 190 auto audio_receiver = receiver_result.MoveValue(); |
192 EXPECT_TRUE( | 191 EXPECT_TRUE( |
193 audio_receiver->Receive(MakeMinimalOpusParametersWithSsrc(0xbaadf00d)) | 192 audio_receiver->Receive(MakeMinimalOpusParametersWithSsrc(0xbaadf00d)) |
194 .ok()); | 193 .ok()); |
195 EXPECT_FALSE(fake_voice_channel->recv_rtcp_parameters().reduced_size); | 194 EXPECT_FALSE(fake_voice_channel->recv_rtcp_parameters().reduced_size); |
196 } | 195 } |
197 | 196 |
198 // When SetRtcpParameters is called, the modified parameters should be applied | 197 // When SetParameters is called, the modified parameters should be applied |
199 // to the media engine. | 198 // to the media engine. |
200 // TODO(deadbeef): Once the implementation supports changing the CNAME, | 199 // TODO(deadbeef): Once the implementation supports changing the CNAME, |
201 // test that here. | 200 // test that here. |
202 TEST_F(RtpTransportTest, SetRtcpParametersAppliesParametersToMediaEngine) { | 201 TEST_F(RtpTransportTest, SetRtcpParametersAppliesParametersToMediaEngine) { |
203 rtc::FakePacketTransport fake_packet_transport("fake"); | 202 rtc::FakePacketTransport fake_packet_transport("fake"); |
204 RtcpParameters rtcp_parameters; | 203 RtpTransportParameters parameters; |
205 rtcp_parameters.mux = true; | 204 parameters.rtcp.mux = true; |
206 rtcp_parameters.reduced_size = false; | 205 parameters.rtcp.reduced_size = false; |
207 auto rtp_transport_result = ortc_factory_->CreateRtpTransport( | 206 auto rtp_transport_result = ortc_factory_->CreateRtpTransport( |
208 rtcp_parameters, &fake_packet_transport, nullptr, nullptr); | 207 parameters, &fake_packet_transport, nullptr, nullptr); |
209 auto rtp_transport = rtp_transport_result.MoveValue(); | 208 auto rtp_transport = rtp_transport_result.MoveValue(); |
210 | 209 |
211 // Create video sender and call Send, applying an initial set of parameters. | 210 // Create video sender and call Send, applying an initial set of parameters. |
212 auto sender_result = ortc_factory_->CreateRtpSender(cricket::MEDIA_TYPE_VIDEO, | 211 auto sender_result = ortc_factory_->CreateRtpSender(cricket::MEDIA_TYPE_VIDEO, |
213 rtp_transport.get()); | 212 rtp_transport.get()); |
214 auto sender = sender_result.MoveValue(); | 213 auto sender = sender_result.MoveValue(); |
215 EXPECT_TRUE(sender->Send(MakeMinimalVp8Parameters()).ok()); | 214 EXPECT_TRUE(sender->Send(MakeMinimalVp8Parameters()).ok()); |
216 | 215 |
217 // Modify parameters and expect them to be changed at the media engine level. | 216 // Modify parameters and expect them to be changed at the media engine level. |
218 rtcp_parameters.reduced_size = true; | 217 parameters.rtcp.reduced_size = true; |
219 EXPECT_TRUE(rtp_transport->SetRtcpParameters(rtcp_parameters).ok()); | 218 EXPECT_TRUE(rtp_transport->SetParameters(parameters).ok()); |
220 | 219 |
221 cricket::FakeVideoMediaChannel* fake_video_channel = | 220 cricket::FakeVideoMediaChannel* fake_video_channel = |
222 fake_media_engine_->GetVideoChannel(0); | 221 fake_media_engine_->GetVideoChannel(0); |
223 ASSERT_NE(nullptr, fake_video_channel); | 222 ASSERT_NE(nullptr, fake_video_channel); |
224 EXPECT_TRUE(fake_video_channel->send_rtcp_parameters().reduced_size); | 223 EXPECT_TRUE(fake_video_channel->send_rtcp_parameters().reduced_size); |
225 } | 224 } |
226 | 225 |
227 } // namespace webrtc | 226 } // namespace webrtc |
OLD | NEW |