Home | History | Annotate | Download | only in webrtc
      1 /*
      2  *  Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
      3  *
      4  *  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.
      9  */
     10 
     11 #ifndef WEBRTC_AUDIO_SEND_STREAM_H_
     12 #define WEBRTC_AUDIO_SEND_STREAM_H_
     13 
     14 #include <string>
     15 #include <vector>
     16 
     17 #include "webrtc/base/scoped_ptr.h"
     18 #include "webrtc/config.h"
     19 #include "webrtc/modules/audio_coding/codecs/audio_encoder.h"
     20 #include "webrtc/stream.h"
     21 #include "webrtc/transport.h"
     22 #include "webrtc/typedefs.h"
     23 
     24 namespace webrtc {
     25 
     26 // WORK IN PROGRESS
     27 // This class is under development and is not yet intended for for use outside
     28 // of WebRtc/Libjingle. Please use the VoiceEngine API instead.
     29 // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=4690
     30 
     31 class AudioSendStream : public SendStream {
     32  public:
     33   struct Stats {
     34     // TODO(solenberg): Harmonize naming and defaults with receive stream stats.
     35     uint32_t local_ssrc = 0;
     36     int64_t bytes_sent = 0;
     37     int32_t packets_sent = 0;
     38     int32_t packets_lost = -1;
     39     float fraction_lost = -1.0f;
     40     std::string codec_name;
     41     int32_t ext_seqnum = -1;
     42     int32_t jitter_ms = -1;
     43     int64_t rtt_ms = -1;
     44     int32_t audio_level = -1;
     45     float aec_quality_min = -1.0f;
     46     int32_t echo_delay_median_ms = -1;
     47     int32_t echo_delay_std_ms = -1;
     48     int32_t echo_return_loss = -100;
     49     int32_t echo_return_loss_enhancement = -100;
     50     bool typing_noise_detected = false;
     51   };
     52 
     53   struct Config {
     54     Config() = delete;
     55     explicit Config(Transport* send_transport)
     56         : send_transport(send_transport) {}
     57 
     58     std::string ToString() const;
     59 
     60     // Receive-stream specific RTP settings.
     61     struct Rtp {
     62       std::string ToString() const;
     63 
     64       // Sender SSRC.
     65       uint32_t ssrc = 0;
     66 
     67       // RTP header extensions used for the sent stream.
     68       std::vector<RtpExtension> extensions;
     69 
     70       // RTCP CNAME, see RFC 3550.
     71       std::string c_name;
     72     } rtp;
     73 
     74     // Transport for outgoing packets. The transport is expected to exist for
     75     // the entire life of the AudioSendStream and is owned by the API client.
     76     Transport* send_transport = nullptr;
     77 
     78     // Underlying VoiceEngine handle, used to map AudioSendStream to lower-level
     79     // components.
     80     // TODO(solenberg): Remove when VoiceEngine channels are created outside
     81     // of Call.
     82     int voe_channel_id = -1;
     83 
     84     // Ownership of the encoder object is transferred to Call when the config is
     85     // passed to Call::CreateAudioSendStream().
     86     // TODO(solenberg): Implement, once we configure codecs through the new API.
     87     // rtc::scoped_ptr<AudioEncoder> encoder;
     88     int cng_payload_type = -1;  // pt, or -1 to disable Comfort Noise Generator.
     89     int red_payload_type = -1;  // pt, or -1 to disable REDundant coding.
     90   };
     91 
     92   // TODO(solenberg): Make payload_type a config property instead.
     93   virtual bool SendTelephoneEvent(int payload_type, uint8_t event,
     94                                   uint32_t duration_ms) = 0;
     95   virtual Stats GetStats() const = 0;
     96 };
     97 }  // namespace webrtc
     98 
     99 #endif  // WEBRTC_AUDIO_SEND_STREAM_H_
    100