A true multimedia player is a complex system involving networking, media and user interactions management, rasterizing, etc. The following section is a more or less exhaustive list of supported features in the GPAC player.

ISO Media File Format (MP4, 3GP and QT-based)

  • supports reading, writing/capturing, edition.
  • highly flexible interleaving of media data.
  • RTP hint tracks writing and reading.
  • Movie Fragments: enables writing the file as a set of small meta and media data chunks (beta).
  • 3GPP media extensions (AMR/H263/EVRC/SMV/QCELP) and unknown media (QT) extensions.
  • Some AVC/H264 extensions.
  • 3GPP timed text support.
  • Meta packaging (a la MPEG-21), allowing embedding of files and XML data in the movie.
  • Simple iTune tagging

VRML-Based Scene Graphs

  • Complete scene graphs for MPEG-4/VRML and X3D, configurable through included scene graph generators.
  • All common interactivity types (events and routes, interpolators, conditionals, MPEG-4 valuators and X3D event filters).
  • ECMAScript support through Mozilla SpiderMonkey engine.
  • Full-feature PROTO and EXTERNPROTO support.
  • MPEG-4 InputSensor (KeySensor, Mouse and StringSensor), X3D KeySensor and StringSensor support.
  • SAX Progressive loading of XMT and X3D files (text and gziped).
  • Scene Manager for authoring, textual dumping and importing.

The status of VRML/BIFS implementation in GPAC can be checked here.

The status of X3D implementation in GPAC can be checked here.

Hardcoded EXTERNPROTO nodes

Couple of hardcoded EXTERNPROTO nodes are supported for the pleasure (text texturing node, 2D path extrusion node for 3D text & co, etc). With hardcoded protos, you can add built-in nodes without breaking MPEG-4 bitstreams or modifing the scenegraphs.

SVG-based Scene Graph

  • SVG 1.2 Tiny scene graph under develoment (see SVG implementation details).
  • Complete LASeR scene graph (subset of SVG Tiny 1.2).
  • Some SVG 1.1 Full extensions.
  • XML events and SMIL animation for SVG content.
  • uDOM (MicroDOM) ECMAScript support through Mozilla SpiderMonkey engine.
  • SAX Progressive loading of SVG files (text and gziped).
  • Scene Manager for authoring, textual dumping and importing.

Media Stream Management

  • Support for any scalable codecs (audio, video and systems), spatial and temporal salability supported (includes frame reordering).
  • Synchronization, media management and load scheduling, support for arbitrary number of timelines.
  • Support for streams not using MPEG-4 Sync Layer and timestamps.
  • Pulled streams, pushed streams with buffer management.
  • Time control and segment descriptors (media control, media sensor).
  • Dynamic insertion/update/removal of objects and streams.
  • Inline scene support (local or remote) with MediaControl/MediaSensor support.
  • Support for non-MPEG4 URLs in nodes (URL “http://” or “rtsp://”).
  • Scene management abstracted through plugins (eg a new scenegraph and its renderer may be pluged at runtime into GPAC).
  • Support for non-streamed scenes for VRML/X3D, SWF and SVG.
  • Experimental generic media cache (recorder).

MPEG-4 Systems specifc tools

  • ObjectDescriptor codec.
  • ObjectContentInformation codec.
  • BIFS Command Decoder with quantization, proto, script and predictive MF Field decoding.
  • BIFS Command Encoder with quantization, proto, script (no predictive MF Field).
  • LASeR Decoder and Encoder with LASeRScript support.
  • SAF (LASeR Simple Agregation Format) multiplexing.

Scene Renderer

Audio rendering

  • multichannel support.
  • integer up/down sampling with mediaSpeed handling.
  • multichannel to stereo mapper.
  • N-sources, M-channels software mixing.
  • per-channel volume support.
  • lip-sync management.

2D Renderer

  • Direct and indirect (tile engine) rendering.
  • Full alpha support (including ColorTransform).
  • Text drawing in vectorial mode or textured mode.
  • Texturing, gradients, user interaction (and user interaction on composite textures).
  • Hardware accelerated blit if available in output plugin.

3D Renderer

  • Graphics backend: OpenGL and OpenGL-ES.
  • real alpha-blending (z-sorting), fast texturing when available (support for rectangular textures and non-power-of-2 textures), gradients, X3D RGBA colored meshes…
  • frustum culling, ray-based node picking, decent collision detection through AABB tree, gravity, etc…
  • navigation in main screen and in 3D layers, viewpoint selection, etc…
  • Text drawing in vectorial mode or textured mode (eg, supports NICE text under OpenGL!).
  • Supports all nodes supported by 2D renderer (except SVG nodes).

The GPAC framework heavily relies on plugins for most tasks (stream input, file downloading, hardware IO, specialized renderers and rasterizer, …).
Currently the following plugins are available:

Media Decoders

  • PNG (libPNG) and JPEG (libJPEG).
  • MPEG-4 Visual (Xvid), MPEG-4 AAC (faad2), MPEG-1/2 audio (mad).
  • AMR speech codec using 3GPP fixed-point reference code.
  • AMR and AMR-WB speech codecs using 3GPP float reference code.
  • Xiph Media codecs: Vorbis and Theora.
  • Generic decoder using FFMPEG avcodec library, supports most AV codecs known.
  • 3GPP timed text / MPEG-4 Streaming Text decoder (rendering done through GPAC renderers).

Network clients

  • File access from local drive or through HTTP download (using MIME-type associations).
  • MP4, 3GP, MP3/Shoutcast, JPEG, PNG, OGG/Icecast, AMR/EVRC/SMV input plugins.
  • AAC files and radio streams (icecast AAC-ADTS – needs latest faad2 cvs tarball) input plugin.
  • Generic demuxer using FFMPEG avformat library, supports most AV containers known (MPEG, VOB, AVI, MOV …).
  • Subtitle reader (SRT/SUB/TeXML/TTXT formats).
  • SAF reader.
  • MP4 recorder output plugin (experimental).
  • SDP input – RTP/RTSP streaming including RTP/UDP streaming, RTP over RTSP and HTTP tunneling of RTP traffic (QuickTime/Darwin Streaming Server). RTP Payload formats supported are:
    • RFC 3016 for MPEG-4 Simple Profile video and simple LATM AAC.
    • RFC 3640 for any form of MPEG-4 streams (audio, video, systems).
    • RFC 3267 for AMR audio (narrow-band, octet-align format only).
    • RFC 2250 for MPEG-1/2 audio and video.
    • RFC 2429 for H263 video used by 3GPP (no VRC, no extra Picture Header).
    • RFC 3984 for H264/AVC video (only STAP-A, FU-A and regular NAL units).

Hardware abstraction plugins

  • audio output: Microsoft DirectSound (with multichannel support), Microsoft WaveOut, Linux OSS, cross-platform SDL.
  • video output: Microsoft DirectDraw (supports hardware YUV and RGB stretch), cross-platform SDL, Linux X11 with OpenGL and shared memory support.
  • raw memory video output for BIFS testing.

2D Rasterizer Plugins

  • Microsoft GDIplus (Windows 98 and later only).
  • GPAC rasterizer, ANSI C, using FreeType Anti-Aliased raster module.

Font Handlers

  • Microsoft GDIplus for TrueType and OpenType font outline extraction.
  • FreeType2 for TrueType font outline extraction.