Implement PeerConnection::AddTrack/RemoveTrack for Unified Plan
Bug: webrtc:7600
Change-Id: I2a48426a29ac67b6bdbd7817fe07273cdd5fd980
Reviewed-on: https://webrtc-review.googlesource.com/31647
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21305}
diff --git a/pc/peerconnection.h b/pc/peerconnection.h
index 16185de..50a9da1 100644
--- a/pc/peerconnection.h
+++ b/pc/peerconnection.h
@@ -89,6 +89,9 @@
bool AddStream(MediaStreamInterface* local_stream) override;
void RemoveStream(MediaStreamInterface* local_stream) override;
+ RTCErrorOr<rtc::scoped_refptr<RtpSenderInterface>> AddTrackWithStreamLabels(
+ rtc::scoped_refptr<MediaStreamTrackInterface> track,
+ const std::vector<std::string>& stream_labels) override;
rtc::scoped_refptr<RtpSenderInterface> AddTrack(
MediaStreamTrackInterface* track,
std::vector<MediaStreamInterface*> streams) override;
@@ -342,11 +345,37 @@
void RemoveVideoTrack(VideoTrackInterface* track,
MediaStreamInterface* stream);
+ // AddTrack implementation when Unified Plan is specified.
+ RTCErrorOr<rtc::scoped_refptr<RtpSenderInterface>> AddTrackUnifiedPlan(
+ rtc::scoped_refptr<MediaStreamTrackInterface> track,
+ const std::vector<std::string>& stream_labels);
+ // AddTrack implementation when Plan B is specified.
+ RTCErrorOr<rtc::scoped_refptr<RtpSenderInterface>> AddTrackPlanB(
+ rtc::scoped_refptr<MediaStreamTrackInterface> track,
+ const std::vector<std::string>& stream_labels);
+
+ // Returns the first RtpTransceiver suitable for a newly added track, if such
+ // transceiver is available.
+ rtc::scoped_refptr<RtpTransceiverProxyWithInternal<RtpTransceiver>>
+ FindFirstTransceiverForAddedTrack(
+ rtc::scoped_refptr<MediaStreamTrackInterface> track);
+
+ // RemoveTrack that returns an RTCError.
+ RTCError RemoveTrackInternal(rtc::scoped_refptr<RtpSenderInterface> sender);
+
+ rtc::scoped_refptr<RtpTransceiverProxyWithInternal<RtpTransceiver>>
+ FindTransceiverBySender(rtc::scoped_refptr<RtpSenderInterface> sender);
+
RTCErrorOr<rtc::scoped_refptr<RtpTransceiverInterface>> AddTransceiver(
cricket::MediaType media_type,
rtc::scoped_refptr<MediaStreamTrackInterface> track,
const RtpTransceiverInit& init);
+ // Create a new RtpTransceiver of the given type and add it to the list of
+ // transceivers.
+ rtc::scoped_refptr<RtpTransceiverProxyWithInternal<RtpTransceiver>>
+ CreateTransceiver(cricket::MediaType media_type);
+
void SetIceConnectionState(IceConnectionState new_state);
// Called any time the IceGatheringState changes
void OnIceGatheringChange(IceGatheringState new_state);