PJMEDIA-Codec

List of audio and video codecs supported by PJMEDIA-Codec.

Audio Codecs

Video Codecs

Detail information:

Android H.264, VP8, VP9 (native)

Android AMediaCodec provides native AMR-NB and AMR-WB audio codecs and AVC (H264), VP8, VP9 video codecs for Android.

BCG729 (a G.729 compliant codec)

FFMPEG codecs (H.261, H.263, H.263P (H263-1998), H.264, MJPEG, VP8, VP9)

See Adding FFMPEG support.

See also:

G.711

  • ITU G.711 codec is built-in and enabled by default in PJMEDIA (controlled by PJMEDIA_HAS_G711_CODEC macro)

  • Fast table vs compute-based implementation are available (controlled by PJMEDIA_HAS_ALAW_ULAW_TABLE macro)

  • Code documentation: G.711

G.722

  • ITU G.722 wideband codec is built-in and enabled by default in PJMEDIA-Codec (controlled by PJMEDIA_HAS_G722_CODEC macro)

  • Code documentation: G.722

G.722.1/C

  • ITU G.722.1 (a.k.a Siren7/Siren14 codecs) is shipped with PJPROJECT.

  • Beware of licensing requirement to use this codec. 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.

  • This codec is by default disabled, due to the licensing restriction above.

  • To enable it, declare in config_site.h:

    #define PJMEDIA_HAS_G7221_CODEC  1
    
  • Code documentation: G.722.1

GSM FR

  • GSM codec is built-in and enabled by default in PJMEDIA-Codec (controlled by PJMEDIA_HAS_GSM_CODEC macro)

  • Code documentation: GSM FR

ILBC

  • Software based ILBC codec is built-in and enabled by default in PJMEDIA-Codec (controlled by PJMEDIA_HAS_ILBC_CODEC macro)

  • Optimized implementation is available for Mac OS X and iOS. To enable it, declare this in your config_site.h:

    #define PJMEDIA_ILBC_CODEC_USE_COREAUDIO 1
    
  • Code documentation: ILBC

Intel IPP codecs

Linear/PCM 8/16bit mono/stereo

  • These are family of L8/L16 codecs shipped with PJMEDIA. It supports stereo codec.

  • By default they are disabled because we’re running out of static RTP payload types.

  • To enable it, set the codec(s) you desire to use to 1 in config_site.h:

    #define PJMEDIA_CODEC_L16_HAS_8KHZ_MONO     1
    #define PJMEDIA_CODEC_L16_HAS_8KHZ_STEREO   1
    #define PJMEDIA_CODEC_L16_HAS_16KHZ_MONO    1
    #define PJMEDIA_CODEC_L16_HAS_16KHZ_STEREO  1
    #define PJMEDIA_CODEC_L16_HAS_48KHZ_MONO    1
    #define PJMEDIA_CODEC_L16_HAS_48KHZ_STEREO  1
    
  • Code documentation: PCM/Linear 16bit

OpenCore AMR NB/WB

OpenH264

  • Supports Windows, Posix (Mac OS X, Linux), iOS, Android.

  • OpenH264 may be detected and enabled by the configure script, either automatically or manually via --with-openh264 option. It may be forcefully disabled by defining PJMEDIA_HAS_OPENH264_CODEC to 0 in config_site.h

  • Detailed instructions: https://github.com/pjsip/pjproject/issues/1947

  • Code documentation: OpenH264

Opus

Opus is a totally open, royalty-free, highly versatile audio codec.

Passthrough codecs

Passthrough codecs are not actual codecs, rather they just PACK and PARSE encoded audio data from/into RTP payload. They are used to accommodate ports that work with encoded audio data, e.g: encoded audio files, and sound device with codec support, to let the frames pass through PJMEDIA without being encoded and decoded.

  • Supports AMR, G.729, ILBC, PCMU, PCMA.

  • Code documentation: Passthrough

SILK

Speex

  • Speex codecs are shipped and enabled by default in PJMEDIA-Codec (controlled by PJMEDIA_HAS_SPEEX_CODEC macro)

  • Supports narrowband, wideband, and ultra-wideband

  • Code documentation: Speex

VP8 and VP9 (libvpx)