WebKit Bugzilla
Attachment 348979 Details for
Bug 189322
: Introduce a backend for RTCRtpTransceiver
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-189322-20180905162814.patch (text/plain), 18.59 KB, created by
youenn fablet
on 2018-09-05 16:28:15 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
youenn fablet
Created:
2018-09-05 16:28:15 PDT
Size:
18.59 KB
patch
obsolete
>Subversion Revision: 235714 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 99072acb92685dde08ba0ebe077c4d5d643d1ffd..256f26ace2fad3440caa8463ed03b3f40d92811a 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,38 @@ >+2018-09-05 Youenn Fablet <youenn@apple.com> >+ >+ Introduce a backend for RTCRtpTransceiver >+ https://bugs.webkit.org/show_bug.cgi?id=189322 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Introduce RTCRtpTransceiverBackend to implement the transceiver functionality using libwebrtc. >+ Remove provisional mids as it will be done by the webrtc backend. >+ >+ No observable change of behavior yet since there is no transceiver backend yet. >+ >+ * Modules/mediastream/PeerConnectionBackend.h: >+ * Modules/mediastream/RTCRtpTransceiver.cpp: >+ (WebCore::RTCRtpTransceiver::RTCRtpTransceiver): >+ (WebCore::RTCRtpTransceiver::mid const): >+ (WebCore::RTCRtpTransceiver::direction const): >+ (WebCore::RTCRtpTransceiver::setDirection): >+ (WebCore::RTCRtpTransceiver::stop): >+ (WebCore::RTCRtpTransceiver::getNextMid): Deleted. >+ (WebCore::RTCRtpTransceiver::directionString const): Deleted. >+ * Modules/mediastream/RTCRtpTransceiver.h: >+ (WebCore::RTCRtpTransceiver::create): >+ (WebCore::RTCRtpTransceiver::provisionalMid const): Deleted. >+ (WebCore::RTCRtpTransceiver::setMid): Deleted. >+ * Modules/mediastream/RTCRtpTransceiverBackend.h: Added. >+ * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp: >+ (WebCore::LibWebRTCPeerConnectionBackend::createReceiver): >+ (WebCore::LibWebRTCPeerConnectionBackend::videoReceiver): >+ (WebCore::LibWebRTCPeerConnectionBackend::audioReceiver): >+ (WebCore::LibWebRTCPeerConnectionBackend::addTrack): >+ (WebCore::LibWebRTCPeerConnectionBackend::completeAddTransceiver): >+ * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h: >+ * WebCore.xcodeproj/project.pbxproj: >+ > 2018-09-05 Youenn Fablet <youenn@apple.com> > > Expose RTCRtpSender.setParameters >diff --git a/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h b/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h >index 6292de8613ace3c05b58b5abf9b65102717857ad..bc6d2f6f3b95f44dff2b64ae2bb24c159668be1c 100644 >--- a/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h >+++ b/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h >@@ -100,7 +100,6 @@ public: > > virtual void getStats(MediaStreamTrack*, Ref<DeferredPromise>&&) = 0; > >- virtual Ref<RTCRtpReceiver> createReceiver(const String& transceiverMid, const String& trackKind, const String& trackId) = 0; > virtual ExceptionOr<Ref<RTCRtpSender>> addTrack(RTCRtpSender*, MediaStreamTrack&, const Vector<String>&); > virtual void removeTrack(RTCRtpSender&) { } > >diff --git a/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.cpp b/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.cpp >index ad4c171667eacb0318de44377223fa08a5a4a4f2..674b321cee1388e2e7f28eecff9f013593467ab1 100644 >--- a/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.cpp >+++ b/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.cpp >@@ -38,47 +38,20 @@ > > namespace WebCore { > >-#define STRING_FUNCTION(name) \ >- static const String& name##String() \ >- { \ >- static NeverDestroyed<const String> name(MAKE_STATIC_STRING_IMPL(#name)); \ >- return name; \ >- } >- >-STRING_FUNCTION(sendrecv) >-STRING_FUNCTION(sendonly) >-STRING_FUNCTION(recvonly) >-STRING_FUNCTION(inactive) >- >-String RTCRtpTransceiver::getNextMid() >-{ >- static unsigned mid = 0; >- return String::number(++mid); >-} >- >-RTCRtpTransceiver::RTCRtpTransceiver(Ref<RTCRtpSender>&& sender, Ref<RTCRtpReceiver>&& receiver) >+RTCRtpTransceiver::RTCRtpTransceiver(Ref<RTCRtpSender>&& sender, Ref<RTCRtpReceiver>&& receiver, std::unique_ptr<RTCRtpTransceiverBackend>&& backend) > : m_direction(RTCRtpTransceiverDirection::Sendrecv) > , m_sender(WTFMove(sender)) > , m_receiver(WTFMove(receiver)) > , m_iceTransport(RTCIceTransport::create()) >+ , m_backend(WTFMove(backend)) > { > } > >-const String& RTCRtpTransceiver::directionString() const >+const String& RTCRtpTransceiver::mid() const > { >- switch (m_direction) { >- case RTCRtpTransceiverDirection::Sendrecv: >- return sendrecvString(); >- case RTCRtpTransceiverDirection::Sendonly: >- return sendonlyString(); >- case RTCRtpTransceiverDirection::Recvonly: >- return recvonlyString(); >- case RTCRtpTransceiverDirection::Inactive: >- return inactiveString(); >- } >- >- ASSERT_NOT_REACHED(); >- return inactiveString(); >+ if (!m_backend) >+ return m_mid; >+ return m_backend->mid(); > } > > bool RTCRtpTransceiver::hasSendingDirection() const >@@ -86,6 +59,21 @@ bool RTCRtpTransceiver::hasSendingDirection() const > return m_direction == RTCRtpTransceiverDirection::Sendrecv || m_direction == RTCRtpTransceiverDirection::Sendonly; > } > >+RTCRtpTransceiverDirection RTCRtpTransceiver::direction() const >+{ >+ if (!m_backend) >+ return m_direction; >+ return m_backend->direction(); >+} >+ >+void RTCRtpTransceiver::setDirection(RTCRtpTransceiverDirection direction) >+{ >+ m_direction = direction; >+ if (m_backend) >+ m_backend->setDirection(direction); >+} >+ >+ > void RTCRtpTransceiver::enableSendingDirection() > { > if (m_direction == RTCRtpTransceiverDirection::Recvonly) >@@ -104,9 +92,13 @@ void RTCRtpTransceiver::disableSendingDirection() > > void RTCRtpTransceiver::stop() > { >+ if (m_stopped) >+ return; > m_stopped = true; > m_receiver->stop(); > m_sender->stop(); >+ if (m_backend) >+ m_backend->stop(); > } > > void RtpTransceiverSet::append(Ref<RTCRtpTransceiver>&& transceiver) >diff --git a/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.h b/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.h >index 3e71be7933e44b0624c2a161cc5eb65e56f631d2..802672b50709bb3d3f3bb2e37a760f98fb28fc47 100644 >--- a/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.h >+++ b/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.h >@@ -36,6 +36,7 @@ > #include "RTCIceTransport.h" > #include "RTCRtpReceiver.h" > #include "RTCRtpSender.h" >+#include "RTCRtpTransceiverBackend.h" > #include "RTCRtpTransceiverDirection.h" > #include "ScriptWrappable.h" > #include <wtf/RefCounted.h> >@@ -46,23 +47,16 @@ namespace WebCore { > > class RTCRtpTransceiver : public RefCounted<RTCRtpTransceiver>, public ScriptWrappable { > public: >- static Ref<RTCRtpTransceiver> create(Ref<RTCRtpSender>&& sender, Ref<RTCRtpReceiver>&& receiver) { return adoptRef(*new RTCRtpTransceiver(WTFMove(sender), WTFMove(receiver))); } >+ static Ref<RTCRtpTransceiver> create(Ref<RTCRtpSender>&& sender, Ref<RTCRtpReceiver>&& receiver, std::unique_ptr<RTCRtpTransceiverBackend>&& backend) { return adoptRef(*new RTCRtpTransceiver(WTFMove(sender), WTFMove(receiver), WTFMove(backend))); } > virtual ~RTCRtpTransceiver() = default; > > bool hasSendingDirection() const; > void enableSendingDirection(); > void disableSendingDirection(); > >- const String& directionString() const; >- RTCRtpTransceiverDirection direction() const { return m_direction; } >- // FIXME: setDirection should trigger negotiation needed. >- void setDirection(RTCRtpTransceiverDirection direction) { m_direction = direction; } >- >- const String& provisionalMid() const { return m_provisionalMid; } >- void setProvisionalMid(const String& provisionalMid) { m_provisionalMid = provisionalMid; } >- >- const String& mid() const { return m_mid; } >- void setMid(const String& mid) { m_mid = mid; } >+ RTCRtpTransceiverDirection direction() const; >+ void setDirection(RTCRtpTransceiverDirection); >+ const String& mid() const; > > RTCRtpSender& sender() { return m_sender.get(); } > RTCRtpReceiver& receiver() { return m_receiver.get(); } >@@ -75,14 +69,10 @@ public: > // transport each. > RTCIceTransport& iceTransport() { return m_iceTransport.get(); } > >- static String getNextMid(); >- > private: >- RTCRtpTransceiver(Ref<RTCRtpSender>&&, Ref<RTCRtpReceiver>&&); >+ RTCRtpTransceiver(Ref<RTCRtpSender>&&, Ref<RTCRtpReceiver>&&, std::unique_ptr<RTCRtpTransceiverBackend>&&); > >- String m_provisionalMid; > String m_mid; >- > RTCRtpTransceiverDirection m_direction; > > Ref<RTCRtpSender> m_sender; >@@ -91,6 +81,7 @@ private: > bool m_stopped { false }; > > Ref<RTCIceTransport> m_iceTransport; >+ std::unique_ptr<RTCRtpTransceiverBackend> m_backend; > }; > > class RtpTransceiverSet { >diff --git a/Source/WebCore/Modules/mediastream/RTCRtpTransceiverBackend.h b/Source/WebCore/Modules/mediastream/RTCRtpTransceiverBackend.h >new file mode 100644 >index 0000000000000000000000000000000000000000..8dfdf968aec278d9688b7711cd1aab1af6f1b0ae >--- /dev/null >+++ b/Source/WebCore/Modules/mediastream/RTCRtpTransceiverBackend.h >@@ -0,0 +1,46 @@ >+/* >+ * Copyright (C) 2018 Apple Inc. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED >+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE >+ * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY >+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES >+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; >+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON >+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS >+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+ >+#pragma once >+ >+#if ENABLE(WEB_RTC) >+ >+#include "RTCRtpTransceiverDirection.h" >+ >+namespace WebCore { >+ >+class RTCRtpTransceiverBackend { >+public: >+ virtual ~RTCRtpTransceiverBackend() = default; >+ >+ virtual RTCRtpTransceiverDirection direction() const = 0; >+ virtual void setDirection(RTCRtpTransceiverDirection) = 0; >+ >+ virtual const String& mid() = 0; >+ virtual void stop() = 0; >+}; >+ >+} // namespace WebCore >+ >+#endif // ENABLE(WEB_RTC) >diff --git a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp >index 6205a02c4254bdebbda9fa3b1985e2946fefda46..5823d546f8d02df97ddd4b42b44fd0131ef019ae 100644 >--- a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp >+++ b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp >@@ -235,7 +235,7 @@ static inline Ref<RealtimeMediaSource> createEmptySource(const String& trackKind > return RealtimeIncomingVideoSource::create(nullptr, WTFMove(trackId)); > } > >-Ref<RTCRtpReceiver> LibWebRTCPeerConnectionBackend::createReceiver(const String&, const String& trackKind, const String& trackId) >+Ref<RTCRtpReceiver> LibWebRTCPeerConnectionBackend::createReceiver(const String& trackKind, const String& trackId) > { > auto receiver = createReceiverForSource(*m_peerConnection.scriptExecutionContext(), createEmptySource(trackKind, String(trackId))); > m_pendingReceivers.append(receiver.copyRef()); >@@ -258,7 +258,7 @@ LibWebRTCPeerConnectionBackend::VideoReceiver LibWebRTCPeerConnectionBackend::vi > auto receiver = createReceiverForSource(*m_peerConnection.scriptExecutionContext(), source.copyRef()); > > auto senderBackend = std::make_unique<LibWebRTCRtpSenderBackend>(*this, nullptr); >- auto transceiver = RTCRtpTransceiver::create(RTCRtpSender::create("video", { }, WTFMove(senderBackend)), receiver.copyRef()); >+ auto transceiver = RTCRtpTransceiver::create(RTCRtpSender::create("video", { }, WTFMove(senderBackend)), receiver.copyRef(), nullptr); > transceiver->disableSendingDirection(); > m_peerConnection.addTransceiver(WTFMove(transceiver)); > >@@ -281,7 +281,7 @@ LibWebRTCPeerConnectionBackend::AudioReceiver LibWebRTCPeerConnectionBackend::au > auto receiver = createReceiverForSource(*m_peerConnection.scriptExecutionContext(), source.copyRef()); > > auto senderBackend = std::make_unique<LibWebRTCRtpSenderBackend>(*this, nullptr); >- auto transceiver = RTCRtpTransceiver::create(RTCRtpSender::create("audio", { }, WTFMove(senderBackend)), receiver.copyRef()); >+ auto transceiver = RTCRtpTransceiver::create(RTCRtpSender::create("audio", { }, WTFMove(senderBackend)), receiver.copyRef(), nullptr); > transceiver->disableSendingDirection(); > m_peerConnection.addTransceiver(WTFMove(transceiver)); > >@@ -340,18 +340,13 @@ static inline LibWebRTCRtpSenderBackend& backendFromRTPSender(RTCRtpSender& send > ExceptionOr<Ref<RTCRtpSender>> LibWebRTCPeerConnectionBackend::addTrack(RTCRtpSender* sender, MediaStreamTrack& track, const Vector<String>& mediaStreamIds) > { > if (!sender) { >- String transceiverMid = RTCRtpTransceiver::getNextMid(); > const String& trackKind = track.kind(); > String trackId = createCanonicalUUIDString(); > > auto senderBackend = std::make_unique<LibWebRTCRtpSenderBackend>(*this, nullptr); > auto newSender = RTCRtpSender::create(makeRef(track), Vector<String> { mediaStreamIds }, WTFMove(senderBackend)); >- auto receiver = createReceiver(transceiverMid, trackKind, trackId); >- auto transceiver = RTCRtpTransceiver::create(WTFMove(newSender), WTFMove(receiver)); >- >- // This transceiver is not yet associated with an m-line (null mid), but we need a >- // provisional mid if the transceiver is used to create an offer. >- transceiver->setProvisionalMid(transceiverMid); >+ auto receiver = createReceiver(trackKind, trackId); >+ auto transceiver = RTCRtpTransceiver::create(WTFMove(newSender), WTFMove(receiver), nullptr); > > sender = &transceiver->sender(); > m_peerConnection.addInternalTransceiver(WTFMove(transceiver)); >@@ -383,10 +378,8 @@ ExceptionOr<Ref<RTCRtpTransceiver>> LibWebRTCPeerConnectionBackend::addTransceiv > > Ref<RTCRtpTransceiver> LibWebRTCPeerConnectionBackend::completeAddTransceiver(Ref<RTCRtpSender>&& sender, const RTCRtpTransceiverInit& init, const String& trackId, const String& trackKind) > { >- String transceiverMid = RTCRtpTransceiver::getNextMid(); >- auto transceiver = RTCRtpTransceiver::create(WTFMove(sender), createReceiver(transceiverMid, trackKind, trackId)); >+ auto transceiver = RTCRtpTransceiver::create(WTFMove(sender), createReceiver(trackKind, trackId), nullptr); > >- transceiver->setProvisionalMid(transceiverMid); > transceiver->setDirection(init.direction); > > m_peerConnection.addInternalTransceiver(transceiver.copyRef()); >diff --git a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h >index 64e609c260504f02f790366be0a043b8a1b02c04..40dd12f3e64a5a0ec767fe11c00b1d39fa789ced 100644 >--- a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h >+++ b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h >@@ -69,7 +69,6 @@ private: > std::unique_ptr<RTCDataChannelHandler> createDataChannelHandler(const String&, const RTCDataChannelInit&) final; > bool setConfiguration(MediaEndpointConfiguration&&) final; > void getStats(MediaStreamTrack*, Ref<DeferredPromise>&&) final; >- Ref<RTCRtpReceiver> createReceiver(const String& transceiverMid, const String& trackKind, const String& trackId) final; > > RefPtr<RTCSessionDescription> localDescription() const final; > RefPtr<RTCSessionDescription> currentLocalDescription() const final; >@@ -113,6 +112,7 @@ private: > Ref<RTCRtpTransceiver> completeAddTransceiver(Ref<RTCRtpSender>&&, const RTCRtpTransceiverInit&, const String& trackId, const String& trackKind); > > void enqueueReplaceTrackTask(RTCRtpSender&, RefPtr<MediaStreamTrack>&&, DOMPromiseDeferred<void>&&); >+ Ref<RTCRtpReceiver> createReceiver(const String& trackKind, const String& trackId); > > Ref<LibWebRTCMediaEndpoint> m_endpoint; > bool m_isLocalDescriptionSet { false }; >diff --git a/Source/WebCore/WebCore.xcodeproj/project.pbxproj b/Source/WebCore/WebCore.xcodeproj/project.pbxproj >index a6452ca2d8942613b83936ece08b3253671b8db0..78c0819f2ce0ca21f42482c00a754033349212cd 100644 >--- a/Source/WebCore/WebCore.xcodeproj/project.pbxproj >+++ b/Source/WebCore/WebCore.xcodeproj/project.pbxproj >@@ -7283,6 +7283,7 @@ > 4184F5151EAF059800F18BF0 /* OrientationNotifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OrientationNotifier.h; sourceTree = "<group>"; }; > 4186BD3B213EDE380001826F /* LibWebRTCRtpReceiverBackend.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = LibWebRTCRtpReceiverBackend.h; path = libwebrtc/LibWebRTCRtpReceiverBackend.h; sourceTree = "<group>"; }; > 4186BD3D213EDE390001826F /* LibWebRTCRtpSenderBackend.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = LibWebRTCRtpSenderBackend.h; path = libwebrtc/LibWebRTCRtpSenderBackend.h; sourceTree = "<group>"; }; >+ 4186BD46214072B60001826F /* RTCRtpTransceiverBackend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCRtpTransceiverBackend.h; sourceTree = "<group>"; }; > 41885B9111B6FDA6003383BB /* FormSubmission.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FormSubmission.h; sourceTree = "<group>"; }; > 41885B9211B6FDA6003383BB /* FormSubmission.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FormSubmission.cpp; sourceTree = "<group>"; }; > 418A06CE133C04D500CD379C /* EventDispatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EventDispatcher.h; sourceTree = "<group>"; }; >@@ -15169,6 +15170,7 @@ > 5E5E2B101CFC3E4B000C0D85 /* RTCRtpTransceiver.cpp */, > 5E5E2B111CFC3E4B000C0D85 /* RTCRtpTransceiver.h */, > 5E5E2B121CFC3E4B000C0D85 /* RTCRtpTransceiver.idl */, >+ 4186BD46214072B60001826F /* RTCRtpTransceiverBackend.h */, > 316DCB171E78C330001B5F87 /* RTCRtpTransceiverDirection.idl */, > 07221B7A17CEC32700848E51 /* RTCSessionDescription.cpp */, > 07221B7B17CEC32700848E51 /* RTCSessionDescription.h */,
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 189322
: 348979 |
348988