Implement transceiver.stop()
This adds RtpTransceiver.StopStandard(), which behaves according to
the specification at
https://w3c.github.io/webrtc-pc/#dom-rtcrtptransceiver-stop
It modifies RTCPeerConnection.getTransceivers() to return only
transceivers that have not been stopped.
Rebase of armax' https://webrtc-review.googlesource.com/c/src/+/172762
Bug: chromium:980879
Change-Id: I7d383ee874ccc0a006fdcf280496b5d4235425ce
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/180580
Reviewed-by: Kári Helgason <kthelgason@webrtc.org>
Reviewed-by: Sami Kalliomäki <sakal@webrtc.org>
Reviewed-by: Guido Urdaneta <guidou@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31893}
diff --git a/api/rtp_transceiver_interface.h b/api/rtp_transceiver_interface.h
index 13277d9..cdda34b 100644
--- a/api/rtp_transceiver_interface.h
+++ b/api/rtp_transceiver_interface.h
@@ -89,6 +89,16 @@
// https://w3c.github.io/webrtc-pc/#dom-rtcrtptransceiver-stopped
virtual bool stopped() const = 0;
+ // The stopping attribute indicates that the user has indicated that the
+ // sender of this transceiver will stop sending, and that the receiver will
+ // no longer receive. It is always true if stopped() is true.
+ // If stopping() is true and stopped() is false, it means that the
+ // transceiver's stop() method has been called, but the negotiation with
+ // the other end for shutting down the transceiver is not yet done.
+ // https://w3c.github.io/webrtc-pc/#dfn-stopping-0
+ // TODO(hta): Remove default implementation.
+ virtual bool stopping() const;
+
// The direction attribute indicates the preferred direction of this
// transceiver, which will be used in calls to CreateOffer and CreateAnswer.
// https://w3c.github.io/webrtc-pc/#dom-rtcrtptransceiver-direction
@@ -99,7 +109,10 @@
// CreateOffer and CreateAnswer mark the corresponding media descriptions as
// sendrecv, sendonly, recvonly, or inactive.
// https://w3c.github.io/webrtc-pc/#dom-rtcrtptransceiver-direction
- virtual void SetDirection(RtpTransceiverDirection new_direction) = 0;
+ // TODO(hta): Deprecate SetDirection without error and rename
+ // SetDirectionWithError to SetDirection, remove default implementations.
+ virtual void SetDirection(RtpTransceiverDirection new_direction);
+ virtual RTCError SetDirectionWithError(RtpTransceiverDirection new_direction);
// The current_direction attribute indicates the current direction negotiated
// for this transceiver. If this transceiver has never been represented in an
@@ -114,10 +127,19 @@
// Exposed in the public interface for use by Chromium.
virtual absl::optional<RtpTransceiverDirection> fired_direction() const;
- // The Stop method irreversibly stops the RtpTransceiver. The sender of this
- // transceiver will no longer send, the receiver will no longer receive.
+ // Initiates a stop of the transceiver.
+ // The stop is complete when stopped() returns true.
+ // A stopped transceiver can be reused for a different track.
// https://w3c.github.io/webrtc-pc/#dom-rtcrtptransceiver-stop
- virtual void Stop() = 0;
+ // TODO(hta): Rename to Stop() when users of the non-standard Stop() are
+ // updated.
+ virtual RTCError StopStandard();
+
+ // Stops a transceiver immediately, without waiting for signalling.
+ // This is an internal function, and is exposed for historical reasons.
+ // https://w3c.github.io/webrtc-pc/#dfn-stop-the-rtcrtptransceiver
+ virtual void StopInternal();
+ RTC_DEPRECATED virtual void Stop();
// The SetCodecPreferences method overrides the default codec preferences used
// by WebRTC for this transceiver.