Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SIP #68

Merged
merged 97 commits into from
Feb 20, 2016
Merged

SIP #68

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
97 commits
Select commit Hold shift + click to select a range
6f23a61
Merge pull request #63 from doe300/master
doe300 Dec 10, 2015
bec8aa9
Added TCPWrapper and implemented retrieval of external IP for local d…
doe300 Dec 10, 2015
1b314a7
Added method for host-name resolution
doe300 Dec 11, 2015
3d955a3
Working communication establishment and clearing via SIP/SDP with a l…
doe300 Dec 11, 2015
4dc5b34
Implemented SIPConfiguration
doe300 Dec 11, 2015
3308387
AppVeyor Integration
doe300 Dec 12, 2015
44d6a70
Update appveyor.yml
doe300 Dec 12, 2015
0baaa49
Fixes for windows build
doe300 Dec 12, 2015
23bfa43
Merge origin/sip into sip
doe300 Dec 12, 2015
fe41794
Fixs for windows build (2)
doe300 Dec 12, 2015
85d9525
Test fixes for linux
doe300 Dec 12, 2015
82462df
Update appveyor.yml
doe300 Dec 12, 2015
cdeae4f
Update appveyor.yml
doe300 Dec 12, 2015
4ea210e
Update appveyor.yml
doe300 Dec 12, 2015
35a730b
Update appveyor.yml
doe300 Dec 12, 2015
284ee0d
Update appveyor.yml
doe300 Dec 12, 2015
848aa52
Added deploy on tag
doe300 Dec 13, 2015
b509ef5
Added deploy on tag
doe300 Dec 13, 2015
ae4b926
Update .travis.yml
doe300 Dec 13, 2015
25d85c9
Update .travis.yml
doe300 Dec 13, 2015
7c757a5
Update appveyor.yml
doe300 Dec 13, 2015
57175a8
Update .travis.yml
doe300 Dec 13, 2015
385dbb5
Update appveyor.yml
doe300 Dec 13, 2015
4376215
Update appveyor.yml
doe300 Dec 13, 2015
372a473
Update .travis.yml
doe300 Dec 14, 2015
a19648c
Update appveyor.yml
doe300 Dec 14, 2015
62f006a
Update appveyor.yml
doe300 Dec 14, 2015
e86fb05
Update appveyor.yml
doe300 Dec 14, 2015
b6df380
corrected local SIP port
doe300 Dec 16, 2015
df6f4d7
Merge origin/sip into sip
doe300 Dec 16, 2015
ddddaf5
Added PlaybackListener to be notified on playback changes
doe300 Dec 18, 2015
b5af7b0
Merged FileConfiguration into ParameterConfiguration
doe300 Dec 19, 2015
0f9b3d6
Added parameter for SIP local/remote ports, removed parameter for fil…
doe300 Dec 19, 2015
a3f973a
Improved description for help-output
doe300 Dec 19, 2015
9a9bb82
Receiving SIP-BYE will now stop the program
doe300 Dec 23, 2015
33ee957
Made support for opus for SDP standard-conform (RFC 7587)
doe300 Dec 23, 2015
0adc02a
Added support for custom RTCP-port to SDP (see RFC 3605)
doe300 Dec 23, 2015
9204c5b
Added support for multi-part bodies for SIP packages (RFC 5621)
doe300 Dec 23, 2015
7660623
Added support for CANCEL (sending and receiving)
doe300 Dec 24, 2015
5c1a939
Fixed compilation error
doe300 Dec 24, 2015
92b1c16
Implemented reception of INVITE from remote not specified on startup,…
doe300 Dec 26, 2015
0a3accd
Implemented handling of MOVED and MULTIPLE_CHOICES responses
doe300 Dec 26, 2015
f9a5a4b
Improved error-handling for SIP
doe300 Dec 27, 2015
14a8fe9
Bugfixes
doe300 Dec 30, 2015
d5962f4
Added STUNClient as client for the STUN protocol from RFC 5389
doe300 Jan 2, 2016
1e96e83
Added handling of IPv6 addresses to STUN-client
doe300 Jan 3, 2016
38c2df5
Generalized default RTP payload-types for SDP, so more can be easily …
doe300 Jan 6, 2016
061ae7e
Fixed bugs in RTP-processor and interactive configuration
doe300 Jan 7, 2016
764b896
Added support for G.711 A-law and mu-law standards using their implem…
doe300 Jan 8, 2016
2b6e18e
Added SDP media-descriptions for the new A-law and mu-law support
doe300 Jan 8, 2016
4402be0
Added Utility#waitForUserInput() to wait a certain amount of time for…
doe300 Jan 8, 2016
4f2961d
Utility now uses STUN to find external IP
doe300 Jan 14, 2016
1a0e596
Added parameter "list-addresses" to list the addresses of the local d…
doe300 Jan 15, 2016
ef7d71b
Fixed memory leak
doe300 Jan 16, 2016
58279cc
Reorganized folder structure
doe300 Jan 17, 2016
4a706f3
Added GainControl to calculate volume of audio-package and amplify ou…
doe300 Jan 17, 2016
0d84351
Implemented basic handling of DTX, see #65
Jan 21, 2016
768fecc
Added parameter to configure DTX, see #65
doe300 Jan 21, 2016
02fd3dc
Disable min(), max() macros to prevent compiler errors
doe300 Jan 21, 2016
d8751e3
Added custom configuration to SIPConfiguration
doe300 Jan 21, 2016
d201e31
Added basic support for SDP Offer/Answer Model in RFC 3264
doe300 Jan 21, 2016
a672812
Restructured some header files
doe300 Jan 22, 2016
d78f026
Added dynamic playout point adaption to RTPBuffer
doe300 Jan 27, 2016
752b713
Improved loss concealment of RTPBuffer, see #57
doe300 Jan 28, 2016
4f08b99
Fixed network-wrappers
doe300 Jan 29, 2016
d00f5e5
Improved silence calculation
doe300 Jan 30, 2016
6284ea7
Fixed some extra warnings
doe300 Jan 30, 2016
36ff2a2
Fixed errors
doe300 Jan 31, 2016
0019f21
Tested PlayoutPointAdaption
doe300 Jan 31, 2016
f65c16d
Rewrote ParticipantDatabase and SIPUserAgents
doe300 Jan 31, 2016
b7d9b44
Rewrote CMakeLists so opus and rtaudio can be loadedfrom available sy…
doe300 Feb 3, 2016
1f7d308
Cleaned up NetworkWrapper
doe300 Feb 5, 2016
870c861
Moved some globals into scopes, rewrote to constexpr
doe300 Feb 5, 2016
5f257cc
Fixed clang compilation errors
doe300 Feb 6, 2016
968db94
Fixed "static initialization order fiasco"
doe300 Feb 7, 2016
30598b6
Added DTX to opus, closes #65
doe300 Feb 7, 2016
2eba34d
Added AudioHandler::AudioDevice for platform- and library-independent…
doe300 Feb 10, 2016
c2705ef
Implemented PortAudioWrapper to support PortAudio as audio-library
doe300 Feb 10, 2016
c1ed36d
Fix conditional compilation for PortAudio
doe300 Feb 10, 2016
e56a4e4
Fixed clang error
doe300 Feb 10, 2016
76a43a3
Moved network-related classes to own folder
doe300 Feb 13, 2016
cb827af
Moved to custom version of cpptest-lite (soemwhere between 0.3 and 0.4)
doe300 Feb 13, 2016
d1eb2ea
Enabled host-names to be passed as remote address
doe300 Feb 13, 2016
7c3d8f2
Added SIP grammar check
doe300 Feb 13, 2016
d51bd3f
Fixed several bugs
doe300 Feb 13, 2016
9268a25
Added Utility#splitString
doe300 Feb 14, 2016
0ebe2b2
Improved grammar checks for SIP, hosts and ports
doe300 Feb 17, 2016
0cc7f1b
Added check for SIP Call-ID
doe300 Feb 17, 2016
2a1f4bf
Added check for SIP CSeq
doe300 Feb 18, 2016
8b72156
SIPConfiguration now extends ParameterConfiguration to support all av…
doe300 Feb 18, 2016
c997cfc
Added statistics for RTCP
doe300 Feb 18, 2016
9d9aa11
Forgot to push OHMCommStandalone
doe300 Feb 18, 2016
32369ac
Added function to check SDP
doe300 Feb 19, 2016
6b6037e
Fix clang compile error
doe300 Feb 19, 2016
fcd6d4f
Fix clang compile error (2)
doe300 Feb 19, 2016
c5c8c78
Finally fixed Clang error
doe300 Feb 19, 2016
fb36d09
Compilation fix
doe300 Feb 19, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,17 @@ after_script:
- cd build
- chmod +x test/Tests
- test/Tests

