Changeset 270486 in webkit
- Timestamp:
- Dec 6, 2020 11:21:19 AM (20 months ago)
- Location:
- trunk
- Files:
-
- 14 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/imported/w3c/ChangeLog (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpSender-setStreams.https-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/webrtc/idlharness.https.window-expected.txt (modified) (2 diffs)
-
LayoutTests/webrtc/video.html (modified) (3 diffs)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/Modules/mediastream/RTCRtpSender.cpp (modified) (2 diffs)
-
Source/WebCore/Modules/mediastream/RTCRtpSender.h (modified) (4 diffs)
-
Source/WebCore/Modules/mediastream/RTCRtpSender.idl (modified) (1 diff)
-
Source/WebCore/Modules/mediastream/RTCRtpSenderBackend.h (modified) (2 diffs)
-
Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp (modified) (4 diffs)
-
Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp (modified) (1 diff)
-
Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r270471 r270486 1 2020-12-06 Youenn Fablet <youenn@apple.com> 2 3 Add support for RTCRtpSender::setStreams 4 https://bugs.webkit.org/show_bug.cgi?id=219542 5 6 Reviewed by Eric Carlson. 7 8 * webrtc/video.html: 9 1 10 2020-12-05 Diego Pino Garcia <dpino@igalia.com> 2 11 -
trunk/LayoutTests/imported/w3c/ChangeLog
r270459 r270486 1 2020-12-06 Youenn Fablet <youenn@apple.com> 2 3 Add support for RTCRtpSender::setStreams 4 https://bugs.webkit.org/show_bug.cgi?id=219542 5 6 Reviewed by Eric Carlson. 7 8 * web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback-expected.txt: 9 * web-platform-tests/webrtc/RTCRtpSender-setStreams.https-expected.txt: 10 1 11 2020-12-04 Chris Dumez <cdumez@apple.com> 2 12 -
trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback-expected.txt
r267649 r270486 18 18 FAIL two transceivers with same mids promise_test: Unhandled rejection with value: object "InvalidStateError: Description type incompatible with current signaling state" 19 19 FAIL onremovetrack fires during remote rollback promise_test: Unhandled rejection with value: object "InvalidStateError: Description type incompatible with current signaling state" 20 FAIL rollback of a remote offer with stream changes promise_test: Unhandled rejection with value: object "TypeError: pc1.getTransceivers()[0].sender.setStreams is not a function. (In 'pc1.getTransceivers()[0].sender.setStreams(stream2)', 'pc1.getTransceivers()[0].sender.setStreams' is undefined)"20 FAIL rollback of a remote offer with stream changes assert_equals: expected 2 but got 1 21 21 PASS removeTrack() with a sender being rolled back does not crash or throw 22 22 FAIL Implicit rollback with only a datachannel works promise_test: Unhandled rejection with value: object "InvalidStateError: Description type incompatible with current signaling state" -
trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpSender-setStreams.https-expected.txt
r264202 r270486 1 1 2 FAIL setStreams causes streams to be reported via ontrack on callee promise_test: Unhandled rejection with value: object "TypeError: sender.setStreams is not a function. (In 'sender.setStreams(stream1, stream2)', 'sender.setStreams' is undefined)" 3 FAIL setStreams can be used to reconstruct a stream with a track on the remote side promise_test: Unhandled rejection with value: object "TypeError: sender.setStreams is not a function. (In 'sender.setStreams(stream)', 'sender.setStreams' is undefined)" 4 FAIL Adding streams and changing direction causes new streams to be reported via ontrack on callee promise_test: Unhandled rejection with value: object "TypeError: transceiver.sender.setStreams is not a function. (In 'transceiver.sender.setStreams(stream1, stream2)', 'transceiver.sender.setStreams' is undefined)" 5 FAIL Adding streams to an active transceiver causes new streams to be reported via ontrack on callee promise_test: Unhandled rejection with value: object "TypeError: transceiver.sender.setStreams is not a function. (In 'transceiver.sender.setStreams(stream1, stream2)', 'transceiver.sender.setStreams' is undefined)" 6 FAIL setStreams() fires InvalidStateError on a closed peer connection. assert_throws_dom: function "() => transceiver.sender.setStreams(stream1, stream2)" threw object "TypeError: transceiver.sender.setStreams is not a function. (In 'transceiver.sender.setStreams(stream1, stream2)', 'transceiver.sender.setStreams' is undefined)" that is not a DOMException InvalidStateError: property "code" is equal to undefined, expected 11 2 Harness Error (TIMEOUT), message = null 7 3 4 PASS setStreams causes streams to be reported via ontrack on callee 5 PASS setStreams can be used to reconstruct a stream with a track on the remote side 6 PASS Adding streams and changing direction causes new streams to be reported via ontrack on callee 7 TIMEOUT Adding streams to an active transceiver causes new streams to be reported via ontrack on callee Test timed out 8 PASS setStreams() fires InvalidStateError on a closed peer connection. 9 -
trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/idlharness.https.window-expected.txt
r270101 r270486 238 238 PASS RTCRtpSender interface: operation getParameters() 239 239 PASS RTCRtpSender interface: operation replaceTrack(MediaStreamTrack?) 240 FAIL RTCRtpSender interface: operation setStreams(MediaStream...) assert_own_property: interface prototype object missing non-static operation expected property "setStreams" missing 240 PASS RTCRtpSender interface: operation setStreams(MediaStream...) 241 241 PASS RTCRtpSender interface: operation getStats() 242 242 PASS RTCRtpSender interface: attribute dtmf … … 252 252 PASS RTCRtpSender interface: new RTCPeerConnection().addTransceiver('audio').sender must inherit property "replaceTrack(MediaStreamTrack?)" with the proper type 253 253 PASS RTCRtpSender interface: calling replaceTrack(MediaStreamTrack?) on new RTCPeerConnection().addTransceiver('audio').sender with too few arguments must throw TypeError 254 FAIL RTCRtpSender interface: new RTCPeerConnection().addTransceiver('audio').sender must inherit property "setStreams(MediaStream...)" with the proper type assert_inherits: property "setStreams" not found in prototype chain 255 FAIL RTCRtpSender interface: calling setStreams(MediaStream...) on new RTCPeerConnection().addTransceiver('audio').sender with too few arguments must throw TypeError assert_inherits: property "setStreams" not found in prototype chain 254 PASS RTCRtpSender interface: new RTCPeerConnection().addTransceiver('audio').sender must inherit property "setStreams(MediaStream...)" with the proper type 255 PASS RTCRtpSender interface: calling setStreams(MediaStream...) on new RTCPeerConnection().addTransceiver('audio').sender with too few arguments must throw TypeError 256 256 PASS RTCRtpSender interface: new RTCPeerConnection().addTransceiver('audio').sender must inherit property "getStats()" with the proper type 257 257 PASS RTCRtpSender interface: new RTCPeerConnection().addTransceiver('audio').sender must inherit property "dtmf" with the proper type -
trunk/LayoutTests/webrtc/video.html
r265047 r270486 50 50 51 51 const localStream = await navigator.mediaDevices.getUserMedia({video: {advanced: [{width:{min:640}}, {height:{min:480} } ]}}); 52 const localStream2 = new MediaStream([localStream.getVideoTracks()[0]]); 52 53 if (window.internals) 53 54 assert_true(internals.pageMediaState().includes('HasActiveVideoCaptureDevice'), "Unexpected HasActiveVideoCaptureDevice"); … … 55 56 createConnections((firstConnection) => { 56 57 pc1 = firstConnection; 57 firstConnection.addTrack(localStream.getVideoTracks()[0], localStream); 58 const sender = firstConnection.addTrack(localStream.getVideoTracks()[0]); 59 sender.setStreams(localStream, localStream2); 58 60 }, (secondConnection) => { 59 61 pc2 = secondConnection; … … 63 65 assert_true(Array.isArray(trackEvent.streams), "Array.isArray() should return true"); 64 66 assert_true(Object.isFrozen(trackEvent.streams), "Object.isFrozen() should return true"); 67 assert_equals(trackEvent.streams.length, 2); 68 assert_equals(trackEvent.streams[0].id, localStream.id, "first stream id"); 69 assert_equals(trackEvent.streams[1].id, localStream2.id, "second stream id"); 65 70 assert_equals(trackEvent.track.id, localStream.getVideoTracks()[0].id); 66 71 assert_equals(trackEvent.track, trackEvent.streams[0].getVideoTracks()[0]); -
trunk/Source/WebCore/ChangeLog
r270485 r270486 1 2020-12-06 Youenn Fablet <youenn@apple.com> 2 3 Add support for RTCRtpSender::setStreams 4 https://bugs.webkit.org/show_bug.cgi?id=219542 5 6 Reviewed by Eric Carlson. 7 8 Pipe stream IDs from WebCore sender to libqebrtc backend sender. 9 A follow-up patch should handle creation of remote streams in case of renegotiation. 10 Covered by updated and rebased tests. 11 12 * Modules/mediastream/RTCRtpSender.cpp: 13 (WebCore::RTCRtpSender::create): 14 (WebCore::RTCRtpSender::RTCRtpSender): 15 (WebCore::RTCRtpSender::setStreams): 16 (WebCore::RTCRtpSender::setMediaStreamIds): 17 * Modules/mediastream/RTCRtpSender.h: 18 * Modules/mediastream/RTCRtpSender.idl: 19 * Modules/mediastream/RTCRtpSenderBackend.h: 20 * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp: 21 (WebCore::LibWebRTCPeerConnectionBackend::addTrack): 22 (WebCore::LibWebRTCPeerConnectionBackend::addTransceiverFromTrackOrKind): 23 (WebCore::LibWebRTCPeerConnectionBackend::newRemoteTransceiver): 24 * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp: 25 (WebCore::LibWebRTCRtpSenderBackend::setMediaStreamIds): 26 * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h: 27 1 28 2020-12-06 Zalan Bujtas <zalan@apple.com> 2 29 -
trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.cpp
r270107 r270486 46 46 WTF_MAKE_ISO_ALLOCATED_IMPL(RTCRtpSender); 47 47 48 Ref<RTCRtpSender> RTCRtpSender::create(RTCPeerConnection& connection, Ref<MediaStreamTrack>&& track, Vector<String>&& mediaStreamIds,std::unique_ptr<RTCRtpSenderBackend>&& backend)49 { 50 auto sender = adoptRef(*new RTCRtpSender(connection, String(track->kind()), WTFMove( mediaStreamIds), WTFMove(backend)));48 Ref<RTCRtpSender> RTCRtpSender::create(RTCPeerConnection& connection, Ref<MediaStreamTrack>&& track, std::unique_ptr<RTCRtpSenderBackend>&& backend) 49 { 50 auto sender = adoptRef(*new RTCRtpSender(connection, String(track->kind()), WTFMove(backend))); 51 51 sender->setTrack(WTFMove(track)); 52 52 return sender; 53 53 } 54 54 55 Ref<RTCRtpSender> RTCRtpSender::create(RTCPeerConnection& connection, String&& trackKind, Vector<String>&& mediaStreamIds,std::unique_ptr<RTCRtpSenderBackend>&& backend)56 { 57 return adoptRef(*new RTCRtpSender(connection, WTFMove(trackKind), WTFMove( mediaStreamIds), WTFMove(backend)));58 } 59 60 RTCRtpSender::RTCRtpSender(RTCPeerConnection& connection, String&& trackKind, Vector<String>&& mediaStreamIds,std::unique_ptr<RTCRtpSenderBackend>&& backend)55 Ref<RTCRtpSender> RTCRtpSender::create(RTCPeerConnection& connection, String&& trackKind, std::unique_ptr<RTCRtpSenderBackend>&& backend) 56 { 57 return adoptRef(*new RTCRtpSender(connection, WTFMove(trackKind), WTFMove(backend))); 58 } 59 60 RTCRtpSender::RTCRtpSender(RTCPeerConnection& connection, String&& trackKind, std::unique_ptr<RTCRtpSenderBackend>&& backend) 61 61 : m_trackKind(WTFMove(trackKind)) 62 , m_mediaStreamIds(WTFMove(mediaStreamIds))63 62 , m_backend(WTFMove(backend)) 64 63 , m_connection(makeWeakPtr(connection)) … … 146 145 } 147 146 return m_backend->setParameters(parameters, WTFMove(promise)); 147 } 148 149 ExceptionOr<void> RTCRtpSender::setStreams(const Vector<std::reference_wrapper<MediaStream>>& streams) 150 { 151 return setMediaStreamIds(WTF::map(streams, [](auto& stream) -> String { 152 return stream.get().id(); 153 })); 154 } 155 156 ExceptionOr<void> RTCRtpSender::setMediaStreamIds(const Vector<String>& streamIds) 157 { 158 if (!m_connection || m_connection->isClosed() || !m_backend) 159 return Exception { InvalidStateError, "connection is closed"_s }; 160 m_backend->setMediaStreamIds(streamIds); 161 return { }; 148 162 } 149 163 -
trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.h
r270107 r270486 43 43 namespace WebCore { 44 44 45 class MediaStream; 45 46 class RTCDTMFSender; 46 47 class RTCPeerConnection; … … 50 51 WTF_MAKE_ISO_ALLOCATED(RTCRtpSender); 51 52 public: 52 static Ref<RTCRtpSender> create(RTCPeerConnection&, Ref<MediaStreamTrack>&&, Vector<String>&& mediaStreamIds,std::unique_ptr<RTCRtpSenderBackend>&&);53 static Ref<RTCRtpSender> create(RTCPeerConnection&, String&& trackKind, Vector<String>&& mediaStreamIds,std::unique_ptr<RTCRtpSenderBackend>&&);53 static Ref<RTCRtpSender> create(RTCPeerConnection&, Ref<MediaStreamTrack>&&, std::unique_ptr<RTCRtpSenderBackend>&&); 54 static Ref<RTCRtpSender> create(RTCPeerConnection&, String&& trackKind, std::unique_ptr<RTCRtpSenderBackend>&&); 54 55 ~RTCRtpSender(); 55 56 … … 61 62 const String& trackKind() const { return m_trackKind; } 62 63 63 const Vector<String>& mediaStreamIds() const { return m_mediaStreamIds; }64 void setMediaStreamIds(Vector<String>&& mediaStreamIds) { m_mediaStreamIds = WTFMove(mediaStreamIds); }64 ExceptionOr<void> setMediaStreamIds(const Vector<String>&); 65 ExceptionOr<void> setStreams(const Vector<std::reference_wrapper<MediaStream>>&); 65 66 66 67 bool isStopped() const { return !m_backend; } … … 87 88 88 89 private: 89 RTCRtpSender(RTCPeerConnection&, String&& trackKind, Vector<String>&& mediaStreamIds,std::unique_ptr<RTCRtpSenderBackend>&&);90 RTCRtpSender(RTCPeerConnection&, String&& trackKind, std::unique_ptr<RTCRtpSenderBackend>&&); 90 91 91 92 RefPtr<MediaStreamTrack> m_track; 92 93 String m_trackId; 93 94 String m_trackKind; 94 Vector<String> m_mediaStreamIds;95 95 std::unique_ptr<RTCRtpSenderBackend> m_backend; 96 96 WeakPtr<RTCPeerConnection> m_connection; -
trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.idl
r267813 r270486 37 37 ] interface RTCRtpSender { 38 38 readonly attribute MediaStreamTrack? track; 39 // FIXME 169662: missing transport 40 // FIXME 169662: missing rtcpTransport 41 // FIXME 169662: missing setStreams 39 // FIXME 169662: readonly attribute RTCDtlsTransport? transport; 42 40 [CallWith=ScriptExecutionContext] static RTCRtpCapabilities? getCapabilities(DOMString kind); 43 41 RTCRtpSendParameters getParameters(); 44 42 Promise<undefined> setParameters(RTCRtpSendParameters parameters); 45 43 Promise<undefined> replaceTrack(MediaStreamTrack? withTrack); 44 [MayThrowException] undefined setStreams(MediaStream... streams); 46 45 Promise<RTCStatsReport> getStats(); 47 46 -
trunk/Source/WebCore/Modules/mediastream/RTCRtpSenderBackend.h
r269764 r270486 27 27 #if ENABLE(WEB_RTC) 28 28 29 #include <wtf/Forward.h> 30 #include <wtf/Vector.h> 31 29 32 namespace WebCore { 30 33 … … 48 51 virtual std::unique_ptr<RTCDTMFSenderBackend> createDTMFBackend() = 0; 49 52 virtual Ref<RTCRtpTransformBackend> createRTCRtpTransformBackend() = 0; 53 virtual void setMediaStreamIds(const Vector<String>&) = 0; 50 54 }; 51 55 -
trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp
r266511 r270486 371 371 backendFromRTPSender(*sender).takeSource(*senderBackend); 372 372 sender->setTrack(makeRef(track)); 373 sender->setMediaStreamIds( WTFMove(mediaStreamIds));373 sender->setMediaStreamIds(mediaStreamIds); 374 374 return sender.releaseNonNull(); 375 375 } … … 377 377 auto transceiverBackend = m_endpoint->transceiverBackendFromSender(*senderBackend); 378 378 379 auto sender = RTCRtpSender::create(m_peerConnection, makeRef(track), WTFMove(mediaStreamIds), WTFMove(senderBackend)); 379 auto sender = RTCRtpSender::create(m_peerConnection, makeRef(track), WTFMove(senderBackend)); 380 sender->setMediaStreamIds(mediaStreamIds); 380 381 auto receiver = createReceiver(transceiverBackend->createReceiverBackend()); 381 382 auto transceiver = RTCRtpTransceiver::create(sender.copyRef(), WTFMove(receiver), WTFMove(transceiverBackend)); … … 391 392 return Exception { InvalidAccessError, "Unable to add transceiver"_s }; 392 393 393 auto sender = RTCRtpSender::create(m_peerConnection, WTFMove(trackOrKind), Vector<String> { },WTFMove(backends->senderBackend));394 auto sender = RTCRtpSender::create(m_peerConnection, WTFMove(trackOrKind), WTFMove(backends->senderBackend)); 394 395 auto receiver = createReceiver(WTFMove(backends->receiverBackend)); 395 396 auto transceiver = RTCRtpTransceiver::create(WTFMove(sender), WTFMove(receiver), WTFMove(backends->transceiverBackend)); … … 429 430 RTCRtpTransceiver& LibWebRTCPeerConnectionBackend::newRemoteTransceiver(std::unique_ptr<LibWebRTCRtpTransceiverBackend>&& transceiverBackend, RealtimeMediaSource::Type type) 430 431 { 431 auto sender = RTCRtpSender::create(m_peerConnection, type == RealtimeMediaSource::Type::Audio ? "audio"_s : "video"_s, Vector<String> { },transceiverBackend->createSenderBackend(*this, nullptr));432 auto sender = RTCRtpSender::create(m_peerConnection, type == RealtimeMediaSource::Type::Audio ? "audio"_s : "video"_s, transceiverBackend->createSenderBackend(*this, nullptr)); 432 433 auto receiver = createReceiver(transceiverBackend->createReceiverBackend()); 433 434 auto transceiver = RTCRtpTransceiver::create(WTFMove(sender), WTFMove(receiver), WTFMove(transceiverBackend)); -
trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp
r269764 r270486 144 144 } 145 145 146 void LibWebRTCRtpSenderBackend::setMediaStreamIds(const Vector<String>& streamIds) 147 { 148 std::vector<std::string> ids; 149 for (auto& id : streamIds) 150 ids.push_back(id.utf8().data()); 151 m_rtcSender->SetStreams(ids); 152 } 153 146 154 RealtimeOutgoingVideoSource* LibWebRTCRtpSenderBackend::videoSource() 147 155 { -
trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h
r269764 r270486 72 72 std::unique_ptr<RTCDTMFSenderBackend> createDTMFBackend() final; 73 73 Ref<RTCRtpTransformBackend> createRTCRtpTransformBackend() final; 74 void setMediaStreamIds(const Vector<String>&) final; 74 75 75 76 void startSource();
Note: See TracChangeset
for help on using the changeset viewer.