|
|
|
@ -43,6 +43,7 @@ the following additional features are available: |
|
|
|
- RTP/RTCP multiplexing (RFC 5761) and demultiplexing |
|
|
|
- Breaking of BUNDLE'd media streams (draft-ietf-mmusic-sdp-bundle-negotiation) |
|
|
|
- Recording of media streams, decrypted if possible |
|
|
|
- Transcoding and repacketization |
|
|
|
|
|
|
|
*Rtpengine* does not (yet) support: |
|
|
|
|
|
|
|
@ -58,7 +59,7 @@ On a Debian System |
|
|
|
On a Debian system, everything can be built and packaged into Debian packages |
|
|
|
by executing `dpkg-buildpackage` (which can be found in the `dpkg-dev` package) in the main directory. |
|
|
|
This script will issue an error and stop if any of the dependency packages are |
|
|
|
not installed. |
|
|
|
not installed. The script `dpkg-checkbuilddeps` can be used to check missing dependencies. |
|
|
|
|
|
|
|
Before that, run `./debian/flavors/no_ngcp` in order to remove any NGCP dependencies. |
|
|
|
|
|
|
|
@ -96,6 +97,10 @@ The generated files are (with version 2.3.0 being built on an amd64 system): |
|
|
|
module for manual compilation. Required for in-kernel operation, but only if the DKMS package |
|
|
|
can't be used. |
|
|
|
|
|
|
|
For transcoding purposes, Debian provides an additional package `libavcodec-extra` to replace |
|
|
|
the regular `libavcodec` package. It is recommended to install this extra package to offer support |
|
|
|
for additional codecs. |
|
|
|
|
|
|
|
Manual Compilation |
|
|
|
------------------ |
|
|
|
|
|
|
|
@ -115,6 +120,7 @@ There's 3 parts to *rtpengine*, which can be found in the respective subdirector |
|
|
|
- *XMLRPC-C* version 1.16.08 or higher |
|
|
|
- *hiredis* library |
|
|
|
- *libiptc* library for iptables management (optional) |
|
|
|
- *ffmpeg* codec libraries for transcoding (options) such as *libavcodec*, *libavfilter*, *libavresample* |
|
|
|
|
|
|
|
The `Makefile` contains a few Debian-specific flags, which may have to removed for compilation to |
|
|
|
be successful. This will not affect operation in any way. |
|
|
|
@ -123,6 +129,9 @@ There's 3 parts to *rtpengine*, which can be found in the respective subdirector |
|
|
|
`Makefile` also contains a switch to disable it. See the `--iptables-chain` option for |
|
|
|
a description. |
|
|
|
|
|
|
|
Similarly, the transcoding feature can be excluded via a switch in the `Makefile`, making it |
|
|
|
unnecessary to have the *ffmpeg* libraries installed. |
|
|
|
|
|
|
|
* `iptables-extension` |
|
|
|
|
|
|
|
Required for in-kernel packet forwarding. |
|
|
|
@ -207,6 +216,7 @@ option and which are reproduced below: |
|
|
|
--recording-method=pcap|proc Strategy for call recording |
|
|
|
--recording-format=raw|eth PCAP file format for recorded calls. |
|
|
|
--iptables-chain=STRING Add explicit firewall rules to this iptables chain |
|
|
|
--codecs Print a list of supported codecs and exit |
|
|
|
|
|
|
|
Most of these options are indeed optional, with two exceptions. It's mandatory to specify at least one local |
|
|
|
IP address through `--interface`, and at least one of the `--listen-...` options must be given. |
|
|
|
@ -855,6 +865,52 @@ then the start-up sequence might look like this: |
|
|
|
With this setup, the SIP proxy can choose which instance of *rtpengine* to talk to and thus which local |
|
|
|
interface to use by sending its control messages to either port 2223 or port 2224. |
|
|
|
|
|
|
|
Transcoding |
|
|
|
=========== |
|
|
|
|
|
|
|
Currently transcoding is supported for audio streams. The feature can be disabled on a compile-time |
|
|
|
basis, and is enabled by default. |
|
|
|
|
|
|
|
Even though the transcoding feature is available by default, it is not automatically engaged for |
|
|
|
normal calls. Normally *rtpengine* leaves codec negotation up to the clients involved in the call |
|
|
|
and does not interfere. In this case, if the clients fail to agree on a codec, the call will fail. |
|
|
|
|
|
|
|
The transcoding feature can be engaged for a call by instructing *rtpengine* to do so by using |
|
|
|
one of the transcoding options in the *ng* control protocol, such as `transcode` or `ptime` (see below). |
|
|
|
If a codec is requested via the `transcode` option that was not originally offered, transcoding will |
|
|
|
be engaged for that call. |
|
|
|
|
|
|
|
With transcoding active for a call, all unsupported codecs will be removed from the SDP. Transcoding |
|
|
|
happens in userspace only, so in-kernel packet forwarding will not be available for transcoded codecs. |
|
|
|
|
|
|
|
The following codecs are supported by *rtpengine*: |
|
|
|
|
|
|
|
* G.711 (a-Law and µ-Law) |
|
|
|
* G.722 |
|
|
|
* G.723.1 |
|
|
|
* Speex |
|
|
|
* GSM |
|
|
|
* iLBC |
|
|
|
* Opus |
|
|
|
* AMR (narrowband and wideband) |
|
|
|
|
|
|
|
Codec support is dependent on support provided by the `ffmpeg` codec libraries, which may vary from |
|
|
|
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 |
|
|
|
in *ffmpeg*, *rtpengine* will be able to support them. |
|
|
|
|
|
|
|
Audio format conversion including resampling and mono/stereo up/down-mixing happens automatically |
|
|
|
as required by the codecs involved. For example, one side could be using stereo Opus at 48 kHz |
|
|
|
sampling rate, and the other side could be using mono G.711 at 8 kHz, and *rtpengine* will perform |
|
|
|
the necessary conversions. |
|
|
|
|
|
|
|
If repacketization (using the `ptime` option) is requested, the transcoding feature will also be |
|
|
|
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. |
|
|
|
|
|
|
|
The *ng* Control Protocol |
|
|
|
========================= |
|
|
|
|
|
|
|
|