tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

voip_engine.h (3752B)


      1 /*
      2 *  Copyright (c) 2020 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 API_VOIP_VOIP_ENGINE_H_
     12 #define API_VOIP_VOIP_ENGINE_H_
     13 
     14 namespace webrtc {
     15 
     16 class VoipBase;
     17 class VoipCodec;
     18 class VoipNetwork;
     19 class VoipDtmf;
     20 class VoipStatistics;
     21 class VoipVolumeControl;
     22 
     23 // VoipEngine is the main interface serving as the entry point for all VoIP
     24 // APIs. A single instance of VoipEngine should suffice the most of the need for
     25 // typical VoIP applications as it handles multiple media sessions including a
     26 // specialized session type like ad-hoc conference. Below example code
     27 // describes the typical sequence of API usage. Each API header contains more
     28 // description on what the methods are used for.
     29 //
     30 //   // Caller is responsible of setting desired audio components.
     31 //   VoipEngineConfig config;
     32 //   config.encoder_factory = CreateBuiltinAudioEncoderFactory();
     33 //   config.decoder_factory = CreateBuiltinAudioDecoderFactory();
     34 //   config.task_queue_factory = CreateDefaultTaskQueueFactory();
     35 //   config.audio_device =
     36 //       AudioDeviceModule::Create(AudioDeviceModule::kPlatformDefaultAudio,
     37 //                                 config.task_queue_factory.get());
     38 //   config.audio_processing_builder =
     39 //       std::make_unique<BuiltinAudioProcessingBuilder>();
     40 //
     41 //   auto voip_engine = CreateVoipEngine(std::move(config));
     42 //
     43 //   auto& voip_base = voip_engine->Base();
     44 //   auto& voip_codec = voip_engine->Codec();
     45 //   auto& voip_network = voip_engine->Network();
     46 //
     47 //   ChannelId channel = voip_base.CreateChannel(&app_transport_);
     48 //
     49 //   // After SDP offer/answer, set payload type and codecs that have been
     50 //   // decided through SDP negotiation.
     51 //   // VoipResult handling omitted here.
     52 //   voip_codec.SetSendCodec(channel, ...);
     53 //   voip_codec.SetReceiveCodecs(channel, ...);
     54 //
     55 //   // Start sending and playing RTP on voip channel.
     56 //   // VoipResult handling omitted here.
     57 //   voip_base.StartSend(channel);
     58 //   voip_base.StartPlayout(channel);
     59 //
     60 //   // Inject received RTP/RTCP through VoipNetwork interface.
     61 //   // VoipResult handling omitted here.
     62 //   voip_network.ReceivedRTPPacket(channel, ...);
     63 //   voip_network.ReceivedRTCPPacket(channel, ...);
     64 //
     65 //   // Stop and release voip channel.
     66 //   // VoipResult handling omitted here.
     67 //   voip_base.StopSend(channel);
     68 //   voip_base.StopPlayout(channel);
     69 //   voip_base.ReleaseChannel(channel);
     70 //
     71 class VoipEngine {
     72 public:
     73  virtual ~VoipEngine() = default;
     74 
     75  // VoipBase is the audio session management interface that
     76  // creates/releases/starts/stops an one-to-one audio media session.
     77  virtual VoipBase& Base() = 0;
     78 
     79  // VoipNetwork provides injection APIs that would enable application
     80  // to send and receive RTP/RTCP packets. There is no default network module
     81  // that provides RTP transmission and reception.
     82  virtual VoipNetwork& Network() = 0;
     83 
     84  // VoipCodec provides codec configuration APIs for encoder and decoders.
     85  virtual VoipCodec& Codec() = 0;
     86 
     87  // VoipDtmf provides DTMF event APIs to register and send DTMF events.
     88  virtual VoipDtmf& Dtmf() = 0;
     89 
     90  // VoipStatistics provides performance metrics around audio decoding module
     91  // and jitter buffer (NetEq).
     92  virtual VoipStatistics& Statistics() = 0;
     93 
     94  // VoipVolumeControl provides various input/output volume control.
     95  virtual VoipVolumeControl& VolumeControl() = 0;
     96 };
     97 
     98 }  // namespace webrtc
     99 
    100 #endif  // API_VOIP_VOIP_ENGINE_H_