Architecture overview

The architecture of the Fluendo SDK is based on components that hide the hardest tasks to the developer, such as acquiring the multimedia source information from a file or device, identifying the type of content coding to choose the best elements to manipulate, without worrying about concepts such as multitasking or memory allocation.

The main components are divided into:

  • Player, that allows loading from a source multimedia data as an URI or device to, usually, display the content.

  • Recorder, which allows to:

    • Obtain multimedia data from a URI or device.

    • Manipulate them changing properties such as the video codec, audio codec, bit rate, etc.

    • Establish an output destination to store them.

  • Discover, that allows obtaining the internal information of a multimedia container or stream in a memory structure.

The components can be combined to create more complex artifacts. For instance, we can scan a folder searching for a 4k elements with a Discover component. Then, transcode to HD resolution using a Player and Recorder components.

Features at a glance

Easy integration within specific hardware devices

The Fluendo SDK is written in C and runs on the CPU, so it does not need anything special to run on any hardware, besides compiling for the appropriate processor. However, there are a few places where special hardware can be used if available: Hardware-accelerated video decoding, video rendering and SPDIF support are some examples.

Wide range of media formats

The Fluendo SDK uses the GStreamer framework internally, so it has support for a vast number of file formats and codecs, plus the ones from the Fluendo Codec Pack. It does not matter if the media comes from the internet or from a local file, all major file formats (containers) and codecs are supported, plus a lot of less-used formats too.

Cross Platform Multimedia Solution

Our SDK makes it easy to add GStreamer powered media playback on applications for all supported Operating Systems (Windows, Linux, OSX, Android and iOS) and CPU architectures x86, x86_64, ARM.

Standard playback controls

Play, Pause, Seek, Fast Forward, Slow Motion, Reverse Playback, Frame Stepping. Stream selection for audio, video and subtitles Playback of multiple simultaneous streams ## Easy integration in any Application development The Fluendo SDK only requests the necessary information from the application and takes care of everything else. An event mechanism allows the application to be informed of the actions it chooses. ## Internet streaming and demuxing The Fluendo SDK takes care of the complete pipeline, from media retrieval (download, streaming, file reading) to rendering, including all intermediate steps like demuxing, decoding, colorspace conversions, etc… guaranteeing a optimal processing.

Technical Overview

Fluendo SDK provides an API to create player objects known as FluPlayer using flu_player_new(). Each player is given an URI to play through flu_player_uri_open() or a hardware device through flu_player_device_open() and will use some internal engines (depending on the URI) to create/destroy/manage decoding branches for media streams known as FluStream The player instances communicate with the application using an event mechanism. The application can listen for events using flu-player-event-listener-add providing different callback and user data for each event type (see FluPlayerEvent). The application gets notified about player state, errors, stream activation, list of available streams, etc… All notifications happen synchronously. Fluendo SDK also provides convenience functions to handle playback-oriented tasks for multipe platforms such as:

  • Configuring energy saving behavior such as display sleep timeout.

  • Modifying DVD region code for DVD playback when there’s a region code mismatch.

  • Detecting and listing available DVD devices ready for playback.

  • And many more!