218 lines
8.1 KiB
C++
218 lines
8.1 KiB
C++
/*
|
|
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
// This sub-API supports the following functionalities:
|
|
//
|
|
// - Enables full duplex VoIP sessions via RTP using G.711 (mu-Law or A-Law).
|
|
// - Initialization and termination.
|
|
// - Trace information on text files or via callbacks.
|
|
// - Multi-channel support (mixing, sending to multiple destinations etc.).
|
|
// - Call setup (port and address) for receiving and sending sides.
|
|
//
|
|
// To support other codecs than G.711, the VoECodec sub-API must be utilized.
|
|
//
|
|
// Usage example, omitting error checking:
|
|
//
|
|
// using namespace webrtc;
|
|
// VoiceEngine* voe = VoiceEngine::Create();
|
|
// VoEBase* base = VoEBase::GetInterface(voe);
|
|
// base->Init();
|
|
// int ch = base->CreateChannel();
|
|
// base->StartPlayout(ch);
|
|
// ...
|
|
// base->DeleteChannel(ch);
|
|
// base->Terminate();
|
|
// base->Release();
|
|
// VoiceEngine::Delete(voe);
|
|
//
|
|
#ifndef WEBRTC_VOICE_ENGINE_VOE_BASE_H
|
|
#define WEBRTC_VOICE_ENGINE_VOE_BASE_H
|
|
|
|
#include "common_types.h"
|
|
|
|
namespace webrtc {
|
|
|
|
class AudioDeviceModule;
|
|
|
|
const int kVoEDefault = -1;
|
|
|
|
// VoiceEngineObserver
|
|
class WEBRTC_DLLEXPORT VoiceEngineObserver
|
|
{
|
|
public:
|
|
// This method will be called after the occurrence of any runtime error
|
|
// code, or warning notification, when the observer interface has been
|
|
// installed using VoEBase::RegisterVoiceEngineObserver().
|
|
virtual void CallbackOnError(const int channel, const int errCode) = 0;
|
|
|
|
protected:
|
|
virtual ~VoiceEngineObserver() {}
|
|
};
|
|
|
|
// VoiceEngine
|
|
class WEBRTC_DLLEXPORT VoiceEngine
|
|
{
|
|
public:
|
|
// Creates a VoiceEngine object, which can then be used to acquire
|
|
// sub-APIs. Returns NULL on failure.
|
|
static VoiceEngine* Create();
|
|
|
|
// Deletes a created VoiceEngine object and releases the utilized resources.
|
|
// If |ignoreRefCounters| is set to false, all reference counters must be
|
|
// zero to enable a valid release of the allocated resources. When set to
|
|
// true, a release of all resources allocated by the VoE is performed
|
|
// without checking the reference counter state.
|
|
static bool Delete(VoiceEngine*& voiceEngine,
|
|
bool ignoreRefCounters = false);
|
|
|
|
// Specifies the amount and type of trace information which will be
|
|
// created by the VoiceEngine.
|
|
static int SetTraceFilter(const unsigned int filter);
|
|
|
|
// Sets the name of the trace file and enables non-encrypted trace messages.
|
|
static int SetTraceFile(const char* fileNameUTF8,
|
|
const bool addFileCounter = false);
|
|
|
|
// Installs the TraceCallback implementation to ensure that the user
|
|
// receives callbacks for generated trace messages.
|
|
static int SetTraceCallback(TraceCallback* callback);
|
|
|
|
static int SetAndroidObjects(void* javaVM, void* env, void* context);
|
|
|
|
protected:
|
|
VoiceEngine() {}
|
|
virtual ~VoiceEngine() {}
|
|
};
|
|
|
|
// VoEBase
|
|
class WEBRTC_DLLEXPORT VoEBase
|
|
{
|
|
public:
|
|
// Factory for the VoEBase sub-API. Increases an internal reference
|
|
// counter if successful. Returns NULL if the API is not supported or if
|
|
// construction fails.
|
|
static VoEBase* GetInterface(VoiceEngine* voiceEngine);
|
|
|
|
// Releases the VoEBase sub-API and decreases an internal reference
|
|
// counter. Returns the new reference count. This value should be zero
|
|
// for all sub-API:s before the VoiceEngine object can be safely deleted.
|
|
virtual int Release() = 0;
|
|
|
|
// Installs the observer class to enable runtime error control and
|
|
// warning notifications.
|
|
virtual int RegisterVoiceEngineObserver(VoiceEngineObserver& observer) = 0;
|
|
|
|
// Removes and disables the observer class for runtime error control
|
|
// and warning notifications.
|
|
virtual int DeRegisterVoiceEngineObserver() = 0;
|
|
|
|
// Installs and enables a user-defined external audio device module
|
|
// which implements all the audio layer functionality.
|
|
virtual int RegisterAudioDeviceModule(AudioDeviceModule& adm) = 0;
|
|
|
|
// Removes and disables the external audio device module.
|
|
virtual int DeRegisterAudioDeviceModule() = 0;
|
|
|
|
// Initiates all common parts of the VoiceEngine; e.g. all
|
|
// encoders/decoders, the sound card and core receiving components.
|
|
virtual int Init() = 0;
|
|
|
|
// Terminates all VoiceEngine functions and releses allocated resources.
|
|
virtual int Terminate() = 0;
|
|
|
|
// Retrieves the maximum number of channels that can be created.
|
|
virtual int MaxNumOfChannels() = 0;
|
|
|
|
// Creates a new channel and allocates the required resources for it.
|
|
virtual int CreateChannel() = 0;
|
|
|
|
// Deletes an existing channel and releases the utilized resources.
|
|
virtual int DeleteChannel(int channel) = 0;
|
|
|
|
// Sets the local receiver port and address for a specified
|
|
// |channel| number.
|
|
virtual int SetLocalReceiver(int channel, int port,
|
|
int RTCPport = kVoEDefault,
|
|
const char ipAddr[64] = NULL,
|
|
const char multiCastAddr[64] = NULL) = 0;
|
|
|
|
// Gets the local receiver port and address for a specified
|
|
// |channel| number.
|
|
virtual int GetLocalReceiver(int channel, int& port, int& RTCPport,
|
|
char ipAddr[64]) = 0;
|
|
|
|
// Sets the destination port and address for a specified |channel| number.
|
|
virtual int SetSendDestination(int channel, int port,
|
|
const char ipAddr[64],
|
|
int sourcePort = kVoEDefault,
|
|
int RTCPport = kVoEDefault) = 0;
|
|
|
|
// Gets the destination port and address for a specified |channel| number.
|
|
virtual int GetSendDestination(int channel, int& port, char ipAddr[64],
|
|
int& sourcePort, int& RTCPport) = 0;
|
|
|
|
// Prepares and initiates the VoiceEngine for reception of
|
|
// incoming RTP/RTCP packets on the specified |channel|.
|
|
virtual int StartReceive(int channel) = 0;
|
|
|
|
// Stops receiving incoming RTP/RTCP packets on the specified |channel|.
|
|
virtual int StopReceive(int channel) = 0;
|
|
|
|
// Starts forwarding the packets to the mixer/soundcard for a
|
|
// specified |channel|.
|
|
virtual int StartPlayout(int channel) = 0;
|
|
|
|
// Stops forwarding the packets to the mixer/soundcard for a
|
|
// specified |channel|.
|
|
virtual int StopPlayout(int channel) = 0;
|
|
|
|
// Starts sending packets to an already specified IP address and
|
|
// port number for a specified |channel|.
|
|
virtual int StartSend(int channel) = 0;
|
|
|
|
// Stops sending packets from a specified |channel|.
|
|
virtual int StopSend(int channel) = 0;
|
|
|
|
// Gets the version information for VoiceEngine and its components.
|
|
virtual int GetVersion(char version[1024]) = 0;
|
|
|
|
// Gets the last VoiceEngine error code.
|
|
virtual int LastError() = 0;
|
|
|
|
|
|
// Stops or resumes playout and transmission on a temporary basis.
|
|
virtual int SetOnHoldStatus(int channel, bool enable,
|
|
OnHoldModes mode = kHoldSendAndPlay) = 0;
|
|
|
|
// Gets the current playout and transmission status.
|
|
virtual int GetOnHoldStatus(int channel, bool& enabled,
|
|
OnHoldModes& mode) = 0;
|
|
|
|
// Sets the NetEQ playout mode for a specified |channel| number.
|
|
virtual int SetNetEQPlayoutMode(int channel, NetEqModes mode) = 0;
|
|
|
|
// Gets the NetEQ playout mode for a specified |channel| number.
|
|
virtual int GetNetEQPlayoutMode(int channel, NetEqModes& mode) = 0;
|
|
|
|
// Sets the NetEQ background noise mode for a specified |channel| number.
|
|
virtual int SetNetEQBGNMode(int channel, NetEqBgnModes mode) = 0;
|
|
|
|
// Gets the NetEQ background noise mode for a specified |channel| number.
|
|
virtual int GetNetEQBGNMode(int channel, NetEqBgnModes& mode) = 0;
|
|
|
|
protected:
|
|
VoEBase() {}
|
|
virtual ~VoEBase() {}
|
|
};
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // WEBRTC_VOICE_ENGINE_VOE_BASE_H
|