before_deploy:
- ls ./
- mv build/OHMComm build/OHMComm-$TRAVIS_OS_NAME-$TRAVIS_TAG

deploy:
provider: releases
api_key: "eCpBRcWXtxWlRBxGVQFwMq+zR5ga4/TwZZV1W5pgJd1mT6sECTFaYr5Z3T7MOoSWkBBYFQ56ulIi4rMrcoN1WH7kbqX6RwfwYRm3LakqsLD9iRwLXzLNNke2RAAC2Z7UA8GgFaVtVHJxHj4DVLMSva9PqS2K3F9xQmiTDKp4LuU="
file-glob: true
file: "build/OHMComm-*"
skip_cleanup: true
on:
tags: true
all_branches: true
58 changes: 50 additions & 8 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,28 +9,70 @@ project (OHMComm)
SET(BUILD_SHARED_LIBS ON)
# Option to enable/disable test-program
option(BUILD_TESTING "Build testing program" ON)
option(BUILD_DEBUG "Build with debugging symbols. Otherwise build for performance" OFF)

# append usage of C++ to compiler flags, also optimize for speed and enable all warnings
if(NOT MSVC)
# the following instruction causes warnings in visual studio,
# therefore enable it only when MSVC-compiler is not used
LIST(APPEND CMAKE_CXX_FLAGS "-std=c++0x -O3 -Wall -pthread")
if(BUILD_DEBUG)
LIST(APPEND CMAKE_CXX_FLAGS "-std=c++0x -g3 -Wextra -Wno-missing-field-initializers -pthread")
else()
LIST(APPEND CMAKE_CXX_FLAGS "-std=c++0x -O3 -Wextra -Wno-missing-field-initializers -pthread")
endif()
else()
# visual studio specific flags
set(CMAKE_CXX_FLAGS "/W3 /D_UNICODE /DUNICODE")
set(CMAKE_CXX_FLAGS "/W3 /D_UNICODE /DUNICODE /DNOMINMAX")
add_definitions(-DWIN32_LEAN_AND_MEAN)
endif()

