- 1 Introduction
- 2 The layers of VLC and libVLC
- 3 VLC source code overview
- 4 Coding for VLC
- 5 User Experience
- 6 Testing
- 7 Mozilla plugins
VLC development is open source, and then a large community of developers worldwide contribute to it.
However, entering a project such as VLC media player can be long and complex for new developers.
This guide seeks to help understanding the VLC code base and VLC internals to quickly get up to speed.
NB: this guide is not about compiling VLC.
A very good introduction to VLC can also be found on (an archived copy of the site) enjoythearchitecture.
The layers of VLC and libVLC
VLC's Core / libVLCcore
The most important (and probably most complex) part of VLC is the core, located in src/ in the repository.
- Introduction to the core
- This is a MUST-READ for developers.
- VLC modules loading
- How the numerous VLC modules work and are loaded.
- How the main input chain works (slightly outdated)
- VLC Object Management
- VLC variables
- VLM Internals
Plugins / Modules
- An access module provides a byte stream from a location string MRL, like support for files, HTTP streams, webcams...
- A demux module parses a byte stream and splits it into elementary streams (tracks).
- An access_demux module combines the functionality of access and demux (and bypass any stream filters), splitting elementary streams directly from a location string. It's used where the bytestream abstraction is inadequate.
- Stream Filters
- A stream filter module converts a byte stream into another byte stream. It could be used for file or byte stream decryption, as it is already used for decompression (gzip, Bzip2, XZ) and multi-part files.
- A decoder takes an elementary stream and convert into raw video, audio or text data, reading for output.
Modules types not documented (yet)
libVLC and bindings
- Using libvlc
VLC source code overview
- Hacker Guide/VLC source tree
- Hacker Guide/Modules source tree
- VLC Preferences
- VLC Playlist and Media Library
Coding for VLC
- Sending Patches
- Code Conventions
- Code Signing
- Adding a module
- Doxygen Documentation
- C Types
Please read the Documentation Editing Guidelines before you edit the documentation