Index: talk/app/webrtc/rtpsender.h |
diff --git a/talk/app/webrtc/rtpsender.h b/talk/app/webrtc/rtpsender.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a089b1d20d3034a32cda5b27cf7d9b0560a24c50 |
--- /dev/null |
+++ b/talk/app/webrtc/rtpsender.h |
@@ -0,0 +1,140 @@ |
+/* |
+ * libjingle |
+ * Copyright 2015 Google 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. |
+ * 3. The name of the author may not be used to endorse or promote products |
+ * derived from this software without specific prior written permission. |
+ * |
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 THE AUTHOR 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. |
+ */ |
+ |
+// This file contains classes that implement RtpSenderInterface. |
+// An RtpSender associates a MediaStreamTrackInterface with an underlying |
+// transport (provided by AudioProviderInterface/VideoProviderInterface) |
+ |
+#ifndef TALK_APP_WEBRTC_RTPSENDER_H_ |
+#define TALK_APP_WEBRTC_RTPSENDER_H_ |
+ |
+#include <string> |
+ |
+#include "talk/app/webrtc/mediastreamprovider.h" |
+#include "talk/app/webrtc/rtpsenderinterface.h" |
+#include "talk/media/base/audiorenderer.h" |
+#include "webrtc/base/basictypes.h" |
+#include "webrtc/base/criticalsection.h" |
+#include "webrtc/base/scoped_ptr.h" |
+ |
+namespace webrtc { |
+ |
+// LocalAudioSinkAdapter receives data callback as a sink to the local |
+// AudioTrack, and passes the data to the sink of AudioRenderer. |
+class LocalAudioSinkAdapter : public AudioTrackSinkInterface, |
+ public cricket::AudioRenderer { |
+ public: |
+ LocalAudioSinkAdapter(); |
+ virtual ~LocalAudioSinkAdapter(); |
+ |
+ private: |
+ // AudioSinkInterface implementation. |
+ void OnData(const void* audio_data, |
+ int bits_per_sample, |
+ int sample_rate, |
+ int number_of_channels, |
+ size_t number_of_frames) override; |
+ |
+ // cricket::AudioRenderer implementation. |
+ void SetSink(cricket::AudioRenderer::Sink* sink) override; |
+ |
+ cricket::AudioRenderer::Sink* sink_; |
+ // Critical section protecting |sink_|. |
+ rtc::CriticalSection lock_; |
+}; |
+ |
+class AudioRtpSender : public ObserverInterface, public RtpSenderInterface { |
+ public: |
+ AudioRtpSender(AudioTrackInterface* track, |
+ uint32 ssrc, |
+ const std::string& mid, |
+ AudioProviderInterface* provider); |
+ |
+ virtual ~AudioRtpSender(); |
+ |
+ // ObserverInterface implementation |
+ void OnChanged() override; |
+ |
+ // RtpSenderInterface implementation |
+ void SetTrack(MediaStreamTrackInterface* track) override; |
+ rtc::scoped_refptr<MediaStreamTrackInterface> track() const override { |
+ return track_.get(); |
+ } |
+ std::string mid() const override { return mid_; } |
+ |
+ // Detach from AudioProviderInterface |
+ void Stop() override; |
+ |
+ private: |
+ void UpdateEnabled(); |
+ |
+ rtc::scoped_refptr<AudioTrackInterface> track_; |
+ uint32 ssrc_; |
+ std::string mid_; |
+ AudioProviderInterface* provider_; |
+ bool enabled_; |
+ |
+ // Used to pass the data callback from the |track_| to the other end of |
+ // cricket::AudioRenderer. |
+ rtc::scoped_ptr<LocalAudioSinkAdapter> sink_adapter_; |
+}; |
+ |
+class VideoRtpSender : public ObserverInterface, public RtpSenderInterface { |
+ public: |
+ VideoRtpSender(VideoTrackInterface* track, |
+ uint32 ssrc, |
+ const std::string& mid, |
+ VideoProviderInterface* provider); |
pthatcher1
2015/09/17 04:25:46
Same here with the order like with the receivers.
|
+ |
+ virtual ~VideoRtpSender(); |
+ |
+ // ObserverInterface implementation |
+ void OnChanged() override; |
+ |
+ // RtpSenderInterface implementation |
+ void SetTrack(MediaStreamTrackInterface* track) override; |
+ rtc::scoped_refptr<MediaStreamTrackInterface> track() const override { |
+ return track_.get(); |
+ } |
+ std::string mid() const override { return mid_; } |
+ |
+ // Detach from VideoProviderInterface |
+ void Stop() override; |
+ |
+ private: |
+ void UpdateEnabled(); |
+ |
+ rtc::scoped_refptr<VideoTrackInterface> track_; |
+ uint32 ssrc_; |
+ std::string mid_; |
+ VideoProviderInterface* provider_; |
+ bool enabled_; |
+}; |
+ |
+} // namespace webrtc |
+ |
+#endif // TALK_APP_WEBRTC_RTPSENDER_H_ |