/* * Copyright (c) 2015 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.
*/
namespace webrtc { class PacketRouter; class RtpStreamReceiverControllerInterface; class RtpStreamReceiverInterface;
namespace voe { class ChannelReceiveInterface;
} // namespace voe
namespace internal { class AudioSendStream;
} // namespace internal
class AudioReceiveStreamImpl final : public webrtc::AudioReceiveStreamInterface, public AudioMixer::Source, public Syncable { public:
AudioReceiveStreamImpl( const Environment& env,
PacketRouter* packet_router,
NetEqFactory* neteq_factory, const webrtc::AudioReceiveStreamInterface::Config& config, const rtc::scoped_refptr<webrtc::AudioState>& audio_state); // For unit tests, which need to supply a mock channel receive.
AudioReceiveStreamImpl( const Environment& env,
PacketRouter* packet_router, const webrtc::AudioReceiveStreamInterface::Config& config, const rtc::scoped_refptr<webrtc::AudioState>& audio_state,
std::unique_ptr<voe::ChannelReceiveInterface> channel_receive);
// Destruction happens on the worker thread. Prior to destruction the caller // must ensure that a registration with the transport has been cleared. See // `RegisterWithTransport` for details. // TODO(tommi): As a further improvement to this, performing the full // destruction on the network thread could be made the default.
~AudioReceiveStreamImpl() override;
// Called on the network thread to register/unregister with the network // transport. void RegisterWithTransport(
RtpStreamReceiverControllerInterface* receiver_controller); // If registration has previously been done (via `RegisterWithTransport`) then // `UnregisterFromTransport` must be called prior to destruction, on the // network thread. void UnregisterFromTransport();
uint32_t remote_ssrc() const override { // The remote_ssrc member variable of config_ will never change and can be // considered const. return config_.rtp.remote_ssrc;
}
// Returns a reference to the currently set sync group of the stream. // Must be called on the packet delivery thread. const std::string& sync_group() const;
RTC_NO_UNIQUE_ADDRESS SequenceChecker worker_thread_checker_; // TODO(bugs.webrtc.org/11993): This checker conceptually represents // operations that belong to the network thread. The Call class is currently // moving towards handling network packets on the network thread and while // that work is ongoing, this checker may in practice represent the worker // thread, but still serves as a mechanism of grouping together concepts // that belong to the network thread. Once the packets are fully delivered // on the network thread, this comment will be deleted.
RTC_NO_UNIQUE_ADDRESS SequenceChecker packet_sequence_checker_{
SequenceChecker::kDetached};
webrtc::AudioReceiveStreamInterface::Config config_;
rtc::scoped_refptr<webrtc::AudioState> audio_state_; const std::unique_ptr<voe::ChannelReceiveInterface> channel_receive_;
AudioSendStream* associated_send_stream_
RTC_GUARDED_BY(packet_sequence_checker_) = nullptr;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.