####
# Dependencies
####
# Set output copy path
add_subdirectory(lib/rtaudio-4.1.1 build/rtaudio)
add_subdirectory(lib/opus-1.1 build/opus)
# Opus - http://opus-codec.org/
#Try to find precompiled library
find_library(OPUS_LIBRARY NAMES opus libopus)
find_path(OPUS_HEADER_PATH "opus.h" HINTS lib/opus-1.1/include)
if(OPUS_LIBRARY)
message(STATUS "Opus library found: " ${OPUS_LIBRARY})
#Set header to default include path
add_definitions(-DOPUS_HEADER="opus/opus.h")
elseif(OPUS_HEADER_PATH)
message(STATUS "Compiling provided opus-library in version 1.1")
# Compile ourselves and set correct header-path
add_subdirectory(lib/opus-1.1 build/opus)
add_definitions(-DOPUS_HEADER="../lib/opus-1.1/include/opus.h")
else()
message(WARNING "No opus library found")
endif()

# RTAudio - http://www.music.mcgill.ca/~gary/rtaudio/
#Try to find precompiled library
find_library(RTAUDIO_LIBRARY NAMES rtaudio librtaudio)
find_path(RTAUDIO_HEADER_PATH "RtAudio.h" HINTS lib/rtaudio-4.1.1)
if(RTAUDIO_LIBRARY)
message(STATUS "RTAudio library found: " ${RTAUDIO_LIBRARY})
#Set header to default include path
add_definitions(-DRTAUDIO_HEADER="RtAudio.h")
elseif(RTAUDIO_HEADER_PATH)
message(STATUS "Compiling provided rtaudio-library in version 4.1.1")
# Compile ourselves and set correct header-path
add_subdirectory(lib/rtaudio-4.1.1 build/rtaudio)
add_definitions(-DRTAUDIO_HEADER="../lib/rtaudio-4.1.1/RtAudio.h")
endif()

