blob: 2e7339d4da448c60888fc0cba6f0bbfc1affd752 [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"
perkjd61bf802016-03-24 03:16:19 -070022#include "webrtc/api/remoteaudiosource.h"
perkjf0dcfe22016-03-10 18:32:00 +010023#include "webrtc/api/videotracksource.h"
deadbeef70ab1a12015-09-28 16:53:55 -070024#include "webrtc/base/basictypes.h"
perkjf0dcfe22016-03-10 18:32:00 +010025#include "webrtc/media/base/videobroadcaster.h"
deadbeef70ab1a12015-09-28 16:53:55 -070026
27namespace webrtc {
28
29class AudioRtpReceiver : public ObserverInterface,
30 public AudioSourceInterface::AudioObserver,
31 public rtc::RefCountedObject<RtpReceiverInterface> {
32 public:
perkjd61bf802016-03-24 03:16:19 -070033 AudioRtpReceiver(MediaStreamInterface* stream,
34 const std::string& track_id,
Peter Boström0c4e06b2015-10-07 12:23:21 +020035 uint32_t ssrc,
deadbeef70ab1a12015-09-28 16:53:55 -070036 AudioProviderInterface* provider);
37
38 virtual ~AudioRtpReceiver();
39
40 // ObserverInterface implementation
41 void OnChanged() override;
42
43 // AudioSourceInterface::AudioObserver implementation
44 void OnSetVolume(double volume) override;
45
perkjd61bf802016-03-24 03:16:19 -070046 rtc::scoped_refptr<AudioTrackInterface> audio_track() const {
47 return track_.get();
48 }
49
deadbeef70ab1a12015-09-28 16:53:55 -070050 // RtpReceiverInterface implementation
51 rtc::scoped_refptr<MediaStreamTrackInterface> track() const override {
52 return track_.get();
53 }
54
55 std::string id() const override { return id_; }
56
57 void Stop() override;
58
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -070059 RtpParameters GetParameters() const override;
60 bool SetParameters(const RtpParameters& parameters) override;
61
deadbeef70ab1a12015-09-28 16:53:55 -070062 private:
63 void Reconfigure();
64
Tommif888bb52015-12-12 01:37:01 +010065 const std::string id_;
Tommif888bb52015-12-12 01:37:01 +010066 const uint32_t ssrc_;
67 AudioProviderInterface* provider_; // Set to null in Stop().
perkjd61bf802016-03-24 03:16:19 -070068 const rtc::scoped_refptr<AudioTrackInterface> track_;
deadbeef70ab1a12015-09-28 16:53:55 -070069 bool cached_track_enabled_;
70};
71
72class VideoRtpReceiver : public rtc::RefCountedObject<RtpReceiverInterface> {
73 public:
perkjf0dcfe22016-03-10 18:32:00 +010074 VideoRtpReceiver(MediaStreamInterface* stream,
75 const std::string& track_id,
76 rtc::Thread* worker_thread,
Peter Boström0c4e06b2015-10-07 12:23:21 +020077 uint32_t ssrc,
deadbeef70ab1a12015-09-28 16:53:55 -070078 VideoProviderInterface* provider);
79
80 virtual ~VideoRtpReceiver();
81
perkjf0dcfe22016-03-10 18:32:00 +010082 rtc::scoped_refptr<VideoTrackInterface> video_track() const {
83 return track_.get();
84 }
85
deadbeef70ab1a12015-09-28 16:53:55 -070086 // RtpReceiverInterface implementation
87 rtc::scoped_refptr<MediaStreamTrackInterface> track() const override {
88 return track_.get();
89 }
90
91 std::string id() const override { return id_; }
92
93 void Stop() override;
94
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -070095 RtpParameters GetParameters() const override;
96 bool SetParameters(const RtpParameters& parameters) override;
97
deadbeef70ab1a12015-09-28 16:53:55 -070098 private:
99 std::string id_;
Peter Boström0c4e06b2015-10-07 12:23:21 +0200100 uint32_t ssrc_;
deadbeef70ab1a12015-09-28 16:53:55 -0700101 VideoProviderInterface* provider_;
perkjf0dcfe22016-03-10 18:32:00 +0100102 // |broadcaster_| is needed since the decoder can only handle one sink.
103 // It might be better if the decoder can handle multiple sinks and consider
104 // the VideoSinkWants.
105 rtc::VideoBroadcaster broadcaster_;
106 // |source_| is held here to be able to change the state of the source when
107 // the VideoRtpReceiver is stopped.
108 rtc::scoped_refptr<VideoTrackSource> source_;
109 rtc::scoped_refptr<VideoTrackInterface> track_;
deadbeef70ab1a12015-09-28 16:53:55 -0700110};
111
112} // namespace webrtc
113
Henrik Kjellander15583c12016-02-10 10:53:12 +0100114#endif // WEBRTC_API_RTPRECEIVER_H_