mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-16 23:30:48 +01:00

This change adds exposure of a new transceiver method for getting the total set of supported extensions stored as an attribute, and their direction. If the direction is kStopped, the extension is not signalled in Unified Plan SDP negotiation. Note: SDP negotiation is not modified by this change. Changes: - RtpHeaderExtensionCapability gets a new RtpTransceiverDirection, indicating either kStopped (extension available but not signalled), or other (extension signalled). - RtpTransceiver gets the new method as described above. The default value of the attribute comes from the voice and video engines as before. https://chromestatus.com/feature/5680189201711104. go/rtp-header-extension-ip Intent to prototype: https://groups.google.com/a/chromium.org/g/blink-dev/c/65YdUi02yZk Bug: chromium:1051821 Change-Id: I440443b474db5b1cfe8c6b25b6c10a3ff9c21a8c Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/170235 Commit-Queue: Markus Handell <handellm@webrtc.org> Reviewed-by: Harald Alvestrand <hta@webrtc.org> Reviewed-by: Karl Wiberg <kwiberg@webrtc.org> Cr-Commit-Position: refs/heads/master@{#30800}
104 lines
3.7 KiB
C++
104 lines
3.7 KiB
C++
/*
|
|
* Copyright 2018 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
// This file contains tests for |RtpTransceiver|.
|
|
|
|
#include "pc/rtp_transceiver.h"
|
|
|
|
#include <memory>
|
|
|
|
#include "media/base/fake_media_engine.h"
|
|
#include "pc/test/mock_channel_interface.h"
|
|
#include "pc/test/mock_rtp_receiver_internal.h"
|
|
#include "pc/test/mock_rtp_sender_internal.h"
|
|
#include "test/gmock.h"
|
|
#include "test/gtest.h"
|
|
|
|
using ::testing::ElementsAre;
|
|
using ::testing::Eq;
|
|
using ::testing::Field;
|
|
using ::testing::Not;
|
|
using ::testing::Return;
|
|
using ::testing::ReturnRef;
|
|
|
|
namespace webrtc {
|
|
|
|
// Checks that a channel cannot be set on a stopped |RtpTransceiver|.
|
|
TEST(RtpTransceiverTest, CannotSetChannelOnStoppedTransceiver) {
|
|
RtpTransceiver transceiver(cricket::MediaType::MEDIA_TYPE_AUDIO);
|
|
cricket::MockChannelInterface channel1;
|
|
sigslot::signal1<cricket::ChannelInterface*> signal;
|
|
EXPECT_CALL(channel1, media_type())
|
|
.WillRepeatedly(Return(cricket::MediaType::MEDIA_TYPE_AUDIO));
|
|
EXPECT_CALL(channel1, SignalFirstPacketReceived())
|
|
.WillRepeatedly(ReturnRef(signal));
|
|
|
|
transceiver.SetChannel(&channel1);
|
|
EXPECT_EQ(&channel1, transceiver.channel());
|
|
|
|
// Stop the transceiver.
|
|
transceiver.Stop();
|
|
EXPECT_EQ(&channel1, transceiver.channel());
|
|
|
|
cricket::MockChannelInterface channel2;
|
|
EXPECT_CALL(channel2, media_type())
|
|
.WillRepeatedly(Return(cricket::MediaType::MEDIA_TYPE_AUDIO));
|
|
|
|
// Channel can no longer be set, so this call should be a no-op.
|
|
transceiver.SetChannel(&channel2);
|
|
EXPECT_EQ(&channel1, transceiver.channel());
|
|
}
|
|
|
|
// Checks that a channel can be unset on a stopped |RtpTransceiver|
|
|
TEST(RtpTransceiverTest, CanUnsetChannelOnStoppedTransceiver) {
|
|
RtpTransceiver transceiver(cricket::MediaType::MEDIA_TYPE_VIDEO);
|
|
cricket::MockChannelInterface channel;
|
|
sigslot::signal1<cricket::ChannelInterface*> signal;
|
|
EXPECT_CALL(channel, media_type())
|
|
.WillRepeatedly(Return(cricket::MediaType::MEDIA_TYPE_VIDEO));
|
|
EXPECT_CALL(channel, SignalFirstPacketReceived())
|
|
.WillRepeatedly(ReturnRef(signal));
|
|
|
|
transceiver.SetChannel(&channel);
|
|
EXPECT_EQ(&channel, transceiver.channel());
|
|
|
|
// Stop the transceiver.
|
|
transceiver.Stop();
|
|
EXPECT_EQ(&channel, transceiver.channel());
|
|
|
|
// Set the channel to |nullptr|.
|
|
transceiver.SetChannel(nullptr);
|
|
EXPECT_EQ(nullptr, transceiver.channel());
|
|
}
|
|
|
|
TEST(RtpTransceiverTest,
|
|
InitsWithChannelManagerRtpHeaderExtensionCapabilities) {
|
|
cricket::ChannelManager channel_manager(
|
|
std::make_unique<cricket::FakeMediaEngine>(),
|
|
std::make_unique<cricket::FakeDataEngine>(), rtc::Thread::Current(),
|
|
rtc::Thread::Current());
|
|
std::vector<RtpHeaderExtensionCapability> extensions({
|
|
RtpHeaderExtensionCapability("uri1", 1,
|
|
RtpTransceiverDirection::kSendRecv),
|
|
RtpHeaderExtensionCapability("uri2", 2,
|
|
RtpTransceiverDirection::kRecvOnly),
|
|
});
|
|
RtpTransceiver transceiver(
|
|
RtpSenderProxyWithInternal<RtpSenderInternal>::Create(
|
|
rtc::Thread::Current(),
|
|
new rtc::RefCountedObject<MockRtpSenderInternal>()),
|
|
RtpReceiverProxyWithInternal<RtpReceiverInternal>::Create(
|
|
rtc::Thread::Current(),
|
|
new rtc::RefCountedObject<MockRtpReceiverInternal>()),
|
|
&channel_manager, extensions);
|
|
EXPECT_EQ(transceiver.HeaderExtensionsToOffer(), extensions);
|
|
}
|
|
|
|
} // namespace webrtc
|