Hacker Guide

From VideoLAN Wiki
Jump to navigation Jump to search

Introduction

VLC media player is a large and complex piece of software. It also uses a large number of dependencies.

Being open source allows VLC development to benefit from a large community of developers worldwide.
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 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.

Plugins / Modules

Writing a VLC module

Input

  • Access
    • An access module provides a byte stream from an location string (MRL).
  • Demuxer
    • A demux module parses a byte stream and splits it into elementary streams.
  • Access-Demuxer
    • Also access_demux module combine the functionality 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 filter
    • 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).
  • Decoder
    • A decoder takes an elementary stream and convert into raw video, audio or text data, reading for output.


Audio

Video


Modules types not documented (yet)

libVLC and bindings

VLC source code overview

Coding for VLC

Authors

  • Derk-Jan Hartman
  • Christophe Massiot
  • Samuel Hocevar
  • Geoffroy Couprie
  • Jean-Baptiste Kempf

Testing

This page is part of official VLC media player Documentation (User GuideStreaming HowToHacker GuideModules)
Please read the Documentation Editing Guidelines before you edit the documentation
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.