Difference between revisions of "Hacker Guide"

From VideoLAN Wiki
Jump to navigation Jump to search
m (→‎Coding for VLC: Add API doxygen link so doxygen can be browsed without JavaScript)
 
(23 intermediate revisions by 6 users not shown)
Line 1: Line 1:
= Introduction =
+
== Introduction ==
  
 
{{VLC}} is a very popular, but quite large and complex piece of software.<br />
 
{{VLC}} is a very popular, but quite large and complex piece of software.<br />
 
It uses a large number of [[Contrib Status|3rd party libraries]].  
 
It uses a large number of [[Contrib Status|3rd party libraries]].  
  
VLC development is open source, and then a large community of developers worldwide contribute to it.<br />
+
VLC development is [[open source]], and then a large community of developers worldwide contribute to it.<br />
However, entering a project such as {{VLC}} can be long and complex for new developers.  
+
However, entering a project such as VLC 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.<br />
 
This '''guide''' seeks to help understanding the VLC code base and VLC internals to quickly get up to speed.<br />
''NB: this guide is '''not''' about [[Compile|compiling]] VLC.''
+
''NB: this guide is '''not''' about [[compiling]] VLC.''
  
  
A very good introduction to VLC can also be found on [http://www.enjoythearchitecture.com/vlc-architecture.html enjoythearchitecture].
+
A very good introduction to VLC can also be found on (an archived copy of the site) [//web.archive.org/web/20141204234622/http://www.enjoythearchitecture.com/vlc-architecture.html enjoythearchitecture].
  
= The layers of VLC and libVLC =
+
== The layers of VLC and libVLC ==
  
== VLC's Core / libVLCcore ==
+
=== VLC's Core / libVLCcore ===
  
The most important (and probably most complex) part of VLC is the core, located in src/ in the repository.  
+
The most important (and probably most complex) part of VLC is the core, located under {{VLCSourceFolder|src}} in the repository.  
  
*[[Documentation:Hacker's Guide/Core|Introduction to the core]] This is a '''MUST-READ''' for developers.  
+
*[[{{#rel2abs:/Core}}|Introduction to the core]]
*[[Documentation:VLC Modules Loading|VLC modules loading]]  
+
** This is a '''MUST-READ''' for developers.  
*[[Documentation:Hacker's Guide/Input|Input]] (slightly outdated)  
+
*[[Documentation:VLC Modules Loading|VLC modules loading]]
*[[Documentation:Hacker's Guide/Object Management|VLC Object Management]]  
+
** How the numerous VLC modules work and are loaded.
*[[Documentation:Hacker's Guide/Variables|VLC variables]]
+
*[[{{#rel2abs:/Input}}|Input]]
*[[Documentation:Hacker's Guide/VLM Internals|VLM Internals]]
+
** How the main input chain works (slightly outdated)
 +
*[[{{#rel2abs:/Object Management}}|VLC Object Management]]
 +
*[[{{#rel2abs:/Variables}}|VLC variables]]
 +
*[[{{#rel2abs:/VLM Internals}}|VLM Internals]]
  
== Plugins / Modules ==
+
=== Plugins / Modules ===
  
[[Documentation:Hacker's Guide/Module Writers Guide|Writing a VLC module]]  
+
[[{{#rel2abs:/How To Write a Module}}|How to write a VLC module]].
  
=== Input ===  
+
==== Input ====
*[[Documentation:Hacker's Guide/Access|Access]]  
+
*[[{{#rel2abs:/Access}}|Access]]  
** An access module provides a byte stream from a location string [[MRL]].
+
** An access module provides a byte stream from a location string [[MRL]], like support for files, HTTP streams, webcams...
*[[Documentation:Hacker's Guide/Demux|Demuxer]]
+
*[[{{#rel2abs:/Demux}}|Demuxer]]
** A demux module parses a byte stream and splits it into [http://en.wikipedia.org/wiki/Elementary_stream elementary streams] (tracks).
+
** A demux module parses a byte stream and splits it into [[elementary stream]]s (tracks).
*[[Documentation:Hacker's Guide/Access Demux|Access-Demuxer]]
+
*[[{{#rel2abs:/Access Demux}}|Access-Demuxer]]
 
** 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.
 
** 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.
*[[Documentation:Hacker's Guide/Stream Filters|Stream Filters]]
+
*[[{{#rel2abs:/Stream Filters}}|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).
+
** 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.
*[[Documentation:Hacker's Guide/Decoder|Decoder]]
+
*[[{{#rel2abs:/Decoder}}|Decoder]]
 
** A decoder takes an elementary stream and convert into raw video, audio or text data, reading for output.
 
** A decoder takes an elementary stream and convert into raw video, audio or text data, reading for output.
  
=== Audio ===  
+
==== Audio ====
  
*[[Documentation:Hacker's Guide/Audio Filters|Audio Filters]]  
+
*[[{{#rel2abs:/Audio Filters}}|Audio Filters]]  
*[[Documentation:Hacker's Guide/Audio Mixers|Audio Mixers]]
+
*[[{{#rel2abs:/Audio Output}}|Audio Output]]
*[[Documentation:Hacker's Guide/Audio Output|Audio Output]]
 
  
=== Video ===
+
==== Video ====
  
*[[Documentation:Hacker's Guide/Video Filters|Video Filters]]  
+
*[[{{#rel2abs:/Video Filters}}|Video Filters]]  
**[[Documentation:Hacker's Guide/Video Filters/Deinterlace|Deinterlace]]
+
**[[{{#rel2abs:/Video Filters/Deinterlace}}|Deinterlace]]
*[[Documentation:Hacker's Guide/Video Output|Video Output]]
+
*[[{{#rel2abs:/Video Output}}|Video Output]]
  
=== Interfaces ===
+
==== Interfaces ====
*[[Documentation:Hacker's Guide/Interfaces|Interfaces]]
+
*[[{{#rel2abs:/Interfaces}}|Interfaces]]
  
=== Modules types not documented (yet) ===
+
==== Modules types not documented (yet) ====
==== Misc ====
+
===== Misc =====
*[[Documentation:Hacker's Guide/Visualization|Visualization]]  
+
*[[{{#rel2abs:/Visualization}}|Visualization]]  
*[[Documentation:Hacker's Guide/Packetizers|Packetizers]]
+
*[[{{#rel2abs:/Packetizers}}|Packetizers]]
  
==== Streaming output ====
+
===== Streaming output =====
*[[Documentation:Hacker's Guide/Encoder|Encoder]]  
+
*[[{{#rel2abs:/Encoder}}|Encoder]]  
*[[Documentation:Hacker's Guide/Mux|Mux]]  
+
*[[{{#rel2abs:/Mux}}|Mux]]  
*[[Documentation:Hacker's Guide/Stream Output|Stream Output]]  
+
*[[{{#rel2abs:/Stream Output}}|Stream Output]]  
*[[Documentation:Hacker's Guide/Access Output|Access Output]]
+
*[[{{#rel2abs:/Access Output}}|Access Output]]
  
== libVLC and bindings ==
+
=== libVLC and bindings ===
  
*Using [[Documentation:Hacker's Guide/libvlc|libvlc]]  
+
*Using [[{{#rel2abs:/libvlc}}|libvlc]]  
 
*bindings
 
*bindings
  
= VLC source code overview =
+
== VLC source code overview ==
  
*[[VLC source tree]]  
+
*[[{{#rel2abs:/VLC source tree}}]]  
*[[Modules source tree]]  
+
*[[{{#rel2abs:/Modules source tree}}]]  
*[[Documentation:Hacker's Guide/Preferences|VLC Preferences]]  
+
*[[{{#rel2abs:/Preferences}}|VLC Preferences]]  
*[[Documentation:Hacker's Guide/Playlist|VLC Playlist and Media Library]]
+
*[[{{#rel2abs:/Playlist}}|VLC Playlist and Media Library]]
  
= Coding for VLC =
+
== Coding for VLC ==
  
*[[Patches|Patching]]  
+
*[[Patch]]ing ([[Sending Patches|sending]])
*[[Sending Patches]]  
+
*[[Code Conventions]]
*[[Code Conventions]]  
+
*[[Code Signing]]
*[[Documentation:Hacker's Guide/Module Writers Guide|Adding a module]]  
+
*[[{{#rel2abs:/How To Write a Module}}|Adding a module]]
*[[Documentation:Unicode]]  
+
*[[Documentation:Unicode]]
*[http://www.videolan.org/developers/vlc/doc/doxygen/html/ Doxygen Documentation]  
+
*[https://www.videolan.org/developers/vlc/doc/doxygen/html/index.html Doxygen Documentation] <span class="plainlinks">([https://www.videolan.org/developers/vlc/doc/doxygen/html/pages.html pages] &bull; [https://www.videolan.org/developers/vlc/doc/doxygen/html/modules.html modules] &bull; [https://www.videolan.org/developers/vlc/doc/doxygen/html/annotated.html data structures] &bull; [https://www.videolan.org/developers/vlc/doc/doxygen/html/files.html files] &bull; [https://www.videolan.org/developers/vlc/doc/doxygen/html/group__vlc.html API])</span>
*[[C Types]]  
+
*[[C Types]]
 
*[[Strings]]
 
*[[Strings]]
  
== Authors  ==
+
== User Experience ==
  
*Derk-Jan Hartman
+
*[[Playback States]]
*Christophe Massiot
 
*Samuel Hocevar
 
*Geoffroy Couprie
 
*Jean-Baptiste Kempf
 
  
= Testing =
+
== Testing ==
  
 
*[[Test Suite]]
 
*[[Test Suite]]
  
{{Documentation}}
+
== Mozilla plugins ==
 +
 
 +
* [[Plugins/Mozilla|Plugins in Mozilla]]
 +
 
 +
{{Hacker_Guide}}

Latest revision as of 08:47, 17 April 2019

Introduction

VLC media player is a very popular, but quite large and complex piece of software.
It uses a large number of 3rd party libraries.

VLC development is open source, and then a large community of developers worldwide contribute to it.
However, entering a project such as VLC 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 under src in the repository.

Plugins / Modules

How to write a VLC module.

Input

  • Access
    • An access module provides a byte stream from a location string MRL, like support for files, HTTP streams, webcams...
  • Demuxer
  • Access-Demuxer
    • 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.
  • Decoder
    • A decoder takes an elementary stream and convert into raw video, audio or text data, reading for output.

Audio

Video

Interfaces

Modules types not documented (yet)

Misc
Streaming output

libVLC and bindings

VLC source code overview

Coding for VLC

User Experience

Testing

Mozilla plugins

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.