123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- #ifndef AUDIO_VOIP_AUDIO_EGRESS_H_
- #define AUDIO_VOIP_AUDIO_EGRESS_H_
- #include <memory>
- #include <string>
- #include "api/audio_codecs/audio_format.h"
- #include "api/task_queue/task_queue_factory.h"
- #include "audio/utility/audio_frame_operations.h"
- #include "call/audio_sender.h"
- #include "modules/audio_coding/include/audio_coding_module.h"
- #include "modules/rtp_rtcp/include/report_block_data.h"
- #include "modules/rtp_rtcp/source/rtp_rtcp_interface.h"
- #include "modules/rtp_rtcp/source/rtp_sender_audio.h"
- #include "rtc_base/task_queue.h"
- #include "rtc_base/thread_checker.h"
- #include "rtc_base/time_utils.h"
- namespace webrtc {
- class AudioEgress : public AudioSender, public AudioPacketizationCallback {
- public:
- AudioEgress(RtpRtcpInterface* rtp_rtcp,
- Clock* clock,
- TaskQueueFactory* task_queue_factory);
- ~AudioEgress() override;
-
-
-
-
- void SetEncoder(int payload_type,
- const SdpAudioFormat& encoder_format,
- std::unique_ptr<AudioEncoder> encoder);
-
-
-
- void StartSend();
- void StopSend();
-
-
- bool IsSending() const;
-
- void SetMute(bool mute);
-
-
- absl::optional<SdpAudioFormat> GetEncoderFormat() const {
- rtc::CritScope lock(&lock_);
- return encoder_format_;
- }
-
- void RegisterTelephoneEventType(int rtp_payload_type, int sample_rate_hz);
-
-
-
-
-
-
- bool SendTelephoneEvent(int dtmf_event, int duration_ms);
-
- void SendAudioData(std::unique_ptr<AudioFrame> audio_frame) override;
-
- int32_t SendData(AudioFrameType frame_type,
- uint8_t payload_type,
- uint32_t timestamp,
- const uint8_t* payload_data,
- size_t payload_size) override;
- private:
- void SetEncoderFormat(const SdpAudioFormat& encoder_format) {
- rtc::CritScope lock(&lock_);
- encoder_format_ = encoder_format;
- }
- rtc::CriticalSection lock_;
-
- absl::optional<SdpAudioFormat> encoder_format_ RTC_GUARDED_BY(lock_);
-
- RtpRtcpInterface* const rtp_rtcp_;
-
- RTPSenderAudio rtp_sender_audio_;
-
- const std::unique_ptr<AudioCodingModule> audio_coding_;
-
- struct EncoderContext {
-
-
- uint32_t frame_rtp_timestamp_ = 0;
-
-
-
- bool mute_ = false;
- bool previously_muted_ = false;
- };
- EncoderContext encoder_context_ RTC_GUARDED_BY(encoder_queue_);
-
-
- rtc::TaskQueue encoder_queue_;
- };
- }
- #endif
|