#Include headers in the project settings (as search-path for header-files)
include_directories ("${PROJECT_SOURCE_DIR}/lib/rtaudio-4.1.1")
include_directories ("${PROJECT_SOURCE_DIR}/lib/opus-1.1/include")
# PortAudio - http://www.portaudio.com/
#Try to find precompiled library
find_library(PORTAUDIO_LIBRARY NAMES portaudio libportaudio)
if(PORTAUDIO_LIBRARY)
message(STATUS "PortAudio library found: " ${PORTAUDIO_LIBRARY})
#Set header to default include path
add_definitions(-DPORTAUDIO_HEADER="portaudio.h")
endif()

if(NOT RTAUDIO_LIBRARY AND NOT RTAUDIO_HEADER_PATH AND NOT PORTAUDIO_LIBRARY)
message(WARNING "No supported audio-library found!")
endif()

####
# Main files
Expand Down
28 changes: 25 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,21 @@
# OHMComm
IT-Project at the [faculty for Computer Science of the technical university Georg Simon Ohm Nürnberg](http://www.th-nuernberg.de/seitenbaum/fakultaeten/informatik/page.html) in summer semester 2015 and winter semester 2015/2016 to create a platform-independent voice-over-IP peer-to-peer communication program in C++.
This project started as an IT-Project at the [faculty for Computer Science of the technical university Georg Simon Ohm Nürnberg](http://www.th-nuernberg.de/seitenbaum/fakultaeten/informatik/page.html) in summer semester 2015 and winter semester 2015/2016 to create a platform-independent voice-over-IP peer-to-peer communication program in C++.

[![Build Status](https://travis-ci.org/doe300/OHMComm.svg)](https://travis-ci.org/doe300/OHMComm)
[![Build Status](https://ci.appveyor.com/api/projects/status/58fv0pln0jv270am?svg=true)](https://ci.appveyor.com/project/doe300/ohmcomm)
[![GitHub license](https://img.shields.io/github/license/doe300/OHMComm.svg)](https://github.com/doe300/OHMComm/blob/master/LICENSE)
[![Release](https://img.shields.io/github/tag/doe300/OHMComm.svg)](https://github.com/doe300/OHMComm/releases/latest)

This program is currently developed under linux (Fedora 22) and Windows (7/8) and tested under Mac OS X.

OHMComm is based upon [RtAudio](http://www.music.mcgill.ca/~gary/rtaudio/) and therefore supports all audio-libraries supported by RtAudio (see [RtAudio API-Notes](http://www.music.mcgill.ca/~gary/rtaudio/apinotes.html)). The audio-data are (optionally but highly recommended) encoded with the included [opus-codec](http://www.opus-codec.org/).
OHMComm is based upon [RtAudio](http://www.music.mcgill.ca/~gary/rtaudio/) and therefore supports all audio-libraries supported by RtAudio (see [RtAudio API-Notes](http://www.music.mcgill.ca/~gary/rtaudio/apinotes.html)).
The audio-data are (optionally but highly recommended) encoded with the included [opus-codec](http://www.opus-codec.org/).
As of version 0.8, RtAudio as well as Opus are optional and [PortAudio](http://www.portaudio.com/) is also supported as audio-library.
By additionally supporting [SIP](https://tools.ietf.org/html/rfc3261) as well as the audio-codecs Opus, G.711 A-law and mu-law,
OHMComm can be used to call or get called by any other SIP-based VoIP application.

The OHMComm framework is highly extensible. Any audio-library or codec can be added by writing a wrapper-class
and registering it with the correct factory-class.

## Build it

Expand All @@ -29,4 +37,18 @@ This will build the library/executable into `<project-directory>/build/` by defa
$ cd <executable-directory>
$ ./OHMComm # To run in interactive mode
$ ./OHMComm -h # Prints all command-line arguments
$ ./OHMComm path/to/config-file # Runs in file-configuration mode
$ ./OHMComm path/to/config-file # Runs in file-configuration mode

## Supported libraries
#### Audio libraries
- [RtAudio](http://www.music.mcgill.ca/~gary/rtaudio/): A platform-independent API for accessing audio-drivers written in C++
- [PortAudio](http://www.portaudio.com/): Another platform-independent audio API for accessing native libraries, written in C

#### Codecs
- [Opus](http://www.opus-codec.org/): An highly effective audio-codec, primarily used for real-time applications (e.g. VoIP)
- [G.711](https://www.itu.int/rec/T-REC-G.711): The two audio-codecs (A-law and mu-law) used for digital telephony

## Features
- Fully standard-conform communication based on [RTP](https://tools.ietf.org/html/rfc3550) including full [RTCP](https://tools.ietf.org/html/rfc3550#section-6) support
- Support for direct calls to and from any VoIP application featuring [SIP](https://tools.ietf.org/html/rfc3261)
- Support for DTX to further decrease required bandwidth
37 changes: 37 additions & 0 deletions appveyor.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
platform:
- x86
- x64

configuration:
- Release

os:
- Visual Studio 2015 RC

build_script:
- md build
- cd build
- cmake -DBUILD_TESTING=ON -DTEST_OUTPUT_CONSOLE=ON -G"Visual Studio 14 2015" ..
- cmake --build .

after_build:
- ps: Push-AppveyorArtifact build\Debug\OHMComm.exe -FileName "OHMComm-win-$env:platform.exe"

#test_script:
# - .\build\test\Debug\Tests.exe

#artifacts:
# - path: '**\OHMComm.exe'
# name: OHMComm-win-$(platform)

deploy:
- provider: GitHub
description: 'Windows builds'
draft: false
prerelease: false
artifact: OHMComm-win-$(platform).exe
auth_token:
secure: fIObA1SGSxF/oK69Deh0D7eTmdJirubBGCjbHDn7EA7M4mP2AdkHDEheW77PTPge
on:
#branch: master
appveyor_repo_tag: true
84 changes: 75 additions & 9 deletions include/AudioHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,37 @@ class AudioHandler
{
public:

//Container for storing info about a single audio-device, library-independent
struct AudioDevice
{
//name of this audio-device
const std::string name;
//the maximum number of available output-channels
//a value of 0 signals a non-output device
const unsigned int outputChannels;
//the maximum number of available input-channels
//a value of 0 signals a non-input device
const unsigned int inputChannels;
//whether this device is the default output device
const bool defaultOutputDevice;
//whether this device is the default input device
const bool defaultInputDevice;
//a bit-mask of natively supported audio-formats
const unsigned int nativeFormats;
//a list of all supported sample-rates
const std::vector<unsigned int> sampleRates;

inline bool isOutputDevice() const
{
return outputChannels > 0;
}

inline bool isInputDevice() const
{
return inputChannels > 0;
}
};

AudioHandler();

virtual ~AudioHandler();
Expand Down Expand Up @@ -74,12 +105,12 @@ class AudioHandler
*
* This includes allocating memory, configuring the audio-processors or the audio-library, etc.
*/
virtual auto prepare(const std::shared_ptr<ConfigurationMode> configMode) -> bool = 0;
virtual bool prepare(const std::shared_ptr<ConfigurationMode> configMode) = 0;

/*!
* Returns the actual buffer size, which can be different than in the audio configuration (
*/
virtual auto getBufferSize() -> unsigned int = 0;
virtual unsigned int getBufferSize() = 0;

/*!
* Prints all included AudioProcessor in the processing order
Expand Down Expand Up @@ -131,7 +162,7 @@ class AudioHandler
*
* \return The result of the action
*/
auto hasAudioProcessor(AudioProcessor *audioProcessor) const -> bool;
bool hasAudioProcessor(AudioProcessor *audioProcessor) const;

/*!
* Gives a information wheater the an AudioProcessor is already added or not
Expand All @@ -140,28 +171,35 @@ class AudioHandler
*
* \return The result of the action
*/
auto hasAudioProcessor(std::string nameOfAudioProcessor) const -> bool;
bool hasAudioProcessor(std::string nameOfAudioProcessor) const;

/*!
* Returns the current AudioConfiguration
*
* \return Current AudioConfiguration
*/
auto getAudioConfiguration() -> AudioConfiguration;
AudioConfiguration getAudioConfiguration();

/*!
* Returns wheater the instance has an AudioConfiguration
*
* \return Status of the AudioConfiguration
*/
auto isAudioConfigSet() const -> bool;
bool isAudioConfigSet() const;

/*!
* Returns wheater instance is prepared (ready) for execution
*
* \return Prepared status of the instance
*/
auto isPrepared() const -> bool;
bool isPrepared() const;

/*!
* Returns a platform- and library-independent list of all available audio-devices
*
* \return a reference to all local audio-devices
*/
virtual const std::vector<AudioDevice>& getAudioDevices() = 0;

protected:
bool flagAudioConfigSet = false;
Expand All @@ -175,8 +213,36 @@ class AudioHandler
/*!
* Calls AudioProcessor#configure() for all registered processors
*/
auto configureAudioProcessors(const std::shared_ptr<ConfigurationMode> configMode) -> bool;
auto cleanUpAudioProcessors() -> bool;
bool configureAudioProcessors(const std::shared_ptr<ConfigurationMode> configMode);
bool cleanUpAudioProcessors();

/*!
* Automatically selects the best audio format out of the supported formats
*/
unsigned int autoSelectAudioFormat(unsigned int supportedFormats);

/*!
* Returns the sample-rate as number of the best supported sample-rate flag
*/
unsigned int autoSelectSampleRate(unsigned int supportedRatesFlag);

/*!
* "Asks" the AudioProcessors for supported audio-configuration and uses the sample-rate, frame-size and
* number of samples per package all processors can agree on
*
* \return whether all processors could agree on a value for every field
*/
bool queryProcessorSupport();

/*!
* Maps the supported sample-rates from the device to the flags specified in AudioConfiguration
*/
unsigned int mapDeviceSampleRates(std::vector<unsigned int> sampleRates);

/*!
* Returns the best match for the number of buffered frames according to all processors
*/
unsigned int findOptimalBufferSize(unsigned int defaultBufferSize);
};

#endif
2 changes: 2 additions & 0 deletions include/AudioHandlerFactory.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ class AudioHandlerFactory
public:
/*! Name for the RtAudioWrapper */
static const std::string RTAUDIO_WRAPPER;
/*! name for the PortAudioWrapper */
static const std::string PORTAUDIO_WRAPPER;

/*!
* \param name The name of the audio-handler to create
Expand Down
18 changes: 12 additions & 6 deletions include/AudioProcessor.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,7 @@

#include "configuration.h"
#include "ConfigurationMode.h"
#include "rtp/RTPPackageHandler.h"

/*!
* This AudioProcessor supports any buffer-length
*/
const int BUFFER_SIZE_ANY = -1;
#include "rtp/RTPHeader.h"

/*!
* Information about the stream to be passed to the process-methods of AudioProcessor.
Expand All @@ -35,6 +30,12 @@ struct StreamData
* The maximum number of bytes to be stored in the input/output-buffer
*/
unsigned int maxBufferSize;

/*!
* Whether the current package is a silent-package.
* A silence-package has all samples set to a volume of zero
*/
bool isSilentPackage;
};

/*!
Expand All @@ -48,6 +49,11 @@ struct StreamData
class AudioProcessor
{
public:
/*!
* This AudioProcessor supports any buffer-length
*/
static constexpr int BUFFER_SIZE_ANY{1};

AudioProcessor(const std::string name);

virtual ~AudioProcessor()
Expand Down
3 changes: 3 additions & 0 deletions include/AudioProcessorFactory.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ class AudioProcessorFactory
public:
static const std::string OPUS_CODEC;
static const std::string WAV_WRITER;
static const std::string G711_PCMA;
static const std::string G711_PCMU;
static const std::string GAIN_CONTROL;

/*!
* Returns the AudioProcessor for the given name
Expand Down
Loading