+48 22 5128 100  

Szachowa 1,
04-894 Warszawa



Below you can find implementation of our Adaptation & Buffer Management Algorithm (ABMA), which is integrated with VLC media player with DASH plug-in [1].

ABMA estimates the probability of rebuffering for the available video representations and selects the highest quality video representation which satisfies the assumed threshold. Moreover, it adjusts the buffer size to compensate for the download rate oscillations. The input data for ABMA are the segment download time characteristics measured during playout.

The source files of ABMA (i.e. AdaptationManager.h and .cc files) you can find inside /vlc-abma/modules/stream_filter/dash/http directory. Please note, that the current implementation requires that you provide available media representations manually, by assigning list of representations (in ascending order) to the variable representations[] in HTTPConnectionManager.cc file (vlc-abma/modules/stream_filter/dash/http directory). Similarly, value of segment duration (const SEGMENTDURATION variable) must be set manually into HTTPConnectionManager.cc file.


How to build

The application was tested on Ubuntu 14.04

  1. Prepare your environment (development headers, a toolchain, the autotools):

sudo apt-get install libtool build-essential pkg-config autoconf

  1. Prepare the 3rd party libraries needed for VLC player. You can find list of libraries on the VLC page. Below is the single command installation in Ubuntu 14.04

sudo apt-get install libvorbis-dev libogg-dev libtheora-dev speex libspeex-dev flac libflac-dev x264 libx264-dev a52-0.7.4 liba52-0.7.4-dev mpeg2dec libmpeg2-4-dev faad libfaad-dev faac libfaac-dev lame libmp3lame-dev libav-tools libavdevice-dev libmad0 libmad0-dev dirac libdirac-dev liboil-dev libschroedinger-dev libdca-dev twolame libtwolame-dev libmpcdec-dev libvorbisidec1 libvorbisidec-dev libass-dev libass4 libebml4 libebml-dev libmatroska6 libmatroska-dev libdvbpsi8 libdvbpsi-dev libmodplug1 libmodplug-dev libshout3 libshout3-dev libdvdread4 libdvdnav4 libdvdnav-dev livemedia-utils liblivemedia-dev libcddb2 libcddb2-dev libcdio13 libcdio-dev libcdio-utils vcdimager libvcdinfo0 libvcdinfo-dev libgpg-error0 libgpg-error-dev libgcrypt11 libgcrypt11-dev gnutls-bin libgnutls26 libgnutls-dev libdap11 libdap-bin libdap-dev libxml2 libxml2-dev libpng12-0 libpng12-dev libjpeg8 libtiff5 libsdl1.2-dev libsdl-image1.2 libsdl-image1.2-dev libc-bin gettext libfreetype6 libfreetype6-dev libfribidi-dev libfribidi0 zlib1g zlib1g-dev libtag1-dev libcaca0 libcaca-dev caca-utils libqt4-core libqt4-dev libportaudio2 libportaudio-dev libupnp-dev libupnp4 libexpat1 libexpat1-dev yasm libxcb-xv0 libxcb-xv0-dev libx11-xcb1 libx11-xcb-dev libswscale-dev lua5.2 liblua5.2-dev libxcb-composite0-dev

  1. Install Boost libraries

sudo apt-get install libboost-all-dev

  1. Unzip vlc-abma folder
  2. Go to vlc-abma folder
  3. Bootstarp using ./bootstrap command
  4. Configure using ./configure command
  5. Build using make command

To run the player:


You can test vlc with ABMA using DASH video movie “Big Buck Bunny” provided by Uni-Klu [2], for example:



During media download you can see the following logs in the console:

  1. Values of buffer capacity (in microseconds) and selected media representation, returned by ABMA module, and time which elapsed from the beginning of media session (in microseconds); for example:

Calculated buffer capacity: 42000000 [us], representation: 2133691 currentTime: 8583263 [us]

  1. Values of measurements for given segment, i.e. Segment Download Time SDT (in microseconds), number of downloaded bytes for given segment, value of Round Trip Time (in microseconds), download rate for given segment (in bytes per seconds) and time which elapsed from the beginning of media session (in microseconds); for example:

SDT for segment no 10 = 1 [us], downloaded bytes: 145245 rtt: 243 [us] download rate: 2301101 [bps] currentTime: 8583588 [us]



This extension of the VLC is open source available and licensed under LGPL:

“This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA“



Piotr Krawiec: Ten adres pocztowy jest chroniony przed spamowaniem. Aby go zobaczyć, konieczne jest włączenie w przeglądarce obsługi JavaScript.

National Institute of Telecommunications, Warsaw, Poland

Webpage: http://www.nit.eu/offer/research-projects-products/abma



[1] C.Müller, C.Timmerer “A VLC Media Player Plugin enabling Dynamic Adaptive Streaming over HTTP”, ACM Multimedia, USA, 2011

[2] Stefan Lederer, Christopher Müller and Christian Timmerer, “Dynamic Adaptive Streaming over HTTP Dataset”, ACM MMSys, 2012