⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 235719 in webkit


Ignore:
Timestamp:
Sep 5, 2018, 9:01:18 PM (8 years ago)
Author:
youenn@apple.com
Message:

Introduce a backend for RTCRtpTransceiver
​https://bugs.webkit.org/show_bug.cgi?id=189322

Reviewed by Eric Carlson.

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:
Location:
trunk/Source/WebCore
Files:
1 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r235716 r235719  
     12018-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
    1362018-09-05  Zalan Bujtas  <zalan@apple.com>
    237
  • trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h

    r235649 r235719  
    101101    virtual void getStats(MediaStreamTrack*, Ref<DeferredPromise>&&) = 0;
    102102
    103     virtual Ref<RTCRtpReceiver> createReceiver(const String& transceiverMid, const String& trackKind, const String& trackId) = 0;
    104103    virtual ExceptionOr<Ref<RTCRtpSender>> addTrack(RTCRtpSender*, MediaStreamTrack&, const Vector<String>&);
    105104    virtual void removeTrack(RTCRtpSender&) { }
  • trunk/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.cpp

    r235714 r235719  
    3939namespace WebCore {
    4040
    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)
     41RTCRtpTransceiver::RTCRtpTransceiver(Ref<RTCRtpSender>&& sender, Ref<RTCRtpReceiver>&& receiver, std::unique_ptr<RTCRtpTransceiverBackend>&& backend)
    6042    : m_direction(RTCRtpTransceiverDirection::Sendrecv)
    6143    , m_sender(WTFMove(sender))
    6244    , m_receiver(WTFMove(receiver))
    6345    , m_iceTransport(RTCIceTransport::create())
     46    , m_backend(WTFMove(backend))
    6447{
    6548}
    6649
    67 const String& RTCRtpTransceiver::directionString() const
     50const String& RTCRtpTransceiver::mid() const
    6851{
    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();
    8255}
    8356
    … …  
    8659    return m_direction == RTCRtpTransceiverDirection::Sendrecv || m_direction == RTCRtpTransceiverDirection::Sendonly;
    8760}
     61
     62RTCRtpTransceiverDirection RTCRtpTransceiver::direction() const
     63{
     64    if (!m_backend)
     65        return m_direction;
     66    return m_backend->direction();
     67}
     68
     69void RTCRtpTransceiver::setDirection(RTCRtpTransceiverDirection direction)
     70{
     71    m_direction = direction;
     72    if (m_backend)
     73        m_backend->setDirection(direction);
     74}
     75
    8876
    8977void RTCRtpTransceiver::enableSendingDirection()
    … …  
    10593void RTCRtpTransceiver::stop()
    10694{
     95    if (m_stopped)
     96        return;
    10797    m_stopped = true;
    10898    m_receiver->stop();
    10999    m_sender->stop();
     100    if (m_backend)
     101        m_backend->stop();
    110102}
    111103
  • trunk/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.h

    r235714 r235719  
    3737#include "RTCRtpReceiver.h"
    3838#include "RTCRtpSender.h"
     39#include "RTCRtpTransceiverBackend.h"
    3940#include "RTCRtpTransceiverDirection.h"
    4041#include "ScriptWrappable.h"
    … …  
    4748class RTCRtpTransceiver : public RefCounted<RTCRtpTransceiver>, public ScriptWrappable {
    4849public:
    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))); }
    5051    virtual ~RTCRtpTransceiver() = default;
    5152
    … …  
    5455    void disableSendingDirection();
    5556
    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;
    6660
    6761    RTCRtpSender& sender() { return m_sender.get(); }
    … …  
    7670    RTCIceTransport& iceTransport() { return m_iceTransport.get(); }
    7771
    78     static String getNextMid();
     72private:
     73    RTCRtpTransceiver(Ref<RTCRtpSender>&&, Ref<RTCRtpReceiver>&&, std::unique_ptr<RTCRtpTransceiverBackend>&&);
    7974
    80 private:
    81     RTCRtpTransceiver(Ref<RTCRtpSender>&&, Ref<RTCRtpReceiver>&&);
    82 
    83     String m_provisionalMid;
    8475    String m_mid;
    85 
    8676    RTCRtpTransceiverDirection m_direction;
    8777
    … …  
    9282
    9383    Ref<RTCIceTransport> m_iceTransport;
     84    std::unique_ptr<RTCRtpTransceiverBackend> m_backend;
    9485};
    9586
  • trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp

    r235682 r235719  
    236236}
    237237
    238 Ref<RTCRtpReceiver> LibWebRTCPeerConnectionBackend::createReceiver(const String&, const String& trackKind, const String& trackId)
     238Ref<RTCRtpReceiver> LibWebRTCPeerConnectionBackend::createReceiver(const String& trackKind, const String& trackId)
    239239{
    240240    auto receiver = createReceiverForSource(*m_peerConnection.scriptExecutionContext(), createEmptySource(trackKind, String(trackId)));
    … …  
    259259
    260260    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);
    262262    transceiver->disableSendingDirection();
    263263    m_peerConnection.addTransceiver(WTFMove(transceiver));
    … …  
    282282
    283283    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);
    285285    transceiver->disableSendingDirection();
    286286    m_peerConnection.addTransceiver(WTFMove(transceiver));
    … …  
    341341{
    342342    if (!sender) {
    343         String transceiverMid = RTCRtpTransceiver::getNextMid();
    344343        const String& trackKind = track.kind();
    345344        String trackId = createCanonicalUUIDString();
    … …  
    347346        auto senderBackend = std::make_unique<LibWebRTCRtpSenderBackend>(*this, nullptr);
    348347        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);
    355350
    356351        sender = &transceiver->sender();
    … …  
    384379Ref<RTCRtpTransceiver> LibWebRTCPeerConnectionBackend::completeAddTransceiver(Ref<RTCRtpSender>&& sender, const RTCRtpTransceiverInit& init, const String& trackId, const String& trackKind)
    385380{
    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
    390383    transceiver->setDirection(init.direction);
    391384
  • trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h

    r235682 r235719  
    7070    bool setConfiguration(MediaEndpointConfiguration&&) final;
    7171    void getStats(MediaStreamTrack*, Ref<DeferredPromise>&&) final;
    72     Ref<RTCRtpReceiver> createReceiver(const String& transceiverMid, const String& trackKind, const String& trackId) final;
    7372
    7473    RefPtr<RTCSessionDescription> localDescription() const final;
    … …  
    114113
    115114    void enqueueReplaceTrackTask(RTCRtpSender&, RefPtr<MediaStreamTrack>&&, DOMPromiseDeferred<void>&&);
     115    Ref<RTCRtpReceiver> createReceiver(const String& trackKind, const String& trackId);
    116116
    117117    Ref<LibWebRTCMediaEndpoint> m_endpoint;
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r235659 r235719  
    72847284                4186BD3B213EDE380001826F /* LibWebRTCRtpReceiverBackend.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = LibWebRTCRtpReceiverBackend.h; path = libwebrtc/LibWebRTCRtpReceiverBackend.h; sourceTree = "<group>"; };
    72857285                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>"; };
    72867287                41885B9111B6FDA6003383BB /* FormSubmission.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FormSubmission.h; sourceTree = "<group>"; };
    72877288                41885B9211B6FDA6003383BB /* FormSubmission.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FormSubmission.cpp; sourceTree = "<group>"; };
    … …  
    1517015171                                5E5E2B111CFC3E4B000C0D85 /* RTCRtpTransceiver.h */,
    1517115172                                5E5E2B121CFC3E4B000C0D85 /* RTCRtpTransceiver.idl */,
     15173                                4186BD46214072B60001826F /* RTCRtpTransceiverBackend.h */,
    1517215174                                316DCB171E78C330001B5F87 /* RTCRtpTransceiverDirection.idl */,
    1517315175                                07221B7A17CEC32700848E51 /* RTCSessionDescription.cpp */,
Note: See TracChangeset for help on using the changeset viewer.