blob: a62ed19dbf101cfc9307e44a8611a068ea70571c [file] [log] [blame]
deadbeef6979b022015-09-24 16:47:53 -07001/*
kjellanderb24317b2016-02-10 07:54:43 -08002 * Copyright 2015 The WebRTC project authors. All Rights Reserved.
deadbeef6979b022015-09-24 16:47:53 -07003 *
kjellanderb24317b2016-02-10 07:54:43 -08004 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
deadbeef6979b022015-09-24 16:47:53 -07009 */
10
deadbeef70ab1a12015-09-28 16:53:55 -070011// This file contains classes that implement RtpReceiverInterface.
12// An RtpReceiver associates a MediaStreamTrackInterface with an underlying
13// transport (provided by AudioProviderInterface/VideoProviderInterface)
14
Henrik Kjellander15583c12016-02-10 10:53:12 +010015#ifndef WEBRTC_API_RTPRECEIVER_H_
16#define WEBRTC_API_RTPRECEIVER_H_
deadbeef70ab1a12015-09-28 16:53:55 -070017
18#include <string>
19
Henrik Kjellander15583c12016-02-10 10:53:12 +010020#include "webrtc/api/mediastreamprovider.h"
21#include "webrtc/api/rtpreceiverinterface.h"
perkjf0dcfe22016-03-10 18:32:00 +010022#include "webrtc/api/videotracksource.h"
deadbeef70ab1a12015-09-28 16:53:55 -070023#include "webrtc/base/basictypes.h"
perkjf0dcfe22016-03-10 18:32:00 +010024#include "webrtc/media/base/videobroadcaster.h"
deadbeef70ab1a12015-09-28 16:53:55 -070025
26namespace webrtc {
27
28class AudioRtpReceiver : public ObserverInterface,
29 public AudioSourceInterface::AudioObserver,
30 public rtc::RefCountedObject<RtpReceiverInterface> {
31 public:
32 AudioRtpReceiver(AudioTrackInterface* track,
Peter Boström0c4e06b2015-10-07 12:23:21 +020033 uint32_t ssrc,
deadbeef70ab1a12015-09-28 16:53:55 -070034 AudioProviderInterface* provider);
35
36 virtual ~AudioRtpReceiver();
37
38 // ObserverInterface implementation
39 void OnChanged() override;
40
41 // AudioSourceInterface::AudioObserver implementation
42 void OnSetVolume(double volume) override;
43
44 // RtpReceiverInterface implementation
45 rtc::scoped_refptr<MediaStreamTrackInterface> track() const override {
46 return track_.get();
47 }
48
49 std::string id() const override { return id_; }
50
51 void Stop() override;
52
53 private:
54 void Reconfigure();
55
Tommif888bb52015-12-12 01:37:01 +010056 const std::string id_;
57 const rtc::scoped_refptr<AudioTrackInterface> track_;
58 const uint32_t ssrc_;
59 AudioProviderInterface* provider_; // Set to null in Stop().
deadbeef70ab1a12015-09-28 16:53:55 -070060 bool cached_track_enabled_;
61};
62
63class VideoRtpReceiver : public rtc::RefCountedObject<RtpReceiverInterface> {
64 public:
perkjf0dcfe22016-03-10 18:32:00 +010065 VideoRtpReceiver(MediaStreamInterface* stream,
66 const std::string& track_id,
67 rtc::Thread* worker_thread,
Peter Boström0c4e06b2015-10-07 12:23:21 +020068 uint32_t ssrc,
deadbeef70ab1a12015-09-28 16:53:55 -070069 VideoProviderInterface* provider);
70
71 virtual ~VideoRtpReceiver();
72
perkjf0dcfe22016-03-10 18:32:00 +010073 rtc::scoped_refptr<VideoTrackInterface> video_track() const {
74 return track_.get();
75 }
76
deadbeef70ab1a12015-09-28 16:53:55 -070077 // RtpReceiverInterface implementation
78 rtc::scoped_refptr<MediaStreamTrackInterface> track() const override {
79 return track_.get();
80 }
81
82 std::string id() const override { return id_; }
83
84 void Stop() override;
85
86 private:
87 std::string id_;
Peter Boström0c4e06b2015-10-07 12:23:21 +020088 uint32_t ssrc_;
deadbeef70ab1a12015-09-28 16:53:55 -070089 VideoProviderInterface* provider_;
perkjf0dcfe22016-03-10 18:32:00 +010090 // |broadcaster_| is needed since the decoder can only handle one sink.
91 // It might be better if the decoder can handle multiple sinks and consider
92 // the VideoSinkWants.
93 rtc::VideoBroadcaster broadcaster_;
94 // |source_| is held here to be able to change the state of the source when
95 // the VideoRtpReceiver is stopped.
96 rtc::scoped_refptr<VideoTrackSource> source_;
97 rtc::scoped_refptr<VideoTrackInterface> track_;
deadbeef70ab1a12015-09-28 16:53:55 -070098};
99
100} // namespace webrtc
101
Henrik Kjellander15583c12016-02-10 10:53:12 +0100102#endif // WEBRTC_API_RTPRECEIVER_H_