Commit 05c7d3b9 authored by Henrik Boström's avatar Henrik Boström Committed by Commit Bot

Surface associated remote stream MSID changes for active receivers.

Previously, associated media streams were only updated on the
"addition" and "removal" of a track. But MSIDs can change for active
receivers as well. In this CL, we always update the associated media
streams based on the state of the webrtc-layer receiver.

Bug: webrtc:10083
Change-Id: I54bb00a5077a0b7b78964faf13882055c8101427
Reviewed-on: https://chromium-review.googlesource.com/c/1384257
Commit-Queue: Henrik Boström <hbos@chromium.org>
Reviewed-by: default avatarHarald Alvestrand <hta@chromium.org>
Cr-Commit-Position: refs/heads/master@{#618333}
parent 2c116374
...@@ -2666,16 +2666,30 @@ void RTCPeerConnection::DidModifyTransceivers( ...@@ -2666,16 +2666,30 @@ void RTCPeerConnection::DidModifyTransceivers(
RTCRtpTransceiver* transceiver = RTCRtpTransceiver* transceiver =
CreateOrUpdateTransceiver(std::move(web_transceiver)); CreateOrUpdateTransceiver(std::move(web_transceiver));
// The transceiver is now up-to-date. Compare before/after values of size_t add_list_prev_size = add_list.size();
// FiredDirectionHasRecv() and process the remote track if it changed. // "Set the associated remote streams".
if (is_remote_description && !previously_had_recv && // https://w3c.github.io/webrtc-pc/#set-associated-remote-streams
transceiver->FiredDirectionHasRecv()) { SetAssociatedMediaStreams(
ProcessAdditionOfRemoteTrack( transceiver->receiver(),
transceiver, transceiver->web_transceiver()->Receiver()->StreamIds(), transceiver->web_transceiver()->Receiver()->StreamIds(), &remove_list,
&add_list, &track_events); &add_list);
// The transceiver is now up-to-date. Check if the receiver's track is now
// considered added or removed (though a receiver's track is never truly
// removed). A track event indicates either that the track was "added" in
// the sense that FiredDirectionHasRecv() changed, or that a new remote
// stream was added containing the receiver's track.
if (is_remote_description &&
((!previously_had_recv && transceiver->FiredDirectionHasRecv()) ||
add_list_prev_size != add_list.size())) {
// "Process the addition of a remote track".
// https://w3c.github.io/webrtc-pc/#process-remote-track-addition
track_events.push_back(transceiver);
} }
if (previously_had_recv && !transceiver->FiredDirectionHasRecv()) { if (previously_had_recv && !transceiver->FiredDirectionHasRecv()) {
ProcessRemovalOfRemoteTrack(transceiver, &remove_list, &mute_tracks); // "Process the removal of a remote track".
// https://w3c.github.io/webrtc-pc/#process-remote-track-removal
if (!transceiver->receiver()->track()->muted())
mute_tracks.push_back(transceiver->receiver()->track());
} }
} }
MediaStreamVector current_streams = getRemoteStreams(); MediaStreamVector current_streams = getRemoteStreams();
...@@ -2741,29 +2755,6 @@ void RTCPeerConnection::DidModifyTransceivers( ...@@ -2741,29 +2755,6 @@ void RTCPeerConnection::DidModifyTransceivers(
} }
} }
void RTCPeerConnection::ProcessAdditionOfRemoteTrack(
RTCRtpTransceiver* transceiver,
const WebVector<WebString>& stream_ids,
HeapVector<std::pair<Member<MediaStream>, Member<MediaStreamTrack>>>*
add_list,
HeapVector<Member<RTCRtpTransceiver>>* track_events) {
SetAssociatedMediaStreams(transceiver->receiver(), stream_ids, nullptr,
add_list);
track_events->push_back(transceiver);
}
void RTCPeerConnection::ProcessRemovalOfRemoteTrack(
RTCRtpTransceiver* transceiver,
HeapVector<std::pair<Member<MediaStream>, Member<MediaStreamTrack>>>*
remove_list,
HeapVector<Member<MediaStreamTrack>>* mute_tracks) {
WebVector<WebString> stream_ids = {};
SetAssociatedMediaStreams(transceiver->receiver(), stream_ids, remove_list,
nullptr);
if (!transceiver->receiver()->track()->muted())
mute_tracks->push_back(transceiver->receiver()->track());
}
void RTCPeerConnection::SetAssociatedMediaStreams( void RTCPeerConnection::SetAssociatedMediaStreams(
RTCRtpReceiver* receiver, RTCRtpReceiver* receiver,
const WebVector<WebString>& stream_ids, const WebVector<WebString>& stream_ids,
......
...@@ -405,19 +405,6 @@ class MODULES_EXPORT RTCPeerConnection final ...@@ -405,19 +405,6 @@ class MODULES_EXPORT RTCPeerConnection final
RTCRtpTransceiver* CreateOrUpdateTransceiver( RTCRtpTransceiver* CreateOrUpdateTransceiver(
std::unique_ptr<WebRTCRtpTransceiver>); std::unique_ptr<WebRTCRtpTransceiver>);
// https://w3c.github.io/webrtc-pc/#process-remote-track-addition
void ProcessAdditionOfRemoteTrack(
RTCRtpTransceiver* transceiver,
const WebVector<WebString>& stream_ids,
HeapVector<std::pair<Member<MediaStream>, Member<MediaStreamTrack>>>*
add_list,
HeapVector<Member<RTCRtpTransceiver>>* track_events);
// https://w3c.github.io/webrtc-pc/#process-remote-track-removal
void ProcessRemovalOfRemoteTrack(
RTCRtpTransceiver* transceiver,
HeapVector<std::pair<Member<MediaStream>, Member<MediaStreamTrack>>>*
remove_list,
HeapVector<Member<MediaStreamTrack>>* mute_tracks);
// Update the |receiver->streams()| to the streams indicated by |stream_ids|, // Update the |receiver->streams()| to the streams indicated by |stream_ids|,
// adding to |remove_list| and |add_list| accordingly. // adding to |remove_list| and |add_list| accordingly.
// https://w3c.github.io/webrtc-pc/#set-associated-remote-streams // https://w3c.github.io/webrtc-pc/#set-associated-remote-streams
......
...@@ -3235,7 +3235,6 @@ crbug.com/893480 external/wpt/infrastructure/testdriver/actions/elementTiming.ht ...@@ -3235,7 +3235,6 @@ crbug.com/893480 external/wpt/infrastructure/testdriver/actions/elementTiming.ht
crbug.com/893480 external/wpt/infrastructure/testdriver/actions/multiDevice.html [ Failure Timeout ] crbug.com/893480 external/wpt/infrastructure/testdriver/actions/multiDevice.html [ Failure Timeout ]
# ====== New tests from wpt-importer added here ====== # ====== New tests from wpt-importer added here ======
crbug.com/626703 virtual/webrtc-wpt-unified-plan/external/wpt/webrtc/RTCTrackEvent-fire.html [ Timeout ]
crbug.com/626703 external/wpt/css/filter-effects/filter-subregion-01.html [ Failure ] crbug.com/626703 external/wpt/css/filter-effects/filter-subregion-01.html [ Failure ]
crbug.com/626703 external/wpt/webrtc/RTCTrackEvent-fire.html [ Timeout ] crbug.com/626703 external/wpt/webrtc/RTCTrackEvent-fire.html [ Timeout ]
crbug.com/626703 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-span-all-005.html [ Failure ] crbug.com/626703 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-span-all-005.html [ Failure ]
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment