diff --git a/README.md b/README.md index 0005596bc..d87f107de 100644 --- a/README.md +++ b/README.md @@ -892,6 +892,7 @@ The following codecs are supported by *rtpengine*: * G.711 (a-Law and ยต-Law) * G.722 * G.723.1 +* G.729 * Speex * GSM * iLBC @@ -902,7 +903,7 @@ Codec support is dependent on support provided by the `ffmpeg` codec libraries, version to version. Use the `--codecs` command line option to have *rtpengine* print a list of codecs and their supported status. The list includes some codecs that are not listed above. Some of these are not actual VoIP codecs (such as MP3), while others lack support for encoding by *ffmpeg* at the -time of writing (such as G.729, QCELP, or ATRAC). If encoding support for these codecs becomes available +time of writing (such as QCELP or ATRAC). If encoding support for these codecs becomes available in *ffmpeg*, *rtpengine* will be able to support them. Audio format conversion including resampling and mono/stereo up/down-mixing happens automatically @@ -915,6 +916,15 @@ engaged for the call, even if no additional codecs were requested. Non-audio pseudo-codecs (such as T.38 or RFC 4733 `telephone-event`) are not currently supported. +G.729 support +------------- + +As *ffmpeg* does not currently provide an encoder for G.729, transcoding support for it is available +via the [bcg729](https://www.linphone.org/technical-corner/bcg729/overview) library +(mirror on [GitHub](https://github.com/BelledonneCommunications/bcg729)). The build system looks for +the *bcg729* headers in a few locations and uses the library if found. If the library is located +elsewhere, see `daemon/Makefile` to control where the build system is looking for it. + The *ng* Control Protocol ========================= @@ -1342,7 +1352,8 @@ Optionally included keys are: Contains an integer. If set, changes the `a=ptime` attribute's value in the outgoing SDP to the provided value. It also engages the transcoding engine for supported codecs to provide repacketization functionality, even if no additional codec has actually - been requested for transcoding. + been requested for transcoding. Note that not all codecs support all packetization + intervals. An example of a complete `offer` request dictionary could be (SDP body abbreviated): diff --git a/daemon/Makefile b/daemon/Makefile index a8f2a6ed6..c084730bd 100644 --- a/daemon/Makefile +++ b/daemon/Makefile @@ -4,6 +4,10 @@ with_iptables_option ?= yes with_transcoding ?= yes # look for bcg729 +# system +ifneq (,$(wildcard /usr/include/bcg729/decoder.h)) +have_bcg729 := yes +else # /usr/src ifneq (,$(wildcard /usr/src/bcg729/include/bcg729/decoder.h)) have_bcg729 := yes @@ -31,6 +35,7 @@ endif endif endif endif +endif CFLAGS= -g -Wall -pthread -fno-strict-aliasing CFLAGS+= -std=c99 @@ -61,7 +66,10 @@ else CFLAGS+= -DWITHOUT_CODECLIB endif ifeq ($(have_bcg729),yes) -CFLAGS+= -DHAVE_BCG729 -I$(bcg729_inc) +CFLAGS+= -DHAVE_BCG729 +ifneq ($(bcg729_inc),) +CFLAGS+= -I$(bcg729_inc) +endif endif CFLAGS+= -DRE_PLUGIN_DIR="\"/usr/lib/rtpengine\"" @@ -97,7 +105,10 @@ LDFLAGS+= `pkg-config --libs libavresample` LDFLAGS+= `pkg-config --libs libavfilter` endif ifeq ($(have_bcg729),yes) -LDFLAGS+= -L$(bcg729_lib) -lbcg729 +ifneq ($(bcg729_lib),) +LDFLAGS+= -L$(bcg729_lib) +endif +LDFLAGS+= -lbcg729 endif include ../lib/lib.Makefile