simulcast: Limit audio transceivers to single stream
We don't support audio simulcast, so we should reject the layers early during an addTransceiver() call. Bug: webrtc:12719 Change-Id: Ieeb92c66de741e9b11943e0173a6f2e052926f13 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/216685 Commit-Queue: Florent Castelli <orphis@webrtc.org> Reviewed-by: Harald Alvestrand <hta@webrtc.org> Cr-Commit-Position: refs/heads/master@{#33886}
This commit is contained in:
parent
c9716e0c71
commit
e1b685a50a
@ -997,9 +997,11 @@ PeerConnection::AddTransceiver(
|
||||
parameters.encodings = init.send_encodings;
|
||||
|
||||
// Encodings are dropped from the tail if too many are provided.
|
||||
if (parameters.encodings.size() > kMaxSimulcastStreams) {
|
||||
size_t max_simulcast_streams =
|
||||
media_type == cricket::MEDIA_TYPE_VIDEO ? kMaxSimulcastStreams : 1u;
|
||||
if (parameters.encodings.size() > max_simulcast_streams) {
|
||||
parameters.encodings.erase(
|
||||
parameters.encodings.begin() + kMaxSimulcastStreams,
|
||||
parameters.encodings.begin() + max_simulcast_streams,
|
||||
parameters.encodings.end());
|
||||
}
|
||||
|
||||
|
||||
@ -157,9 +157,10 @@ class PeerConnectionSimulcastTests : public ::testing::Test {
|
||||
|
||||
rtc::scoped_refptr<RtpTransceiverInterface> AddTransceiver(
|
||||
PeerConnectionWrapper* pc,
|
||||
const std::vector<SimulcastLayer>& layers) {
|
||||
const std::vector<SimulcastLayer>& layers,
|
||||
cricket::MediaType media_type = cricket::MEDIA_TYPE_VIDEO) {
|
||||
auto init = CreateTransceiverInit(layers);
|
||||
return pc->AddTransceiver(cricket::MEDIA_TYPE_VIDEO, init);
|
||||
return pc->AddTransceiver(media_type, init);
|
||||
}
|
||||
|
||||
SimulcastDescription RemoveSimulcast(SessionDescriptionInterface* sd) {
|
||||
@ -556,6 +557,25 @@ TEST_F(PeerConnectionSimulcastTests, NegotiationDoesNotHaveRidExtension) {
|
||||
ValidateTransceiverParameters(transceiver, expected_layers);
|
||||
}
|
||||
|
||||
TEST_F(PeerConnectionSimulcastTests, SimulcastAudioRejected) {
|
||||
auto local = CreatePeerConnectionWrapper();
|
||||
auto remote = CreatePeerConnectionWrapper();
|
||||
auto layers = CreateLayers({"1", "2", "3", "4"}, true);
|
||||
auto transceiver =
|
||||
AddTransceiver(local.get(), layers, cricket::MEDIA_TYPE_AUDIO);
|
||||
// Should only have the first layer.
|
||||
auto parameters = transceiver->sender()->GetParameters();
|
||||
EXPECT_EQ(1u, parameters.encodings.size());
|
||||
EXPECT_THAT(parameters.encodings,
|
||||
ElementsAre(Field("rid", &RtpEncodingParameters::rid, Eq(""))));
|
||||
ExchangeOfferAnswer(local.get(), remote.get(), {});
|
||||
// Still have a single layer after negotiation
|
||||
parameters = transceiver->sender()->GetParameters();
|
||||
EXPECT_EQ(1u, parameters.encodings.size());
|
||||
EXPECT_THAT(parameters.encodings,
|
||||
ElementsAre(Field("rid", &RtpEncodingParameters::rid, Eq(""))));
|
||||
}
|
||||
|
||||
#if RTC_METRICS_ENABLED
|
||||
//
|
||||
// Checks the logged metrics when simulcast is not used.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user