libdash is a C++ library that provides an object orient (OO) interface to the MPEG-DASH standard.
- Cross platform build system based on cmake that includes Windows, Linux and Mac.
- Open source available and licensed under the LGPL.
- Implements the full MPEG-DASH standard according to ISO/IEC 23009-1, Information Technology Dynamic Adaptive Streaming over HTTP (DASH) Part 1: Media Presentation Description and Segment Formats
- Handles the download and xml parsing of the MPD. Based on that it provides an OO based interface to the MPD.
- Media elements, e.g., SegmentURL, SegmentTemplate, etc., are downloadable in that OO based structure and can be downloaded through libdash, which internally uses libcurl.
- Therefore basically all protocols that libcurl supports, e.g., HTTP, FTP, etc. are supported by libdash.
- However it also provides a configurable download interface, which enables the use of external connections that can be implemented by the user of the library for the download of media segments.
- The use of such external connections will be shown in the libdash_networkpart_test project which is part of libdash solution and also part of the cross platform cmake system and therefore usable on Windows, Linux and Mac.
- The project contains a sample multimedia player that is based on ffmpeg which uses libdash for the playback of one of our dataset MPDs.
- The development is based on Windows, therefore the code contains a VS10 solution with additional tests and the sample multimedia player.
The general architecture of MPEG-DASH is depicted in the figure below where the orange parts are standardized, i.e., the MPD and segment formats. The delivery of the MPD, the control heuristics and the media player itself, are depicted in blue in the figure. These parts are not standardized and allow the differentiation of industry solutions due to the performance or different features that can be integrated at that level. libdash is also depicted in blue and encapsulates the MPD parsing and HTTP part, which will be handled by the library. Therefore the library provides interfaces for the DASH Streaming Control and the Media Player to access MPDs and downloadable media segments. The download order of such media segments will not be handled by the library this is left to the DASH Streaming Control, which is an own component in this architecture but it could also be included in the Media Player.
In a typical deployment, a DASH server provides segments in several bitrates and resolutions. The client initially receives the MPD through libdash which provides a convenient object orient interface to that MPD. The MPD contains the temporal relationships for the various qualities and segments. Based on that information the client can download individual media segments through libdash at any point in time. Therefore varying bandwidth conditions can be handled by switching to the corresponding quality level at segment boundaries in order to provide a smooth streaming experience. This adaptation is not part of libdash and the MPEG-DASH standard and will be left to the application which is using libdash.
We offer a public accessible mailing list for discussions, questions, announcements, bug-reports, etc. around libdash. Everybody is invited to join, you can find the registration at:
There are a lot of things to do! So everybody is invited to contribute, to get involved in and exited about DASH!
- Next release is scheduled at the end of February.
- Doxygen Documentation.
- Cross platform build system for the ffmpeg based sample player.
- QT based sample player, which is cross platform buildable through cmake.
- Further Tests & Bugfixes.
- Ongoing development during 2013
- Implementation of a middleware for libdash.
- Will provide buffering mechanisms and build-in adaptation logics.
- Extends the functionality to extract, e.g., mp4, mp2ts, etc. information of the media stream.
- Will provide further access methods which should provide a simplified interface to the library.
- Extending the QT based sample player.
- Testing & Bugfixing
- Implementation of a middleware for libdash.
Sources and Binaries
You can find the latest sources and binaries in the download section of bitmovin and on github.
We specially want to thank our passionate developers at bitmovin as well as the researchers at the Institute of Information Technology(ITEC) from the Alpen Adria Universitaet Klagenfurt (AAU)!
Furthermore we want to thank the Netidee initiative from the Internet Foundation Austria for partially funding the open source development of libdash.