Changeset 235719 in webkit
- Timestamp:
- Sep 5, 2018, 9:01:18 PM (8 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 1 added
- 7 edited
-
ChangeLog (modified) (1 diff)
-
Modules/mediastream/PeerConnectionBackend.h (modified) (1 diff)
-
Modules/mediastream/RTCRtpTransceiver.cpp (modified) (3 diffs)
-
Modules/mediastream/RTCRtpTransceiver.h (modified) (5 diffs)
-
Modules/mediastream/RTCRtpTransceiverBackend.h (added)
-
Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp (modified) (6 diffs)
-
Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h (modified) (2 diffs)
-
WebCore.xcodeproj/project.pbxproj (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r235716 r235719 1 2018-09-05 Youenn Fablet <youenn@apple.com> 2 3 Introduce a backend for RTCRtpTransceiver 4 https://bugs.webkit.org/show_bug.cgi?id=189322 5 6 Reviewed by Eric Carlson. 7 8 Introduce RTCRtpTransceiverBackend to implement the transceiver functionality using libwebrtc. 9 Remove provisional mids as it will be done by the webrtc backend. 10 11 No observable change of behavior yet since there is no transceiver backend yet. 12 13 * Modules/mediastream/PeerConnectionBackend.h: 14 * Modules/mediastream/RTCRtpTransceiver.cpp: 15 (WebCore::RTCRtpTransceiver::RTCRtpTransceiver): 16 (WebCore::RTCRtpTransceiver::mid const): 17 (WebCore::RTCRtpTransceiver::direction const): 18 (WebCore::RTCRtpTransceiver::setDirection): 19 (WebCore::RTCRtpTransceiver::stop): 20 (WebCore::RTCRtpTransceiver::getNextMid): Deleted. 21 (WebCore::RTCRtpTransceiver::directionString const): Deleted. 22 * Modules/mediastream/RTCRtpTransceiver.h: 23 (WebCore::RTCRtpTransceiver::create): 24 (WebCore::RTCRtpTransceiver::provisionalMid const): Deleted. 25 (WebCore::RTCRtpTransceiver::setMid): Deleted. 26 * Modules/mediastream/RTCRtpTransceiverBackend.h: Added. 27 * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp: 28 (WebCore::LibWebRTCPeerConnectionBackend::createReceiver): 29 (WebCore::LibWebRTCPeerConnectionBackend::videoReceiver): 30 (WebCore::LibWebRTCPeerConnectionBackend::audioReceiver): 31 (WebCore::LibWebRTCPeerConnectionBackend::addTrack): 32 (WebCore::LibWebRTCPeerConnectionBackend::completeAddTransceiver): 33 * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h: 34 * WebCore.xcodeproj/project.pbxproj: 35 1 36 2018-09-05 Zalan Bujtas <zalan@apple.com> 2 37 -
trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h
r235649 r235719 101 101 virtual void getStats(MediaStreamTrack*, Ref<DeferredPromise>&&) = 0; 102 102 103 virtual Ref<RTCRtpReceiver> createReceiver(const String& transceiverMid, const String& trackKind, const String& trackId) = 0;104 103 virtual ExceptionOr<Ref<RTCRtpSender>> addTrack(RTCRtpSender*, MediaStreamTrack&, const Vector<String>&); 105 104 virtual void removeTrack(RTCRtpSender&) { } -
trunk/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.cpp
r235714 r235719 39 39 namespace WebCore { 40 40 41 #define STRING_FUNCTION(name) \ 42 static const String& name##String() \ 43 { \ 44 static NeverDestroyed<const String> name(MAKE_STATIC_STRING_IMPL(#name)); \ 45 return name; \ 46 } 47 48 STRING_FUNCTION(sendrecv) 49 STRING_FUNCTION(sendonly) 50 STRING_FUNCTION(recvonly) 51 STRING_FUNCTION(inactive) 52 53 String RTCRtpTransceiver::getNextMid() 54 { 55 static unsigned mid = 0; 56 return String::number(++mid); 57 } 58 59 RTCRtpTransceiver::RTCRtpTransceiver(Ref<RTCRtpSender>&& sender, Ref<RTCRtpReceiver>&& receiver) 41 RTCRtpTransceiver::RTCRtpTransceiver(Ref<RTCRtpSender>&& sender, Ref<RTCRtpReceiver>&& receiver, std::unique_ptr<RTCRtpTransceiverBackend>&& backend) 60 42 : m_direction(RTCRtpTransceiverDirection::Sendrecv) 61 43 , m_sender(WTFMove(sender)) 62 44 , m_receiver(WTFMove(receiver)) 63 45 , m_iceTransport(RTCIceTransport::create()) 46 , m_backend(WTFMove(backend)) 64 47 { 65 48 } 66 49 67 const String& RTCRtpTransceiver:: directionString() const50 const String& RTCRtpTransceiver::mid() const 68 51 { 69 switch (m_direction) { 70 case RTCRtpTransceiverDirection::Sendrecv: 71 return sendrecvString(); 72 case RTCRtpTransceiverDirection::Sendonly: 73 return sendonlyString(); 74 case RTCRtpTransceiverDirection::Recvonly: 75 return recvonlyString(); 76 case RTCRtpTransceiverDirection::Inactive: 77 return inactiveString(); 78 } 79 80 ASSERT_NOT_REACHED(); 81 return inactiveString(); 52 if (!m_backend) 53 return m_mid; 54 return m_backend->mid(); 82 55 } 83 56 … … 86 59 return m_direction == RTCRtpTransceiverDirection::Sendrecv || m_direction == RTCRtpTransceiverDirection::Sendonly; 87 60 } 61 62 RTCRtpTransceiverDirection RTCRtpTransceiver::direction() const 63 { 64 if (!m_backend) 65 return m_direction; 66 return m_backend->direction(); 67 } 68 69 void RTCRtpTransceiver::setDirection(RTCRtpTransceiverDirection direction) 70 { 71 m_direction = direction; 72 if (m_backend) 73 m_backend->setDirection(direction); 74 } 75 88 76 89 77 void RTCRtpTransceiver::enableSendingDirection() … … 105 93 void RTCRtpTransceiver::stop() 106 94 { 95 if (m_stopped) 96 return; 107 97 m_stopped = true; 108 98 m_receiver->stop(); 109 99 m_sender->stop(); 100 if (m_backend) 101 m_backend->stop(); 110 102 } 111 103 -
trunk/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.h
r235714 r235719 37 37 #include "RTCRtpReceiver.h" 38 38 #include "RTCRtpSender.h" 39 #include "RTCRtpTransceiverBackend.h" 39 40 #include "RTCRtpTransceiverDirection.h" 40 41 #include "ScriptWrappable.h" … … 47 48 class RTCRtpTransceiver : public RefCounted<RTCRtpTransceiver>, public ScriptWrappable { 48 49 public: 49 static Ref<RTCRtpTransceiver> create(Ref<RTCRtpSender>&& sender, Ref<RTCRtpReceiver>&& receiver ) { return adoptRef(*new RTCRtpTransceiver(WTFMove(sender), WTFMove(receiver))); }50 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))); } 50 51 virtual ~RTCRtpTransceiver() = default; 51 52 … … 54 55 void disableSendingDirection(); 55 56 56 const String& directionString() const; 57 RTCRtpTransceiverDirection direction() const { return m_direction; } 58 // FIXME: setDirection should trigger negotiation needed. 59 void setDirection(RTCRtpTransceiverDirection direction) { m_direction = direction; } 60 61 const String& provisionalMid() const { return m_provisionalMid; } 62 void setProvisionalMid(const String& provisionalMid) { m_provisionalMid = provisionalMid; } 63 64 const String& mid() const { return m_mid; } 65 void setMid(const String& mid) { m_mid = mid; } 57 RTCRtpTransceiverDirection direction() const; 58 void setDirection(RTCRtpTransceiverDirection); 59 const String& mid() const; 66 60 67 61 RTCRtpSender& sender() { return m_sender.get(); } … … 76 70 RTCIceTransport& iceTransport() { return m_iceTransport.get(); } 77 71 78 static String getNextMid(); 72 private: 73 RTCRtpTransceiver(Ref<RTCRtpSender>&&, Ref<RTCRtpReceiver>&&, std::unique_ptr<RTCRtpTransceiverBackend>&&); 79 74 80 private:81 RTCRtpTransceiver(Ref<RTCRtpSender>&&, Ref<RTCRtpReceiver>&&);82 83 String m_provisionalMid;84 75 String m_mid; 85 86 76 RTCRtpTransceiverDirection m_direction; 87 77 … … 92 82 93 83 Ref<RTCIceTransport> m_iceTransport; 84 std::unique_ptr<RTCRtpTransceiverBackend> m_backend; 94 85 }; 95 86 -
trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp
r235682 r235719 236 236 } 237 237 238 Ref<RTCRtpReceiver> LibWebRTCPeerConnectionBackend::createReceiver(const String& , const String&trackKind, const String& trackId)238 Ref<RTCRtpReceiver> LibWebRTCPeerConnectionBackend::createReceiver(const String& trackKind, const String& trackId) 239 239 { 240 240 auto receiver = createReceiverForSource(*m_peerConnection.scriptExecutionContext(), createEmptySource(trackKind, String(trackId))); … … 259 259 260 260 auto senderBackend = std::make_unique<LibWebRTCRtpSenderBackend>(*this, nullptr); 261 auto transceiver = RTCRtpTransceiver::create(RTCRtpSender::create("video", { }, WTFMove(senderBackend)), receiver.copyRef() );261 auto transceiver = RTCRtpTransceiver::create(RTCRtpSender::create("video", { }, WTFMove(senderBackend)), receiver.copyRef(), nullptr); 262 262 transceiver->disableSendingDirection(); 263 263 m_peerConnection.addTransceiver(WTFMove(transceiver)); … … 282 282 283 283 auto senderBackend = std::make_unique<LibWebRTCRtpSenderBackend>(*this, nullptr); 284 auto transceiver = RTCRtpTransceiver::create(RTCRtpSender::create("audio", { }, WTFMove(senderBackend)), receiver.copyRef() );284 auto transceiver = RTCRtpTransceiver::create(RTCRtpSender::create("audio", { }, WTFMove(senderBackend)), receiver.copyRef(), nullptr); 285 285 transceiver->disableSendingDirection(); 286 286 m_peerConnection.addTransceiver(WTFMove(transceiver)); … … 341 341 { 342 342 if (!sender) { 343 String transceiverMid = RTCRtpTransceiver::getNextMid();344 343 const String& trackKind = track.kind(); 345 344 String trackId = createCanonicalUUIDString(); … … 347 346 auto senderBackend = std::make_unique<LibWebRTCRtpSenderBackend>(*this, nullptr); 348 347 auto newSender = RTCRtpSender::create(makeRef(track), Vector<String> { mediaStreamIds }, WTFMove(senderBackend)); 349 auto receiver = createReceiver(transceiverMid, trackKind, trackId); 350 auto transceiver = RTCRtpTransceiver::create(WTFMove(newSender), WTFMove(receiver)); 351 352 // This transceiver is not yet associated with an m-line (null mid), but we need a 353 // provisional mid if the transceiver is used to create an offer. 354 transceiver->setProvisionalMid(transceiverMid); 348 auto receiver = createReceiver(trackKind, trackId); 349 auto transceiver = RTCRtpTransceiver::create(WTFMove(newSender), WTFMove(receiver), nullptr); 355 350 356 351 sender = &transceiver->sender(); … … 384 379 Ref<RTCRtpTransceiver> LibWebRTCPeerConnectionBackend::completeAddTransceiver(Ref<RTCRtpSender>&& sender, const RTCRtpTransceiverInit& init, const String& trackId, const String& trackKind) 385 380 { 386 String transceiverMid = RTCRtpTransceiver::getNextMid(); 387 auto transceiver = RTCRtpTransceiver::create(WTFMove(sender), createReceiver(transceiverMid, trackKind, trackId)); 388 389 transceiver->setProvisionalMid(transceiverMid); 381 auto transceiver = RTCRtpTransceiver::create(WTFMove(sender), createReceiver(trackKind, trackId), nullptr); 382 390 383 transceiver->setDirection(init.direction); 391 384 -
trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h
r235682 r235719 70 70 bool setConfiguration(MediaEndpointConfiguration&&) final; 71 71 void getStats(MediaStreamTrack*, Ref<DeferredPromise>&&) final; 72 Ref<RTCRtpReceiver> createReceiver(const String& transceiverMid, const String& trackKind, const String& trackId) final;73 72 74 73 RefPtr<RTCSessionDescription> localDescription() const final; … … 114 113 115 114 void enqueueReplaceTrackTask(RTCRtpSender&, RefPtr<MediaStreamTrack>&&, DOMPromiseDeferred<void>&&); 115 Ref<RTCRtpReceiver> createReceiver(const String& trackKind, const String& trackId); 116 116 117 117 Ref<LibWebRTCMediaEndpoint> m_endpoint; -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r235659 r235719 7284 7284 4186BD3B213EDE380001826F /* LibWebRTCRtpReceiverBackend.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = LibWebRTCRtpReceiverBackend.h; path = libwebrtc/LibWebRTCRtpReceiverBackend.h; sourceTree = "<group>"; }; 7285 7285 4186BD3D213EDE390001826F /* LibWebRTCRtpSenderBackend.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = LibWebRTCRtpSenderBackend.h; path = libwebrtc/LibWebRTCRtpSenderBackend.h; sourceTree = "<group>"; }; 7286 4186BD46214072B60001826F /* RTCRtpTransceiverBackend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCRtpTransceiverBackend.h; sourceTree = "<group>"; }; 7286 7287 41885B9111B6FDA6003383BB /* FormSubmission.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FormSubmission.h; sourceTree = "<group>"; }; 7287 7288 41885B9211B6FDA6003383BB /* FormSubmission.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FormSubmission.cpp; sourceTree = "<group>"; }; … … 15170 15171 5E5E2B111CFC3E4B000C0D85 /* RTCRtpTransceiver.h */, 15171 15172 5E5E2B121CFC3E4B000C0D85 /* RTCRtpTransceiver.idl */, 15173 4186BD46214072B60001826F /* RTCRtpTransceiverBackend.h */, 15172 15174 316DCB171E78C330001B5F87 /* RTCRtpTransceiverDirection.idl */, 15173 15175 07221B7A17CEC32700848E51 /* RTCSessionDescription.cpp */,
Note:
See TracChangeset
for help on using the changeset viewer.