libgpac
Documentation of the core library of GPAC
libgpac Documentation

README for GPAC version 0.9.0-DEV

Introduction

GPAC is a multimedia framework oriented towards rich media and distributed under the LGPL license (see COPYING).

GPAC supports many multimedia formats, from simple audiovisual containers (avi, mov, mpg) to complex presentation formats (MPEG-4 Systems, SVG Tiny 1.2, VRML/X3D) and 360 videos. GPAC supports presentation scripting for MPEG4/VRML/X3D through QuickJS javascript engine.

GPAC currently supports local file playback, HTTP progressive download, Adaptive HTTP Streaming (MPEG-DASH, HLS), RTP/RTSP streaming over UDP (unicast or multicast) or TCP, TS demuxing (from file, IP or DVB4Linux), ATSC 3.0 ROUTE sessions, desktop grabbing, camera/microphone inputs and any input format supported by FFmpeg.

For more information, visit the GPAC website

GPAC is being developped at Telecom Paris, in the MultiMedia group, by many great contributors

GPAC includes the following applications built by default:

MP4Box

MP4Box is a multi-purpose MP4 file manipulation for the prompt, featuring media importing and extracting, file inspection, DASH segmentation, RTP hinting, ... See MP4Box -h, man MP4Box or our wiki.

MP4Client

MP4Client is a media player built upon libgpac, featuring a rich media interactive composition engine with MPEG-4 BIFS, SVG, VRML/X3D support. For GPAC configuration instruction, check MP4Client -h , man MP4Client or our wiki.

gpac

As of version 0.9.0, GPAC includes a filter engine in charge of stream management and used by most applications in GPAC - check this for more dicussion on how this impacts MP4Box and MP4Client. The gpac application is a direct interface to the filter engine of GPAC, allowing any combinaison of filters not enabled by other applications. See gpac -h, man gpac, man gpac-filters or our wiki for more details.

Roadmap

Ongoing tasks and bugs

Please use github for feature requests and bug reports. When filing a request there, please tag it as feature-request.

V0.9.0

Remaining before release

  • [x] move encrypter to filter
  • [x] move ATSC demux to filter
  • [x] move NVDec to filter
  • [x] move MediaCodec to filter
  • [x] move DekTec output to filter
  • [x] move HEVC tile splitter to filter
  • [x] move HEVC tile merger to filter
  • [x] merge AV1
  • [x] merge VP9
  • [x] move iOS client to filters
  • [ ] move Android client to filters
  • [x] rewrite MP42TS to filters or drop it
  • [ ] fixed features disabled during rearchitecture or drop them (FILTER_FIXME macro)
  • [x] add pipe source and sink
  • [x] add tcp source and sink
  • [x] add generic serializer/reader for all events/packets in filter arch
  • [x] add Remotery support
  • [x] filter API documentation
  • [x] add segmentation handling in TS muxer
  • [x] unify vout / WebGL color handling (complete) and compositor GLSL shaders (partial color support)
  • [x] pass all master test suite
  • [x] extend coverage and test suite
  • [x] update doxygen
  • [ ] merge into master

V1.0.0

Targets:

  • [ ] freeze filter API
  • [x] improve filter graph resolver
  • [x] improve filter scheduler
  • [x] add ffmpeg muxer support
  • [x] add ffmpeg avfilter support
  • [ ] add kvazaar/other encoders support?
  • [x] drop SpiderMonkey and move to QuickJS
  • [x] filters scriptable through JS
  • [x] add 2D vector graphics for JS filters
  • [x] add WebGL vector graphics for JS filters
  • [x] JS modules API documentation
  • [x] improve mp4 demux from pipe
  • [x] support for HTTP output (server and put/post)
  • [x] add TS spliter filter
  • [x] add ttml simple renderer
  • [-] split test suite from main repo and handle PRs with attachements

Future Roadmap

  • [ ] filters scriptable through other languages (python) ?
  • [ ] move input sensors to filter ?

Testing

GPAC has a test suite exercicing most features of the framework. As of 0.9.0, the test suite is in a separate repository https://github.com/gpac/testsuite/, but is available as a submodule of the GPAC main repository. To initialize the testsuite submodule, do git submodule update --init.

For more details on the test suite, check the testsuite readme.

Per-commit build and tests results are available.

Compilation and Installation

Please visit the build section of our wiki.

For more information, visit: