Changeset 201549 in webkit
- Timestamp:
- Jun 1, 2016 3:06:39 AM (8 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 24 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r201545 r201549 1 2016-06-01 Adam Bergkvist <adam.bergkvist@ericsson.com> 2 3 WebRTC: Add RTCRtpTransceiver interface and RTCPeerConnection.addTransceiver() 4 https://bugs.webkit.org/show_bug.cgi?id=158189 5 6 Reviewed by Darin Adler. 7 8 Added test for RTCPeerConnection.addTransceiver(). 9 10 * fast/mediastream/RTCPeerConnection-addTransceiver-expected.txt: Added. 11 * fast/mediastream/RTCPeerConnection-addTransceiver.html: Added. 12 Test creating several RTCRtpTransceivers with various configurations and inspect the result. 13 * platform/mac/TestExpectations: 14 Skip the new test since the Mac port currently doesn't build with WebRTC support. 15 1 16 2016-06-01 Manuel Rego Casasnovas <rego@igalia.com> 2 17 -
trunk/LayoutTests/platform/mac/TestExpectations
r201522 r201549 188 188 fast/mediastream/RTCPeerConnection-overloaded-operations-params.html 189 189 fast/mediastream/RTCPeerConnection-overloaded-operations.html 190 fast/mediastream/RTCPeerConnection-addTransceiver.html 190 191 fast/mediastream/RTCRtpSender-replaceTrack.html 191 192 fast/mediastream/RTCSessionDescription.html -
trunk/Source/WebCore/CMakeLists.txt
r201504 r201549 236 236 Modules/mediastream/RTCRtpReceiver.idl 237 237 Modules/mediastream/RTCRtpSender.idl 238 Modules/mediastream/RTCRtpTransceiver.idl 238 239 Modules/mediastream/RTCSessionDescription.idl 239 240 Modules/mediastream/RTCStatsReport.idl … … 931 932 Modules/mediastream/RTCRtpReceiver.cpp 932 933 Modules/mediastream/RTCRtpSender.cpp 934 Modules/mediastream/RTCRtpTransceiver.cpp 933 935 Modules/mediastream/RTCSessionDescription.cpp 934 936 Modules/mediastream/RTCStatsReport.cpp -
trunk/Source/WebCore/ChangeLog
r201547 r201549 1 2016-06-01 Adam Bergkvist <adam.bergkvist@ericsson.com> 2 3 WebRTC: Add RTCRtpTransceiver interface and RTCPeerConnection.addTransceiver() 4 https://bugs.webkit.org/show_bug.cgi?id=158189 5 6 Reviewed by Darin Adler. 7 8 The RTCRtpTransceiver interface represents a combination of an RTCRtpSender and an 9 RTCRtpReceiver that share a common mid [1]. 10 11 RTCPeerConnection.addTransceiver() [2] creates an RTCRtpTransceiver object, either directly 12 from a MediaStreamTrack [3], or with a specific media type (kind). 13 14 This change introduces the RTCRtpTransceiver object, follow-up patches will integrate it 15 into the offer/answer machinery. 16 17 [1] https://w3c.github.io/webrtc-pc/archives/20160513/webrtc.html#rtcrtptransceiver-interface 18 [2] https://w3c.github.io/webrtc-pc/archives/20160513/webrtc.html#dom-rtcpeerconnection-addtransceiver 19 [3] http://w3c.github.io/mediacapture-main/archives/20160513/getusermedia.html#mediastreamtrack 20 21 Test: fast/mediastream/RTCPeerConnection-addTransceiver.html 22 23 * CMakeLists.txt: 24 * Modules/mediastream/MediaEndpointPeerConnection.cpp: 25 (WebCore::MediaEndpointPeerConnection::createOfferTask): 26 (WebCore::MediaEndpointPeerConnection::createReceiver): 27 An RTCTransceiver always has a receiver (RTCRtpReceiver) with a track (MediaStreamTrack) that 28 can be rendered. Before that remote track is receiving data from the remote peer, it's muted. 29 createReceiver() uses MediaEndponit::createMutedRemoteSource() to create a source to represent 30 future incoming media. 31 * Modules/mediastream/MediaEndpointPeerConnection.h: 32 * Modules/mediastream/PeerConnectionBackend.h: 33 * Modules/mediastream/RTCPeerConnection.cpp: 34 (WebCore::RTCPeerConnection::addTransceiver): 35 (WebCore::RTCPeerConnection::completeAddTransceiver): 36 (WebCore::RTCPeerConnection::addReceiver): Deleted. 37 We now create the receiver explicitly with createReceiver. 38 * Modules/mediastream/RTCPeerConnection.h: 39 * Modules/mediastream/RTCPeerConnection.idl: 40 * Modules/mediastream/RTCRtpSender.cpp: 41 (WebCore::RTCRtpSender::create): 42 (WebCore::RTCRtpSender::RTCRtpSender): 43 (WebCore::RTCRtpSender::setTrack): 44 (WebCore::RTCRtpSender::replaceTrack): 45 * Modules/mediastream/RTCRtpSender.h: 46 (WebCore::RTCRtpSender::trackId): 47 (WebCore::RTCRtpSender::trackKind): 48 (WebCore::RTCRtpSender::setMediaStreamIds): 49 (WebCore::RTCRtpSender::isStopped): 50 (WebCore::RTCRtpSender::create): Deleted. 51 * Modules/mediastream/RTCRtpSenderReceiverBase.h: 52 (WebCore::RTCRtpSenderReceiverBase::track): 53 (WebCore::RTCRtpSenderReceiverBase::RTCRtpSenderReceiverBase): 54 * Modules/mediastream/RTCRtpTransceiver.cpp: Added. 55 (WebCore::RTCRtpTransceiver::create): 56 (WebCore::RTCRtpTransceiver::getNextMid): 57 (WebCore::RTCRtpTransceiver::RTCRtpTransceiver): 58 (WebCore::RTCRtpTransceiver::directionString): 59 (WebCore::RTCRtpTransceiver::hasSendingDirection): 60 (WebCore::RTCRtpTransceiver::enableSendingDirection): 61 (WebCore::RTCRtpTransceiver::disableSendingDirection): 62 * Modules/mediastream/RTCRtpTransceiver.h: Added. 63 (WebCore::RTCRtpTransceiver::~RTCRtpTransceiver): 64 (WebCore::RTCRtpTransceiver::direction): 65 (WebCore::RTCRtpTransceiver::setDirection): 66 (WebCore::RTCRtpTransceiver::provisionalMid): 67 (WebCore::RTCRtpTransceiver::setProvisionalMid): 68 (WebCore::RTCRtpTransceiver::mid): 69 (WebCore::RTCRtpTransceiver::setMid): 70 (WebCore::RTCRtpTransceiver::sender): 71 (WebCore::RTCRtpTransceiver::receiver): 72 (WebCore::RTCRtpTransceiver::stopped): 73 (WebCore::RTCRtpTransceiver::stop): 74 * Modules/mediastream/RTCRtpTransceiver.idl: Added. 75 * WebCore.xcodeproj/project.pbxproj: 76 * platform/mediastream/MediaEndpoint.h: 77 Added createMutedRemoteSource() that creates a muted remote source that will become unmuted 78 when media arrives from the remote peer. 79 * platform/mediastream/RealtimeMediaSource.cpp: 80 (WebCore::RealtimeMediaSource::RealtimeMediaSource): Deleted. 81 * platform/mediastream/RealtimeMediaSource.h: 82 * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm: 83 (WebCore::MockRealtimeVideoSource::create): 84 Use Ref instead of RefPtr. 85 * platform/mock/MockMediaEndpoint.cpp: 86 (WebCore::MockMediaEndpoint::createMutedRemoteSource): 87 * platform/mock/MockMediaEndpoint.h: 88 * platform/mock/MockRealtimeAudioSource.cpp: 89 (WebCore::MockRealtimeAudioSource::create): 90 (WebCore::MockRealtimeAudioSource::createMuted): 91 (WebCore::MockRealtimeAudioSource::MockRealtimeAudioSource): 92 * platform/mock/MockRealtimeAudioSource.h: 93 * platform/mock/MockRealtimeVideoSource.cpp: 94 (WebCore::MockRealtimeVideoSource::create): 95 (WebCore::MockRealtimeVideoSource::createMuted): 96 (WebCore::MockRealtimeVideoSource::MockRealtimeVideoSource): 97 * platform/mock/MockRealtimeVideoSource.h: 98 1 99 2016-06-01 Per Arne Vollan <pvollan@apple.com> 2 100 -
trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.cpp
r201493 r201549 38 38 #include "MediaStreamTrack.h" 39 39 #include "RTCOfferAnswerOptions.h" 40 #include "RTCRtp Sender.h"40 #include "RTCRtpTransceiver.h" 41 41 #include "SDPProcessor.h" 42 42 #include <wtf/MainThread.h> … … 138 138 for (auto& sender : senders) { 139 139 RefPtr<PeerMediaDescription> mediaDescription = PeerMediaDescription::create(); 140 MediaStreamTrack& track = sender->track();140 MediaStreamTrack& track = *sender->track(); 141 141 142 142 mediaDescription->setMediaStreamId(sender->mediaStreamIds()[0]); … … 256 256 } 257 257 258 RefPtr<RTCRtpReceiver> MediaEndpointPeerConnection::createReceiver(const String& transceiverMid, const String& trackKind, const String& trackId) 259 { 260 RealtimeMediaSource::Type sourceType = trackKind == "audio" ? RealtimeMediaSource::Type::Audio : RealtimeMediaSource::Type::Video; 261 262 // Create a muted remote source that will be unmuted once media starts arriving. 263 auto remoteSource = m_mediaEndpoint->createMutedRemoteSource(transceiverMid, sourceType); 264 auto remoteTrackPrivate = MediaStreamTrackPrivate::create(WTFMove(remoteSource), trackId); 265 auto remoteTrack = MediaStreamTrack::create(*m_client->scriptExecutionContext(), *remoteTrackPrivate); 266 267 return RTCRtpReceiver::create(WTFMove(remoteTrack)); 268 } 269 258 270 void MediaEndpointPeerConnection::replaceTrack(RTCRtpSender& sender, MediaStreamTrack& withTrack, PeerConnection::VoidPromise&& promise) 259 271 { -
trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.h
r201493 r201549 70 70 void getStats(MediaStreamTrack*, PeerConnection::StatsPromise&&) override; 71 71 72 RefPtr<RTCRtpReceiver> createReceiver(const String& transceiverMid, const String& trackKind, const String& trackId) override; 72 73 void replaceTrack(RTCRtpSender&, MediaStreamTrack&, PeerConnection::VoidPromise&&) override; 73 74 -
trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h
r201013 r201549 49 49 class RTCRtpReceiver; 50 50 class RTCRtpSender; 51 class RTCRtpTransceiver; 51 52 class RTCSessionDescription; 52 53 class RTCStatsResponse; … … 64 65 virtual void fireEvent(Event&) = 0; 65 66 66 virtual void addReceiver(RTCRtpReceiver&) = 0;67 67 virtual void setSignalingState(PeerConnectionStates::SignalingState) = 0; 68 68 virtual void updateIceGatheringState(PeerConnectionStates::IceGatheringState) = 0; … … 104 104 virtual void getStats(MediaStreamTrack*, PeerConnection::StatsPromise&&) = 0; 105 105 106 virtual RefPtr<RTCRtpReceiver> createReceiver(const String& transceiverMid, const String& trackKind, const String& trackId) = 0; 106 107 virtual void replaceTrack(RTCRtpSender&, MediaStreamTrack&, PeerConnection::VoidPromise&&) = 0; 107 108 -
trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp
r201080 r201549 50 50 #include "RTCSessionDescription.h" 51 51 #include "RTCTrackEvent.h" 52 #include "UUID.h" 52 53 #include <wtf/MainThread.h> 53 54 #include <wtf/text/Base64.h> … … 146 147 147 148 m_backend->markAsNeedingNegotiation(); 149 } 150 151 RefPtr<RTCRtpTransceiver> RTCPeerConnection::addTransceiver(Ref<MediaStreamTrack>&& track, const RtpTransceiverInit& init, ExceptionCode& ec) 152 { 153 if (m_signalingState == SignalingState::Closed) { 154 ec = INVALID_STATE_ERR; 155 return nullptr; 156 } 157 158 String transceiverMid = RTCRtpTransceiver::getNextMid(); 159 const String& trackKind = track->kind(); 160 const String& trackId = track->id(); 161 162 auto sender = RTCRtpSender::create(WTFMove(track), Vector<String>(), *this); 163 auto receiver = m_backend->createReceiver(transceiverMid, trackKind, trackId); 164 auto transceiver = RTCRtpTransceiver::create(WTFMove(sender), WTFMove(receiver)); 165 transceiver->setProvisionalMid(transceiverMid); 166 167 return completeAddTransceiver(WTFMove(transceiver), init); 168 } 169 170 RefPtr<RTCRtpTransceiver> RTCPeerConnection::addTransceiver(const String& kind, const RtpTransceiverInit& init, ExceptionCode& ec) 171 { 172 if (m_signalingState == SignalingState::Closed) { 173 ec = INVALID_STATE_ERR; 174 return nullptr; 175 } 176 177 if (kind != "audio" && kind != "video") { 178 ec = TypeError; 179 return nullptr; 180 } 181 182 String transceiverMid = RTCRtpTransceiver::getNextMid(); 183 String trackId = createCanonicalUUIDString(); 184 185 auto sender = RTCRtpSender::create(kind, Vector<String>(), *this); 186 auto receiver = m_backend->createReceiver(transceiverMid, kind, trackId); 187 auto transceiver = RTCRtpTransceiver::create(WTFMove(sender), WTFMove(receiver)); 188 transceiver->setProvisionalMid(transceiverMid); 189 190 return completeAddTransceiver(WTFMove(transceiver), init); 191 } 192 193 RefPtr<RTCRtpTransceiver> RTCPeerConnection::completeAddTransceiver(Ref<RTCRtpTransceiver>&& transceiver, const RtpTransceiverInit& init) 194 { 195 transceiver->setDirection(static_cast<RTCRtpTransceiver::Direction>(init.direction)); 196 197 m_transceiverSet.append(transceiver.copyRef()); 198 m_backend->markAsNeedingNegotiation(); 199 200 return WTFMove(transceiver); 148 201 } 149 202 … … 372 425 } 373 426 374 void RTCPeerConnection::addReceiver(RTCRtpReceiver& receiver)375 {376 m_receiverSet.append(&receiver);377 }378 379 427 void RTCPeerConnection::setSignalingState(SignalingState newState) 380 428 { -
trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.h
r200246 r201549 42 42 #include "JSMediaStream.h" 43 43 #include "PeerConnectionBackend.h" 44 #include "RTCRtpReceiver.h" 45 #include "RTCRtpSender.h" 44 #include "RTCRtpTransceiver.h" 46 45 #include "ScriptWrappable.h" 47 46 #include <wtf/HashMap.h> … … 67 66 Vector<RefPtr<RTCRtpSender>> getSenders() const override { return m_senderSet; } 68 67 Vector<RefPtr<RTCRtpReceiver>> getReceivers() const { return m_receiverSet; } 68 const Vector<RefPtr<RTCRtpTransceiver>>& getTransceivers() const { return m_transceiverSet; } 69 69 70 70 RefPtr<RTCRtpSender> addTrack(Ref<MediaStreamTrack>&&, Vector<MediaStream*>, ExceptionCode&); 71 71 void removeTrack(RTCRtpSender&, ExceptionCode&); 72 73 // This enum is mirrored in RTCRtpTransceiver.h 74 enum class RtpTransceiverDirection { Sendrecv, Sendonly, Recvonly, Inactive }; 75 76 struct RtpTransceiverInit { 77 RtpTransceiverDirection direction; 78 }; 79 80 RefPtr<RTCRtpTransceiver> addTransceiver(Ref<MediaStreamTrack>&&, const RtpTransceiverInit&, ExceptionCode&); 81 RefPtr<RTCRtpTransceiver> addTransceiver(const String& kind, const RtpTransceiverInit&, ExceptionCode&); 72 82 73 83 void queuedCreateOffer(const Dictionary& offerOptions, PeerConnection::SessionDescriptionPromise&&); … … 110 120 RTCPeerConnection(ScriptExecutionContext&, RefPtr<RTCConfiguration>&&, ExceptionCode&); 111 121 122 RefPtr<RTCRtpTransceiver> completeAddTransceiver(Ref<RTCRtpTransceiver>&&, const RtpTransceiverInit&); 123 112 124 // EventTarget implementation. 113 125 void refEventTarget() override { ref(); } … … 120 132 121 133 // PeerConnectionBackendClient 122 void addReceiver(RTCRtpReceiver&) override;123 134 void setSignalingState(PeerConnectionStates::SignalingState) override; 124 135 void updateIceGatheringState(PeerConnectionStates::IceGatheringState) override; … … 141 152 Vector<RefPtr<RTCRtpSender>> m_senderSet; 142 153 Vector<RefPtr<RTCRtpReceiver>> m_receiverSet; 154 Vector<RefPtr<RTCRtpTransceiver>> m_transceiverSet; 143 155 144 156 Vector<RefPtr<RTCDataChannel>> m_dataChannels; -
trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.idl
r201455 r201549 61 61 sequence<RTCRtpSender> getSenders(); 62 62 sequence<RTCRtpReceiver> getReceivers(); 63 sequence<RTCRtpTransceiver> getTransceivers(); 63 64 64 65 [StrictTypeChecking, RaisesException] RTCRtpSender addTrack(MediaStreamTrack track, MediaStream... streams); 65 66 [StrictTypeChecking, RaisesException] void removeTrack(RTCRtpSender sender); 67 68 [StrictTypeChecking, RaisesException] RTCRtpTransceiver addTransceiver(MediaStreamTrack track, optional RTCRtpTransceiverInit init); 69 [StrictTypeChecking, RaisesException] RTCRtpTransceiver addTransceiver(DOMString kind, optional RTCRtpTransceiverInit init); 66 70 67 71 [JSBuiltin] Promise setLocalDescription(RTCSessionDescription description); … … 113 117 attribute EventHandler ondatachannel; 114 118 }; 119 120 // This enum is mirrored in RTCRtpTransceiver.idl 121 enum RTCRtpTransceiverDirection { "sendrecv", "sendonly", "recvonly", "inactive" }; 122 123 dictionary RTCRtpTransceiverInit { 124 RTCRtpTransceiverDirection direction = "sendrecv"; 125 }; -
trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.cpp
r201080 r201549 38 38 namespace WebCore { 39 39 40 RTCRtpSender::RTCRtpSender(Ref<MediaStreamTrack>&& track, Vector<String>&& mediaStreamIds, RTCRtpSenderClient& client) 41 : RTCRtpSenderReceiverBase(WTFMove(track)) 40 Ref<RTCRtpSender> RTCRtpSender::create(Ref<MediaStreamTrack>&& track, Vector<String>&& mediaStreamIds, RTCRtpSenderClient& client) 41 { 42 const String& trackKind = track->kind(); 43 return adoptRef(*new RTCRtpSender(WTFMove(track), trackKind, WTFMove(mediaStreamIds), client)); 44 } 45 46 Ref<RTCRtpSender> RTCRtpSender::create(const String& trackKind, Vector<String>&& mediaStreamIds, RTCRtpSenderClient& client) 47 { 48 return adoptRef(*new RTCRtpSender(nullptr, trackKind, WTFMove(mediaStreamIds), client)); 49 } 50 51 RTCRtpSender::RTCRtpSender(RefPtr<MediaStreamTrack>&& track, const String& trackKind, Vector<String>&& mediaStreamIds, RTCRtpSenderClient& client) 52 : RTCRtpSenderReceiverBase() 53 , m_trackKind(trackKind) 42 54 , m_mediaStreamIds(WTFMove(mediaStreamIds)) 43 55 , m_client(&client) 44 56 { 45 // The original track id is always used in negotiation even if the track is replaced. 46 m_trackId = m_track->id(); 57 setTrack(WTFMove(track)); 47 58 } 48 59 49 void RTCRtpSender:: replaceTrack(MediaStreamTrack& withTrack, PeerConnection::VoidPromise&& promise, ExceptionCode& ec)60 void RTCRtpSender::setTrack(RefPtr<MediaStreamTrack>&& track) 50 61 { 51 if (!m_client) { 62 // Save the id from the first non-null track set. That id will be used to negotiate the sender 63 // even if the track is replaced. 64 if (!m_track && track) 65 m_trackId = track->id(); 66 67 m_track = WTFMove(track); 68 } 69 70 void RTCRtpSender::replaceTrack(Ref<MediaStreamTrack>&& withTrack, PeerConnection::VoidPromise&& promise, ExceptionCode& ec) 71 { 72 if (isStopped()) { 52 73 promise.reject(INVALID_STATE_ERR); 53 74 return; 54 75 } 55 76 56 if (m_track ->kind() != withTrack.kind()) {77 if (m_trackKind != withTrack->kind()) { 57 78 ec = TypeError; 58 79 return; 59 80 } 60 81 61 m_client->replaceTrack(*this, withTrack, WTFMove(promise));82 m_client->replaceTrack(*this, WTFMove(withTrack), WTFMove(promise)); 62 83 } 63 84 -
trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.h
r200231 r201549 49 49 class RTCRtpSender : public RTCRtpSenderReceiverBase { 50 50 public: 51 static Ref<RTCRtpSender> create(Ref<MediaStreamTrack>&& track, Vector<String>&& mediaStreamIds, RTCRtpSenderClient& client) 52 { 53 return adoptRef(*new RTCRtpSender(WTFMove(track), WTFMove(mediaStreamIds), client)); 54 } 51 static Ref<RTCRtpSender> create(Ref<MediaStreamTrack>&&, Vector<String>&& mediaStreamIds, RTCRtpSenderClient&); 52 static Ref<RTCRtpSender> create(const String& trackKind, Vector<String>&& mediaStreamIds, RTCRtpSenderClient&); 55 53 56 const String& trackId() { return m_trackId; } 54 const String& trackId() const { return m_trackId; } 55 const String& trackKind() const { return m_trackKind; } 56 57 57 const Vector<String>& mediaStreamIds() const { return m_mediaStreamIds; } 58 void setMediaStreamIds(Vector<String>&& mediaStreamIds) { m_mediaStreamIds = WTFMove(mediaStreamIds); } 58 59 60 bool isStopped() const { return !m_client; } 59 61 void stop() { m_client = nullptr; } 62 void setTrack(RefPtr<MediaStreamTrack>&&); 60 63 61 void replaceTrack( MediaStreamTrack&, PeerConnection::VoidPromise&&, ExceptionCode&);64 void replaceTrack(Ref<MediaStreamTrack>&&, PeerConnection::VoidPromise&&, ExceptionCode&); 62 65 63 66 private: 64 RTCRtpSender(Ref <MediaStreamTrack>&&, Vector<String>&& mediaStreamIds, RTCRtpSenderClient&);67 RTCRtpSender(RefPtr<MediaStreamTrack>&&, const String& trackKind, Vector<String>&& mediaStreamIds, RTCRtpSenderClient&); 65 68 66 69 String m_trackId; 70 String m_trackKind; 67 71 Vector<String> m_mediaStreamIds; 68 72 RTCRtpSenderClient* m_client; -
trunk/Source/WebCore/Modules/mediastream/RTCRtpSenderReceiverBase.h
r200231 r201549 45 45 class RTCRtpSenderReceiverBase : public RefCounted<RTCRtpSenderReceiverBase>, public ScriptWrappable { 46 46 public: 47 virtual ~RTCRtpSenderReceiverBase() { }47 virtual ~RTCRtpSenderReceiverBase() = default; 48 48 49 MediaStreamTrack & track() { return m_track; }49 MediaStreamTrack* track() { return m_track.get(); } 50 50 51 51 protected: 52 RTCRtpSenderReceiverBase() = default; 53 52 54 RTCRtpSenderReceiverBase(Ref<MediaStreamTrack>&& track) 53 55 : m_track(WTFMove(track)) 54 56 { } 55 57 56 Ref <MediaStreamTrack> m_track;58 RefPtr<MediaStreamTrack> m_track; 57 59 }; 58 60 -
trunk/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.h
r201548 r201549 1 1 /* 2 * Copyright (C) 201 5Ericsson AB. All rights reserved.2 * Copyright (C) 2016 Ericsson AB. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 29 29 */ 30 30 31 #ifndef RTCRtp SenderReceiverBase_h32 #define RTCRtp SenderReceiverBase_h31 #ifndef RTCRtpTransceiver_h 32 #define RTCRtpTransceiver_h 33 33 34 34 #if ENABLE(WEB_RTC) 35 35 36 #include "MediaStreamTrack.h" 36 #include "RTCRtpReceiver.h" 37 #include "RTCRtpSender.h" 37 38 #include "ScriptWrappable.h" 38 39 #include <wtf/RefCounted.h> 39 40 #include <wtf/RefPtr.h> 41 #include <wtf/text/WTFString.h> 40 42 41 43 namespace WebCore { 42 44 43 class MediaStreamTrack; 45 class RTCRtpTransceiver : public RefCounted<RTCRtpTransceiver>, public ScriptWrappable { 46 public: 47 // This enum is mirrored in RTCPeerConnection.h 48 enum class Direction { Sendrecv, Sendonly, Recvonly, Inactive }; 44 49 45 class RTCRtpSenderReceiverBase : public RefCounted<RTCRtpSenderReceiverBase>, public ScriptWrappable { 46 public: 47 virtual ~RTCRtpSenderReceiverBase() { } 50 static Ref<RTCRtpTransceiver> create(RefPtr<RTCRtpSender>&&, RefPtr<RTCRtpReceiver>&&); 51 virtual ~RTCRtpTransceiver() { } 48 52 49 MediaStreamTrack& track() { return m_track; } 53 bool hasSendingDirection() const; 54 void enableSendingDirection(); 55 void disableSendingDirection(); 50 56 51 protected: 52 RTCRtpSenderReceiverBase(Ref<MediaStreamTrack>&& track) 53 : m_track(WTFMove(track)) 54 { } 57 const String& directionString() const; 58 Direction direction() const { return m_direction; } 59 void setDirection(Direction direction) { m_direction = direction; } 55 60 56 Ref<MediaStreamTrack> m_track; 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; } 66 67 RTCRtpSender* sender() const { return m_sender.get(); } 68 RTCRtpReceiver* receiver() const { return m_receiver.get(); } 69 70 bool stopped() const { return m_stopped; } 71 void stop() { m_stopped = true; } 72 73 static String getNextMid(); 74 75 private: 76 RTCRtpTransceiver(RefPtr<RTCRtpSender>&&, RefPtr<RTCRtpReceiver>&&); 77 78 String m_provisionalMid; 79 String m_mid; 80 81 Direction m_direction; 82 83 RefPtr<RTCRtpSender> m_sender; 84 RefPtr<RTCRtpReceiver> m_receiver; 85 86 bool m_stopped { false }; 57 87 }; 58 88 … … 61 91 #endif // ENABLE(WEB_RTC) 62 92 63 #endif // RTCRtp SenderReceiverBase_h93 #endif // RTCRtpTransceiver_h -
trunk/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.idl
r201548 r201549 1 1 /* 2 * Copyright (C) 201 5Ericsson AB. All rights reserved.2 * Copyright (C) 2016 Ericsson AB. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 29 29 */ 30 30 31 #ifndef RTCRtpSenderReceiverBase_h 32 #define RTCRtpSenderReceiverBase_h 31 [ 32 Conditional=WEB_RTC 33 ] interface RTCRtpTransceiver { 34 readonly attribute DOMString? mid; 35 readonly attribute RTCRtpSender sender; 36 readonly attribute RTCRtpReceiver receiver; 37 readonly attribute boolean stopped; 38 readonly attribute RTCRtpTransceiverDirection direction; 33 39 34 #if ENABLE(WEB_RTC) 35 36 #include "MediaStreamTrack.h" 37 #include "ScriptWrappable.h" 38 #include <wtf/RefCounted.h> 39 #include <wtf/RefPtr.h> 40 41 namespace WebCore { 42 43 class MediaStreamTrack; 44 45 class RTCRtpSenderReceiverBase : public RefCounted<RTCRtpSenderReceiverBase>, public ScriptWrappable { 46 public: 47 virtual ~RTCRtpSenderReceiverBase() { } 48 49 MediaStreamTrack& track() { return m_track; } 50 51 protected: 52 RTCRtpSenderReceiverBase(Ref<MediaStreamTrack>&& track) 53 : m_track(WTFMove(track)) 54 { } 55 56 Ref<MediaStreamTrack> m_track; 40 void setDirection(RTCRtpTransceiverDirection direction); 41 void stop(); 57 42 }; 58 43 59 } // namespace WebCore 60 61 #endif // ENABLE(WEB_RTC) 62 63 #endif // RTCRtpSenderReceiverBase_h 44 // This enum is mirrored in RTCPeerConnection.idl 45 enum RTCRtpTransceiverDirection { "sendrecv", "sendonly", "recvonly", "inactive" }; -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r201534 r201549 2387 2387 5E2C437B1BCF9A570001E2BC /* RTCPeerConnectionBuiltins.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E2C43761BCF9A0B0001E2BC /* RTCPeerConnectionBuiltins.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2388 2388 5E2C437C1BCF9A840001E2BC /* RTCPeerConnectionInternalsBuiltins.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E2C43791BCF9A0B0001E2BC /* RTCPeerConnectionInternalsBuiltins.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2389 5E5E2B131CFC3E70000C0D85 /* RTCRtpTransceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E5E2B101CFC3E4B000C0D85 /* RTCRtpTransceiver.cpp */; }; 2390 5E5E2B141CFC3E75000C0D85 /* RTCRtpTransceiver.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E5E2B111CFC3E4B000C0D85 /* RTCRtpTransceiver.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2389 2391 5EA3D6DF1C859D7F00300BBB /* MockMediaEndpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EA3D6DE1C859D5300300BBB /* MockMediaEndpoint.h */; }; 2390 2392 5EA3D6E01C859D8400300BBB /* MockMediaEndpoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5EA3D6DD1C859D5300300BBB /* MockMediaEndpoint.cpp */; }; … … 9992 9994 5E2C43781BCF9A0B0001E2BC /* RTCPeerConnectionInternalsBuiltins.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RTCPeerConnectionInternalsBuiltins.cpp; sourceTree = "<group>"; }; 9993 9995 5E2C43791BCF9A0B0001E2BC /* RTCPeerConnectionInternalsBuiltins.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCPeerConnectionInternalsBuiltins.h; sourceTree = "<group>"; }; 9996 5E5E2B101CFC3E4B000C0D85 /* RTCRtpTransceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RTCRtpTransceiver.cpp; sourceTree = "<group>"; }; 9997 5E5E2B111CFC3E4B000C0D85 /* RTCRtpTransceiver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCRtpTransceiver.h; sourceTree = "<group>"; }; 9998 5E5E2B121CFC3E4B000C0D85 /* RTCRtpTransceiver.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = RTCRtpTransceiver.idl; sourceTree = "<group>"; }; 9994 9999 5EA3D6DD1C859D5300300BBB /* MockMediaEndpoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MockMediaEndpoint.cpp; sourceTree = "<group>"; }; 9995 10000 5EA3D6DE1C859D5300300BBB /* MockMediaEndpoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MockMediaEndpoint.h; sourceTree = "<group>"; }; … … 15473 15478 5E2C435B1BCEE30D0001E2BC /* RTCRtpSender.idl */, 15474 15479 5E2C435D1BCEE30D0001E2BC /* RTCRtpSenderReceiverBase.h */, 15480 5E5E2B101CFC3E4B000C0D85 /* RTCRtpTransceiver.cpp */, 15481 5E5E2B111CFC3E4B000C0D85 /* RTCRtpTransceiver.h */, 15482 5E5E2B121CFC3E4B000C0D85 /* RTCRtpTransceiver.idl */, 15475 15483 07221B7A17CEC32700848E51 /* RTCSessionDescription.cpp */, 15476 15484 07221B7B17CEC32700848E51 /* RTCSessionDescription.h */, … … 27185 27193 07A6D1EC1491137700051D0C /* MediaFragmentURIParser.h in Headers */, 27186 27194 A8EA800E0A19516E00A8EF5F /* MediaList.h in Headers */, 27195 5E5E2B141CFC3E75000C0D85 /* RTCRtpTransceiver.h in Headers */, 27187 27196 5EBB89311C7777FF00C65D41 /* MediaPayload.h in Headers */, 27188 27197 07E3DFD11A9E786500764CA8 /* MediaPlaybackTarget.h in Headers */, … … 30948 30957 DEBCCDD516646EB200A452E1 /* MediaControlElementTypes.cpp in Sources */, 30949 30958 CD27F6E7145770D30078207D /* MediaController.cpp in Sources */, 30959 5E5E2B131CFC3E70000C0D85 /* RTCRtpTransceiver.cpp in Sources */, 30950 30960 1F3C3BEA135CAF3C00B8C1AC /* MediaControls.cpp in Sources */, 30951 30961 4157AF8112F1FB0400A8C6F5 /* MediaControlsApple.cpp in Sources */, -
trunk/Source/WebCore/platform/mediastream/MediaEndpoint.h
r198492 r201549 35 35 36 36 #include "MediaEndpointConfiguration.h" 37 #include "RealtimeMediaSource.h" 37 38 #include <wtf/text/WTFString.h> 38 39 … … 79 80 virtual void addRemoteCandidate(IceCandidate&, unsigned mdescIndex, const String& ufrag, const String& password) = 0; 80 81 82 virtual Ref<RealtimeMediaSource> createMutedRemoteSource(const String& mid, RealtimeMediaSource::Type) = 0; 81 83 virtual void replaceSendSource(RealtimeMediaSource&, unsigned mdescIndex) = 0; 82 84 -
trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp
r192954 r201549 46 46 , m_type(type) 47 47 , m_name(name) 48 , m_stopped(false)49 , m_muted(false)50 , m_readonly(false)51 , m_remote(false)52 , m_fitnessScore(0)53 48 { 54 49 // FIXME(147205): Need to implement fitness score for constraints -
trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h
r192954 r201549 121 121 RealtimeMediaSource(const String& id, Type, const String& name); 122 122 123 bool m_muted { false }; 124 123 125 private: 124 126 String m_id; … … 126 128 Type m_type; 127 129 String m_name; 128 bool m_stopped ;130 bool m_stopped { false }; 129 131 Vector<Observer*> m_observers; 130 132 131 bool m_muted; 132 bool m_readonly; 133 bool m_remote; 133 bool m_readonly { false }; 134 bool m_remote { false }; 134 135 135 unsigned m_fitnessScore ;136 unsigned m_fitnessScore { 0 }; 136 137 }; 137 138 -
trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.mm
r192954 r201549 45 45 namespace WebCore { 46 46 47 Ref Ptr<MockRealtimeVideoSource> MockRealtimeVideoSource::create()47 Ref<MockRealtimeVideoSource> MockRealtimeVideoSource::create() 48 48 { 49 return adoptRef( new MockRealtimeVideoSourceMac());49 return adoptRef(*new MockRealtimeVideoSourceMac()); 50 50 } 51 51 -
trunk/Source/WebCore/platform/mock/MockMediaEndpoint.cpp
r198492 r201549 35 35 36 36 #include "MediaPayload.h" 37 #include "MockRealtimeAudioSource.h" 38 #include "MockRealtimeVideoSource.h" 37 39 #include <wtf/MainThread.h> 38 40 … … 154 156 } 155 157 158 Ref<RealtimeMediaSource> MockMediaEndpoint::createMutedRemoteSource(const String&, RealtimeMediaSource::Type type) 159 { 160 if (type == RealtimeMediaSource::Audio) 161 return MockRealtimeAudioSource::createMuted("remote audio"); 162 163 ASSERT(type == RealtimeMediaSource::Video); 164 return MockRealtimeVideoSource::createMuted("remote video"); 165 } 166 156 167 void MockMediaEndpoint::replaceSendSource(RealtimeMediaSource& newSource, unsigned mdescIndex) 157 168 { -
trunk/Source/WebCore/platform/mock/MockMediaEndpoint.h
r198492 r201549 56 56 void addRemoteCandidate(IceCandidate&, unsigned mdescIndex, const String& ufrag, const String& password) override; 57 57 58 Ref<RealtimeMediaSource> createMutedRemoteSource(const String& mid, RealtimeMediaSource::Type) override; 58 59 void replaceSendSource(RealtimeMediaSource&, unsigned mdescIndex) override; 59 60 -
trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.cpp
r193389 r201549 41 41 namespace WebCore { 42 42 43 Ref Ptr<MockRealtimeAudioSource> MockRealtimeAudioSource::create()43 Ref<MockRealtimeAudioSource> MockRealtimeAudioSource::create() 44 44 { 45 return adoptRef( new MockRealtimeAudioSource());45 return adoptRef(*new MockRealtimeAudioSource(MockRealtimeMediaSource::mockAudioSourceName())); 46 46 } 47 47 48 MockRealtimeAudioSource::MockRealtimeAudioSource() 49 : MockRealtimeMediaSource(createCanonicalUUIDString(), RealtimeMediaSource::Audio, mockAudioSourceName()) 48 Ref<MockRealtimeAudioSource> MockRealtimeAudioSource::createMuted(const String& name) 49 { 50 auto source = adoptRef(*new MockRealtimeAudioSource(name)); 51 source->m_muted = true; 52 return source; 53 } 54 55 MockRealtimeAudioSource::MockRealtimeAudioSource(const String& name) 56 : MockRealtimeMediaSource(createCanonicalUUIDString(), RealtimeMediaSource::Audio, name) 50 57 { 51 58 } -
trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.h
r192954 r201549 44 44 public: 45 45 46 static RefPtr<MockRealtimeAudioSource> create(); 46 static Ref<MockRealtimeAudioSource> create(); 47 static Ref<MockRealtimeAudioSource> createMuted(const String& name); 47 48 48 49 virtual ~MockRealtimeAudioSource() { } 49 50 50 51 protected: 51 MockRealtimeAudioSource( );52 MockRealtimeAudioSource(const String& name = ASCIILiteral("Mock audio device")); 52 53 53 54 private: -
trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp
r195244 r201549 50 50 51 51 #if !PLATFORM(MAC) && !PLATFORM(IOS) 52 RefPtr<MockRealtimeVideoSource> MockRealtimeVideoSource::create() 53 { 54 return adoptRef(new MockRealtimeVideoSource()); 52 Ref<MockRealtimeVideoSource> MockRealtimeVideoSource::create() 53 { 54 return adoptRef(*new MockRealtimeVideoSource(MockRealtimeMediaSource::mockVideoSourceName())); 55 } 56 57 Ref<MockRealtimeVideoSource> MockRealtimeVideoSource::createMuted(const String& name) 58 { 59 auto source = adoptRef(*new MockRealtimeVideoSource(name)); 60 source->m_muted = true; 61 return source; 55 62 } 56 63 #endif 57 64 58 MockRealtimeVideoSource::MockRealtimeVideoSource( )59 : MockRealtimeMediaSource(createCanonicalUUIDString(), RealtimeMediaSource::Video, mockVideoSourceName())65 MockRealtimeVideoSource::MockRealtimeVideoSource(const String& name) 66 : MockRealtimeMediaSource(createCanonicalUUIDString(), RealtimeMediaSource::Video, name) 60 67 , m_timer(RunLoop::current(), this, &MockRealtimeVideoSource::generateFrame) 61 68 { -
trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.h
r192954 r201549 47 47 public: 48 48 49 static RefPtr<MockRealtimeVideoSource> create(); 49 static Ref<MockRealtimeVideoSource> create(); 50 static Ref<MockRealtimeVideoSource> createMuted(const String& name); 50 51 51 52 virtual ~MockRealtimeVideoSource() { } … … 57 58 58 59 protected: 59 MockRealtimeVideoSource( );60 MockRealtimeVideoSource(const String& name = ASCIILiteral("Mock video device")); 60 61 virtual void updatePlatformLayer() const { } 61 62
Note: See TracChangeset
for help on using the changeset viewer.