Ship GenericDescriptor00 by default.
The change ships GenericDescriptor00 and authentication by default,
but doesn't expose it by default, and makes WebRTC respond to
offers carrying it.
The change adds a unit test for the new semantics.
Tests well in munge-sdp. Frame marking replaced by
http://www.webrtc.org/experiments/rtp-hdrext/generic-frame-descriptor-00
in the offer results in an answer containing the
extension as first entry.
Bug: webrtc:11367
Change-Id: I0ef91b7d4096d949c3d547ece7d6c4d39aa241da
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/168661
Reviewed-by: Magnus Flodman <mflodman@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Commit-Queue: Markus Handell <handellm@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#30542}
diff --git a/pc/media_session_unittest.cc b/pc/media_session_unittest.cc
index a2416c4..389b6a0 100644
--- a/pc/media_session_unittest.cc
+++ b/pc/media_session_unittest.cc
@@ -238,6 +238,12 @@
2),
};
+static const RtpExtension kRtpExtensionGenericFrameDescriptorUri00[] = {
+ RtpExtension("http://www.webrtc.org/experiments/rtp-hdrext/"
+ "generic-frame-descriptor-00",
+ 3),
+};
+
static const uint32_t kSimulcastParamsSsrc[] = {10, 11, 20, 21, 30, 31};
static const uint32_t kSimSsrc[] = {10, 20, 30};
static const uint32_t kFec1Ssrc[] = {10, 11};
@@ -1672,6 +1678,50 @@
}
TEST_F(MediaSessionDescriptionFactoryTest,
+ TestNegotiateFrameDescriptorWhenUnexposedLocally) {
+ MediaSessionOptions opts;
+ AddAudioVideoSections(RtpTransceiverDirection::kRecvOnly, &opts);
+
+ const auto offered = MAKE_VECTOR(kRtpExtensionGenericFrameDescriptorUri00);
+ f1_.set_audio_rtp_header_extensions(offered);
+ f1_.set_video_rtp_header_extensions(offered);
+ const auto local = MAKE_VECTOR(kRtpExtensionTransportSequenceNumber01);
+ f2_.set_audio_rtp_header_extensions(local);
+ f2_.set_video_rtp_header_extensions(local);
+ std::unique_ptr<SessionDescription> offer = f1_.CreateOffer(opts, nullptr);
+ std::unique_ptr<SessionDescription> answer =
+ f2_.CreateAnswer(offer.get(), opts, nullptr);
+ EXPECT_THAT(
+ GetFirstAudioContentDescription(answer.get())->rtp_header_extensions(),
+ ElementsAreArray(offered));
+ EXPECT_THAT(
+ GetFirstVideoContentDescription(answer.get())->rtp_header_extensions(),
+ ElementsAreArray(offered));
+}
+
+TEST_F(MediaSessionDescriptionFactoryTest,
+ TestNegotiateFrameDescriptorWhenExposedLocally) {
+ MediaSessionOptions opts;
+ AddAudioVideoSections(RtpTransceiverDirection::kRecvOnly, &opts);
+
+ const auto offered = MAKE_VECTOR(kRtpExtensionGenericFrameDescriptorUri00);
+ f1_.set_audio_rtp_header_extensions(offered);
+ f1_.set_video_rtp_header_extensions(offered);
+ const auto local = MAKE_VECTOR(kRtpExtensionGenericFrameDescriptorUri00);
+ f2_.set_audio_rtp_header_extensions(local);
+ f2_.set_video_rtp_header_extensions(local);
+ std::unique_ptr<SessionDescription> offer = f1_.CreateOffer(opts, nullptr);
+ std::unique_ptr<SessionDescription> answer =
+ f2_.CreateAnswer(offer.get(), opts, nullptr);
+ EXPECT_THAT(
+ GetFirstAudioContentDescription(answer.get())->rtp_header_extensions(),
+ ElementsAreArray(offered));
+ EXPECT_THAT(
+ GetFirstVideoContentDescription(answer.get())->rtp_header_extensions(),
+ ElementsAreArray(offered));
+}
+
+TEST_F(MediaSessionDescriptionFactoryTest,
TestOfferAnswerWithEncryptedRtpExtensionsBoth) {
MediaSessionOptions opts;
AddAudioVideoSections(RtpTransceiverDirection::kRecvOnly, &opts);