Skip to main content
Content Delivery Protocols

Tutorials

This project's own resources are rt-libflute (the FLUTE Transceiver) and rt-mbms-client (the MBMS Client, built with ROUTE support). The walkthrough below builds and runs both, so you can deliver DASH/CMAF content over FLUTE and over ROUTE. See the Implementation Detail page for the specifications and architecture, and Repositories & Releases on the project index for the full repository table and releases.

Walkthrough: delivering DASH/CMAF content over FLUTE and ROUTE​

What you need​

  • Content already packaged as DASH or HLS with CMAF segments (a manifest plus the segment files). Neither repository below documents a specific packaging command, so use whichever DASH/CMAF packager you already have in your pipeline to produce the manifest and segments, then feed those files into the steps below.
  • A Linux host to build and run the tools (both repositories list Ubuntu package names for their dependencies). The steps can run on a single machine for a local test, or be split across a sender and a receiver.

Part 1: File delivery with rt-libflute (FLUTE)​

rt-libflute is 5G-MAG's implementation of a FLUTE server and client. Install its dependencies and build it:

sudo apt install ninja-build libboost-all-dev libspdlog-dev libtinyxml2-dev libconfig++-dev clang-tidy clang g++-12 cmake libssl-dev
git clone https://github.com/5G-MAG/rt-libflute.git
cd rt-libflute
mkdir build && cd build
cmake -GNinja ..
ninja

This produces two demo applications under rt-libflute/build/examples: a receiver and a transmitter. Start the receiver first:

cd rt-libflute/build/examples
./flute-receiver -o /path/to/output/directory

By default it listens on multicast address 238.1.1.95; run ./flute-receiver --help for the full option list. On the sender side, transmit one of your packaged files (for example the DASH manifest) with a data-rate limit in kbit/s:

cd rt-libflute/build/examples
./flute-transmitter -r 100000 /path/to/manifest.mpd

flute-transmitter takes a single file per invocation, so repeat the command (or check ./flute-transmitter --help for batching options) to also send the CMAF segment files the manifest references. The receiver reassembles each file into the output directory you configured.

Part 2: Real-time object delivery with the MBMS Client​

The MBMS Client is built together with a GPAC build that adds ROUTE support. It builds the mw binary and installs the 5gmag-rt-mw service. Install its dependencies:

sudo apt update
sudo apt install ssh g++ git libboost-atomic-dev libboost-thread-dev libboost-system-dev libboost-date-time-dev libboost-regex-dev libboost-filesystem-dev libboost-random-dev libboost-chrono-dev libboost-serialization-dev libwebsocketpp-dev openssl libssl-dev ninja-build libspdlog-dev libmbedtls-dev libboost-all-dev libconfig++-dev libsctp-dev libfftw3-dev vim libcpprest-dev libusb-1.0-0-dev net-tools smcroute python-psutil python3-pip clang-tidy gpsd gpsd-clients libgps-dev libgmime-3.0-dev libtinyxml2-dev libtinyxml2-6a
sudo snap install cmake --classic
sudo pip3 install cpplint

ROUTE support needs a specific GPAC revision, built and installed locally:

cd /tmp && git clone https://github.com/gpac/gpac.git && cd gpac && git checkout d4cc34d7bf506b1a174e7e85ea8ce3837b5b9749 && ./configure && make -j
sudo make install

Then get the MBMS Client and build it:

git clone --recurse-submodules https://github.com/5G-MAG/rt-mbms-client
cd rt-mbms-client
git submodule update
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr -GNinja ..
ninja
sudo ninja install
Not yet documented

The MBMS Client's README covers installation and build only. It does not document the runtime command(s) to point the built client at a live FLUTE/ROUTE session, or the exact GPAC invocation to publish DASH/CMAF content into that session end-to-end. Rather than inventing those steps here, check the repository's supporting_files/5gmag-rt.conf and supporting_files/5gmag-rt-mw.service, and the MBMS Client repository for the current guidance.

Putting it together​

Between the two, this project covers both delivery models it implements: FLUTE (rt-libflute) for file-based delivery of your packaged DASH/CMAF assets, and ROUTE (the MBMS Client) for real-time segment delivery with a GPAC-based ROUTE client. See the Implementation Detail page for how these fit into the 5G Broadcast and 5G MBS architectures.

In Action

Developer Exchange​

Our YouTube channel hosts some practical videos provided by developers on the use of the Reference Tools.

Some of the videos are also available here.

The recorded talk below demonstrates FLUTE (File Delivery over Unidirectional Transport) support in the GPAC multimedia framework.

In Action

GPAC FLUTE support - Developer Exchange

Sohaib Larbi (Motion Spell)

Browse all 5G-MAG videos →