Reland RtpTransceiverInterface: introduce SetOfferedRtpHeaderExtensions.

This change adds exposure of a new transceiver method for
modifying the extensions offered in the next SDP negotiation,
following spec details in https://w3c.github.io/webrtc-extensions/#rtcrtptransceiver-interface.

Features:
- The interface allows to control the negotiated direction as
  per https://tools.ietf.org/html/rfc5285#page-7.
- The interface allows to remove an extension from SDP
  negotiation by modifying the direction to
  RtpTransceiverDirection::kStopped.

Note: support for signalling directionality of header extensions
in the SDP isn't implemented yet.

https://chromestatus.com/feature/5680189201711104.
Intent to prototype: https://groups.google.com/a/chromium.org/g/blink-dev/c/65YdUi02yZk

Tested: new unit tests in CL and manual tests with downstream project.
Bug: chromium:1051821
Change-Id: I7a4c2f979a5e50e88d49598eacb76d24e81c7c7a
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/177348
Commit-Queue: Markus Handell <handellm@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31554}
diff --git a/api/rtp_transceiver_interface.h b/api/rtp_transceiver_interface.h
index 9dbafd4..13277d9 100644
--- a/api/rtp_transceiver_interface.h
+++ b/api/rtp_transceiver_interface.h
@@ -133,6 +133,13 @@
   virtual std::vector<RtpHeaderExtensionCapability> HeaderExtensionsToOffer()
       const;
 
+  // The SetOfferedRtpHeaderExtensions method modifies the next SDP negotiation
+  // so that it negotiates use of header extensions which are not kStopped.
+  // https://w3c.github.io/webrtc-extensions/#rtcrtptransceiver-interface
+  virtual webrtc::RTCError SetOfferedRtpHeaderExtensions(
+      rtc::ArrayView<const RtpHeaderExtensionCapability>
+          header_extensions_to_offer);
+
  protected:
   ~RtpTransceiverInterface() override = default;
 };