12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- /*
- * Copyright 2014 The WebRTC project authors. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
- #ifndef PC_REMOTE_AUDIO_SOURCE_H_
- #define PC_REMOTE_AUDIO_SOURCE_H_
- #include <list>
- #include <string>
- #include "absl/types/optional.h"
- #include "api/call/audio_sink.h"
- #include "api/notifier.h"
- #include "pc/channel.h"
- #include "rtc_base/message_handler.h"
- #include "rtc_base/synchronization/mutex.h"
- namespace rtc {
- struct Message;
- class Thread;
- } // namespace rtc
- namespace webrtc {
- // This class implements the audio source used by the remote audio track.
- // This class works by configuring itself as a sink with the underlying media
- // engine, then when receiving data will fan out to all added sinks.
- class RemoteAudioSource : public Notifier<AudioSourceInterface>,
- rtc::MessageHandler {
- public:
- explicit RemoteAudioSource(rtc::Thread* worker_thread);
- // Register and unregister remote audio source with the underlying media
- // engine.
- void Start(cricket::VoiceMediaChannel* media_channel,
- absl::optional<uint32_t> ssrc);
- void Stop(cricket::VoiceMediaChannel* media_channel,
- absl::optional<uint32_t> ssrc);
- // MediaSourceInterface implementation.
- MediaSourceInterface::SourceState state() const override;
- bool remote() const override;
- // AudioSourceInterface implementation.
- void SetVolume(double volume) override;
- void RegisterAudioObserver(AudioObserver* observer) override;
- void UnregisterAudioObserver(AudioObserver* observer) override;
- void AddSink(AudioTrackSinkInterface* sink) override;
- void RemoveSink(AudioTrackSinkInterface* sink) override;
- protected:
- ~RemoteAudioSource() override;
- private:
- // These are callbacks from the media engine.
- class AudioDataProxy;
- void OnData(const AudioSinkInterface::Data& audio);
- void OnAudioChannelGone();
- void OnMessage(rtc::Message* msg) override;
- rtc::Thread* const main_thread_;
- rtc::Thread* const worker_thread_;
- std::list<AudioObserver*> audio_observers_;
- Mutex sink_lock_;
- std::list<AudioTrackSinkInterface*> sinks_;
- SourceState state_;
- };
- } // namespace webrtc
- #endif // PC_REMOTE_AUDIO_SOURCE_H_
|