#include"absl/strings/string_view.h" #include"api/audio/audio_frame.h" #include"api/audio/audio_mixer.h" #include"api/audio_codecs/audio_format.h" #include"api/crypto/frame_decryptor_interface.h" #include"api/environment/environment.h" #include"api/frame_transformer_interface.h" #include"api/neteq/neteq_factory.h" #include"api/rtp_headers.h" #include"api/scoped_refptr.h" #include"api/sequence_checker.h" #include"api/transport/rtp/rtp_source.h" #include"api/units/time_delta.h" #include"api/units/timestamp.h" // This can be removed after Bug 1768116 enables // c++20 builds across the entire Mozilla tree. #if !defined(WEBRTC_MOZILLA_BUILD) #include"audio/audio_state.h" #endif #include"call/audio_receive_stream.h" #include"call/audio_state.h" #include"call/syncable.h" #include"rtc_base/system/no_unique_address.h" #include"rtc_base/thread_annotations.h" #include"system_wrappers/include/ntp_time.h"
namespace webrtc { class PacketRouter; class RtpStreamReceiverControllerInterface; class RtpStreamReceiverInterface;
// This can be removed after Bug 1768116 enables // c++20 builds across the entire Mozilla tree. #ifdefined(WEBRTC_MOZILLA_BUILD)
namespace internal { class AudioState;
} #endif
namespace voe { class ChannelReceiveInterface;
} // namespace voe
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 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 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;
// TODO(tommi): Remove this method. void ReconfigureForTesting( const webrtc::AudioReceiveStreamInterface::Config& config);
const Environment env_;
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_;
scoped_refptr<webrtc::AudioState> audio_state_; const std::unique_ptr<voe::ChannelReceiveInterface> channel_receive_;
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.