.. _licensing_3rd_party:
Third Party SOFTWARE
=====================
.. contents:: Table of Contents
:depth: 2
The SOFTWARE may provide links to third party libraries or code (collectively "Third Party
Software") to implement various functions, and access to Third Party Software may be
included along with the SOFTWARE delivery as a convenience. Third Party Software does not
comprise part of the SOFTWARE.
The use of Third Party Software may or may not be made optional (depending on the nature of
the software).
Contributed and Public Domain Third Party Software
-------------------------------------------------------
ACE Timer Heap
~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 0
* - Software
- Timer heap management of ​Adaptive Communication Framework (ACE) Library
* - Author
- Douglas C. Schmidt and his research group at Washington University, University of
California, Irvine, and Vanderbilt University, Copyright (c) 1993-2006, all rights reserved
* - Location
- - :source:`pjlib/include/pj/timer.h`
- :source:`pjlib/src/pj/timer.c`
* - Description
- The timer heap in PJLIB was based on ACE's Timer_Heap
* - License
- Permissions have been obtained from the copyright holder/original author (Douglas C.
Schmidt) to use and redistribute this code according to the SOFTWARE licenses. You may,
at your option, opt to use ACE license for this particular software.
* - Usage
- This code is integral part of the library and can not be disabled.
Alaw/Ulaw Converter
~~~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 0
* - Software
- Alaw/ulaw conversion algorithm
* - Author
- Sun Microsystems, Inc
* - Location
- :source:`pjmedia/src/pjmedia/alaw_ulaw.c`
* - Description
- PCM Alaw and U-law conversion
* - License
- Free and unrestricted use, see the source code for details.
* - Usage
- This software is not used by default unless :c:macro:`PJMEDIA_HAS_ALAW_ULAW_TABLE` is disabled.
When :c:macro:`PJMEDIA_HAS_ALAW_ULAW_TABLE` is enabled (the default setting), a table based
alaw/ulaw conversion will be used instead.
CRC32 Algorithm
~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 0
* - Software
- CRC32 algorithm
* - Author
- Unknown
* - Location
- :source:`pjlib-util/src/pjlib-util/crc32.c`
* - Description
-
* - License
- This software is put in public domain, and can be used for any purpose with no warranty::
This is an implementation of CRC32. See ISO 3309 and ITU-T V.42
for a formal specification
This file is partly taken from Crypto++ library (http://www.cryptopp.com)
and http://www.di-mgt.com.au/crypto.html#CRC.
Since the original version of the code is put in public domain,
this file is put on public domain as well.
* - Usage
- This code is needed by the STUN implementation in PJNATH and can not be disabled.
MD5 Hashing Algorithm
~~~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 0
* - Software
- MD5 hashing implementation
* - Author
- Written by Colin Plumb in 1993 based on MD5 algorithm by Ron Rivest, no copyright is claimed.
* - Location
- :source:`pjlib-util/src/pjlib-util/md5.c`
* - Description
- MD5 hashing for digest authentication.
* - License
- Public domain, see the source code for details.
* - Usage
- This code is needed by SIP digest authentication procedure, and can not be disabled.
SHA1 Encryption
~~~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 0
* - Software
- SHA1 Encryption
* - Author
- Steve Reid, James H. Brown, Saul Kravitz, Ralph Giles
* - Location
- :source:`pjlib-util/src/pjlib-util/sha1.c`
* - License
- Public domain, see the source code for details.
* - Usage
- This code is needed by the STUN implementation in PJNATH and can not be disabled.
G.722 Codec
~~~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 0
* - Software
- G.722 audio encoding and decoding algorithm
* - Author
- Based on the implementation found in
ftp://ftp.cs.cmu.edu/project/fgdata/speech-compression/CCITT-ADPCM/64kbps/adpcm64_g722/.
No copyright is claimed on the original source code. The author is possibly Milton Anderson
(milton@thumper.bellcore.com) from BELLCORE
* - Location
- :sourcedir:`pjmedia/src/pjmedia-codec/g722/`
* - Description
- The G.722 codec algorithms are included in PJMEDIA source directory
* - License
- Public domain software
* - Usage
- This software will only be linked if application explicitly initialize the G.722 library
by calling :cpp:any:`pjmedia_codec_g722_init()`. Note that if PJSUA-LIB is used, then this call is
made by PJSUA-LIB, hence causing your application to be linked with the software. The
software can be explicitly disabled from the link process by defining
:c:macro:`PJMEDIA_HAS_G722_CODEC` to zero.
Third Party Software with Licensing Requirements
-------------------------------------------------------
The use of Third Party Software below will require compliance of the licensing requirements of
the Third Party Software. You must make sure that your software meets the licensing requirements
of the third party libraries below. Some third party libraries may require attributions to be
placed in the software, significant portion of the software, and/or in the accompanying
documentation.
GNU Getopt
~~~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 0
* - Software
- Command line parsing library, part of GNU LIBC
* - Author
- Copyright (C) 1987,88,89,90,91,92,93,94,96,97 Free Software Foundation, Inc
* - Location
- - :source:`pjlib-util/include/pjlib-util/getopt.h`
- :source:`pjlib-util/src/pjlib-util/getopt.c`
* - Description
- Command line parsing library that is used by our sample applications
* - License
- GNU LGPL
* - Usage
- This code will only be linked if applications explicitly call :cpp:any:`pj_getopt()`
or :cpp:any:`pj_getopt_long()`. Normally application doesn't need to use this, since this
functionality is useful for command line/console types of applications only.
Resample
~~~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 0
* - Software
- High Quality Sample Rate Conversion
* - Author
- https://ccrma.stanford.edu/~jos/resample/
* - Location
- :sourcedir:`third_party/resample/`
* - Description
- PJMEDIA uses ``resample-1.7.tar.gz`` from
`Digital Audio Resampling Home Page `__.
* - License
- LGPL: :source:`third_party/resample/COPYING`
* - Usage
- This resampling software is used by the conference bridge. This software is used
when the :c:macro:`PJMEDIA_RESAMPLE_IMP` macro is set to :c:macro:`PJMEDIA_RESAMPLE_LIBRESAMPLE`,
which is the default. Other options for resampling backends include Speex and
Secret Rabbit Code (which is dual licensed). Please see :c:macro:`PJMEDIA_RESAMPLE_IMP`
documentation for more info.
GSM Codec 06.10
~~~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 0
* - Software
- `GSM 06.10 `_
* - Author
- Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann, Technische
Universitaet Berlin
* - Location
- :sourcedir:`third_party/gsm`
* - Description
- PJMEDIA includes uses GSM 06.10 version 1.0 at patchlevel 12
* - License
- Free to use with no warranty: :source:`third_party/gsm/COPYRIGHT`
* - Usage
- This software will only be linked if application explicitly initialize the
GSM library by calling :cpp:any:`pjmedia_codec_gsm_init()`. Note that if PJSUA-LIB
is used, then this call is made by PJSUA-LIB, hence causing your application
to be linked with the software. The software can be explicitly disabled from
the link process by defining :c:macro:`PJMEDIA_HAS_GSM_CODEC` to zero.
Speex
~~~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 0
* - Software
- Speex codec, acoustic echo cancellation, and sampling rate conversion.
* - Author
- https://speex.org/
* - Location
- :sourcedir:`third_party/speex/`
* - Description
- PJMEDIA uses Speex codec version 1.2beta3. Speex is a high quality, Open source,
patent free codec implementation developed by open source community.
* - License
- :source:`third_party/speex/COPYING`
* - Usage
- - **Speex codec**: this software will only be linked if application explicitly
initialize the Speex library by calling :cpp:any:`pjmedia_codec_speex_init()`.
Note that if PJSUA-LIB is used, then this call is made by PJSUA-LIB,
hence causing your application to be linked with the software. The
software can be explicitly disabled from the link process by defining
:c:macro:`PJMEDIA_HAS_SPEEX_CODEC` to zero.
- **Speex AEC**: Speex acoustic echo cancellation is enabled by default for
the sound device. Application can disable this by setting
:c:macro:`PJMEDIA_HAS_SPEEX_AEC` to zero.
- **Speex sample rate converter**: Speex sample rate converter is only used
when :c:macro:`PJMEDIA_HAS_SPEEX_RESAMPLE` macro is set to non-zero. The
default is disabled.
iLBC Codec
~~~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 0
* - Software
- iLBC Audio Codec
* - Author
- `WebRTC Project `_
* - Location
- :sourcedir:`third_party/ilbc/`
* - Description
- PJMEDIA supports iLBC codec, and iLBC codec implementation is included in PJSIP
source distribution.
* - License
- ::
iLBC is distributed under the following free license::
Copyright 2011 The WebRTC project authors
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name of Google nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* - Usage
- This software will only be linked if application explicitly initialize
the iLBC library by calling :cpp:any:`pjmedia_codec_ilbc_init()`. Note that if
PJSUA-LIB is used, then this call is made by PJSUA-LIB, hence causing
your application to be linked with the software. The software can be
explicitly disabled from the link process by defining
:c:macro:`PJMEDIA_HAS_ILBC_CODEC` to zero.
G.722.1/C (aka Siren7 and Siren14) codecs
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 0
* - Software
- Siren7/ITU-T G.722.1, licensed from Polycom, and Siren14/ITU-T
G.722.1 Annex C, licensed from Polycom
* - Author
- `Polycom `_
* - Location
- :sourcedir:`third_party/g7221/`
* - Description
- PJMEDIA supports G.722.1/C codecs, and G.722.1/C codec implementation is
included in PJSIP source distribution.
* - License
- We have acquired a license from Polycom to distribute the codec with PJSIP,
however you (the user of PJSIP software) MUST acquire the license from Poly
(previously Polycom) yourself to use the codec and/or distribute software
linked with the codec. Please see
https://web.archive.org/web/20140709022721/http://www.polycom.com/company/about-us/technology/siren/siren-faq.html
for more info (this is temporarily a web archive link because when Polycom
became Poly the original link disappeared).
* - Usage
- This software is by default disabled, due to the licensing restriction above.
The software can be explicitly enabled by defining :c:macro:`PJMEDIA_HAS_G7221_CODEC`
to one.
Milenage and Rijndael
~~~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 0
* - Software
- Milenage
* - Author
- The implementation was taken from
`3GPP TS 35.206 V7.0.0 `__
document
* - Location
- :sourcedir:`third_party/milenage/`
* - Description
- Milenage algorithm is used for AKAv1-MD5 and AKAv2 SIP digest authentication.
* - License
- Please consult `3GPP TS documents `__ ::
The 3GPP authentication and key generation functions (MILENAGE) have been developed
through the collaborative efforts of the 3GPP Organizational Partners.
They may be used only for the development and operation of 3G Mobile Communications and
services. There are no additional requirements or authorizations necessary for these
algorithms to be implemented.
* - Usage
- The Milenage and Rijndael implementation will only be linked with application if
AKA authentication is used and application explicitly calls or makes reference to
:cpp:any:`pjsip_auth_create_aka_response()` function.
libSRTP
~~~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 0
* - Software
- `libSRTP `_
* - Author
- David A. McGrew, Cisco Systems, Inc.
* - Location
- :sourcedir:`third_party/srtp/`
* - Description
- libSRTP implements Secure RTP/RTCP (SRTP and SRTCP).
* - License
- BSD 3-clause: :source:`third_party/srtp/README.md`
* - Usage
- Copy of libSRTP is included in PJSIP distribution, and it is built by
default on all supported platforms. SRTP functionality is also enabled
by default. If you wish to disable SRTP, declare :c:macro:`PJMEDIA_HAS_SRTP`
macro to zero.
DirectShow Base Classes Microsoft SDK Sample
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 0
* - Software
- `​DirectShow Base Classes `_
* - Author
- Microsoft
* - Location
- :sourcedir:`third_party/BaseClasses/`
* - Description
- The DirectShow base classes are a set of C++ classes and utility functions
designed for implementing DirectShow filters. Several of the helper classes
are also useful for application developers.
* - License
- Microsoft Windows SDK Licence (Licence.htm in Windows SDK installation directory)::
Sample Code. You may modify, copy, and distribute the source and
object code form of code marked as "sample."
* - Usage
- Used in DirectShow device driver for video capture support on Windows platform.
If you wish to disable it define macro :c:macro:`PJMEDIA_VIDEO_DEV_HAS_DSHOW` to 0.
This will disable video capture on Windows.
libYUV
~~~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 0
* - Software
- https://chromium.googlesource.com/libyuv/libyuv/
* - Author
- The LibYuv Project Authors
* - Location
- :sourcedir:`third_party/yuv/`
* - Description
- Video conversion utilities.
* - License
- - BSD 3-clause: :source:`third_party/yuv/LICENSE`
- Third-party: :source:`third_party/yuv/LICENSE_THIRD_PARTY`
* - Usage
- Libyuv may be detected and enabled by the configure script, either automatically
or manually via ``--with-libyuv`` option. It may be forcefully disabled by
defining :c:macro:`PJMEDIA_HAS_LIBYUV` to 0 in :any:`config_site.h`.
WebRTC
~~~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 0
* - Software
- https://chromium.googlesource.com/external/webrtc/+/master
* - Location
- :sourcedir:`third_party/webrtc/`
* - Description
- WebRTC Acoustic Echo Cancellation
* - License
- Please consult:
- :source:`third_party/webrtc/LICENSE`
- :source:`third_party/webrtc/LICENSE_THIRD_PARTY`
* - Usage
- WebRTC AEC is by default enabled, but can be disabled by passing
``--disable-webrtc`` to the configure script or defining
:c:macro:`PJMEDIA_HAS_WEBRTC_AEC` to 0 in :any:`config_site.h`.
WebRTC AEC3
~~~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 0
* - Software
- https://webrtc.googlesource.com/src
* - Location
- https://github.com/pjsip/pjproject/tree/master/third_party/webrtc_aec3/
* - Description
- WebRTC AEC3
* - License
- Please consult:
- :source:`third_party/webrtc_aec3/PJSIP_NOTES`
Specifically, please consult WebRTC's license in:
- :source:`third_party/webrtc_aec3/LICENSE`
as well as the licenses of the third party components required in:
- :source:`third_party/webrtc_aec3/src/absl/LICENSE` (abseil),
- :source:`third_party/webrtc_aec3/src/third_party/rnnoise/COPYING`
(rnnoise),
- :source:`third_party/webrtc_aec3/src/third_party/pffft/README.txt` (pffft)
* - Usage
- WebRTC AEC3 can be enabled by passing ``--enable-libwebrtc-aec3`` to the
``configure`` script.
External Third Party Software
-------------------------------------------------------
The SOFTWARE may be linked with these external third party software (i.e. libraries that are
not shipped with the SOFTWARE).
bcg729
~~~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 0
* - Software
- https://github.com/BelledonneCommunications/bcg729
* - Location
- - :source:`pjmedia/include/pjmedia-codec/bcg729.h`
- :source:`pjmedia/src/pjmedia-codec/bcg729.c`
* - Description
- G.729 codec using backend implementation from bcg729
* - License
- https://github.com/BelledonneCommunications/bcg729?tab=readme-ov-file#licensing
* - Usage
- See :ref:`bcg729`
ffmpeg and libx264
~~~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 0
* - Software
- - https://www.ffmpeg.org
- http://www.videolan.org/developers/x264.html
* - Location
- - :source:`pjmedia/src/pjmedia-codec/ffmpeg_vid_codecs.c`
- :source:`pjmedia/src/pjmedia/ffmpeg_util.c`
- :source:`pjmedia/src/pjmedia/converter_libswscale.c`
* - Description
- Ffmpeg and libx264 are used as codec backends for H.263 and H.264 and as video
format converter.
* - License
- Please consult the Ffmpeg and libx264 websites.
* - Usage
- See :ref:`ffmpeg`.
Oboe
~~~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 0
* - Software
- https://github.com/google/oboe
* - Author
- https://github.com/google/oboe/blob/main/AUTHORS
* - Location
- :source:`pjmedia/src/pjmedia-audiodev/oboe_dev.cpp`
* - Description
- PJSIP may be configured to use Oboe capture and playback audio device on Android
* - License
- Apache 2.0. See https://github.com/google/oboe/blob/main/LICENSE
* - Usage
- See :ref:`oboe`
OpenCore AMR
~~~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 0
* - Software
- https://sourceforge.net/projects/opencore-amr/
* - Location
- :source:`pjmedia/src/pjmedia-codec/opencore_amr.c`
* - Description
- OpenCore AMR NB/WB codec can be used with the SOFTWARE
* - License
- Apache v2 license, but it may contain derived work of other project. Please check the
website for the details.
* - Usage
- See :ref:`opencore_amr`
OpenH264
~~~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 0
* - Software
- http://www.openh264.org/
* - Location
- :source:`pjmedia/src/pjmedia-codec/openh264.cpp`
* - Description
- OpenH264 codec
* - License
- Please consult the OpenH264 website
* - Usage
- See :ref:`openh264`
OpenSSL
~~~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 0
* - Software
- http://www.openssl.org/
* - Location
- :source:`pjlib/src/pj/ssl_sock_ossl.c`
* - Description
- OpenSSL is used as the backend implementation of PJLIB's secure socket, which among
other thing is used by PJSIP's SIP TLS transport object.
* - License
- The OpenSSL library is licensed under
`Apache-style license `__, but this is
deemed to be `incompatible with GPL `_
(hence we give explicit permission to link with it).
* - Usage
- See :any:`/specific-guides/security/ssl`
Opus
~~~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 0
* - Software
- Opus is a totally open, royalty-free, highly versatile audio codec.
* - Author
- https://www.opus-codec.org/
* - Location
- :source:`pjmedia/src/pjmedia-codec/opus.c`
* - License
- https://www.opus-codec.org/license/
* - Usage
- See :ref:`opus`
Silk
~~~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 0
* - Software
- https://github.com/mycelialold/spore/tree/master/jni/silk/sources
* - Location
- :source:`pjmedia/src/pjmedia-codec/silk.c`
* - Description
- Silk codec
* - License
- Please check the website
* - Usage
- See :ref:`silk`
VPX
~~~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 0
* - Software
- libvpx: https://www.webmproject.org/code/
* - Location
- :source:`pjmedia/src/pjmedia-codec/vpx.c`
* - Description
- VP8 and VP9 video codecs
* - License
- BSD 3-clause: https://github.com/webmproject/libvpx/blob/main/LICENSE
* - Usage
- See :ref:`libvpx`