xref: /aosp_15_r20/external/webrtc/api/voip/voip_engine.h (revision d9f758449e529ab9291ac668be2861e7a55c2422)
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 = AudioProcessingBuilder().Create();
39 //
40 //   auto voip_engine = CreateVoipEngine(std::move(config));
41 //
42 //   auto& voip_base = voip_engine->Base();
43 //   auto& voip_codec = voip_engine->Codec();
44 //   auto& voip_network = voip_engine->Network();
45 //
46 //   ChannelId channel = voip_base.CreateChannel(&app_transport_);
47 //
48 //   // After SDP offer/answer, set payload type and codecs that have been
49 //   // decided through SDP negotiation.
50 //   // VoipResult handling omitted here.
51 //   voip_codec.SetSendCodec(channel, ...);
52 //   voip_codec.SetReceiveCodecs(channel, ...);
53 //
54 //   // Start sending and playing RTP on voip channel.
55 //   // VoipResult handling omitted here.
56 //   voip_base.StartSend(channel);
57 //   voip_base.StartPlayout(channel);
58 //
59 //   // Inject received RTP/RTCP through VoipNetwork interface.
60 //   // VoipResult handling omitted here.
61 //   voip_network.ReceivedRTPPacket(channel, ...);
62 //   voip_network.ReceivedRTCPPacket(channel, ...);
63 //
64 //   // Stop and release voip channel.
65 //   // VoipResult handling omitted here.
66 //   voip_base.StopSend(channel);
67 //   voip_base.StopPlayout(channel);
68 //   voip_base.ReleaseChannel(channel);
69 //
70 class VoipEngine {
71  public:
72   virtual ~VoipEngine() = default;
73 
74   // VoipBase is the audio session management interface that
75   // creates/releases/starts/stops an one-to-one audio media session.
76   virtual VoipBase& Base() = 0;
77 
78   // VoipNetwork provides injection APIs that would enable application
79   // to send and receive RTP/RTCP packets. There is no default network module
80   // that provides RTP transmission and reception.
81   virtual VoipNetwork& Network() = 0;
82 
83   // VoipCodec provides codec configuration APIs for encoder and decoders.
84   virtual VoipCodec& Codec() = 0;
85 
86   // VoipDtmf provides DTMF event APIs to register and send DTMF events.
87   virtual VoipDtmf& Dtmf() = 0;
88 
89   // VoipStatistics provides performance metrics around audio decoding module
90   // and jitter buffer (NetEq).
91   virtual VoipStatistics& Statistics() = 0;
92 
93   // VoipVolumeControl provides various input/output volume control.
94   virtual VoipVolumeControl& VolumeControl() = 0;
95 };
96 
97 }  // namespace webrtc
98 
99 #endif  // API_VOIP_VOIP_ENGINE_H_
100