DVDPlayer

DVDPlayer is XBMC's video player, capable of playing DVD video and many other video formats. DVDPlayer supports DVD video with menus, from CD/DVD-media, harddrive, network, ISO/IMG-images and RAR/ZIP archives (and even RARed ISO/IMG-images as long as they are in 'stored/archive' mode and not compressed).

Currently Supported Codecs

 * FFmpeg - all audio and video decoders supported by FFmpeg (avcodec/avformat) open source codec-suit
 * MPEG-1/MPEG-2 video decoder based on libmpeg2
 * MPEG-1/MPEG-2 (Layer I, Layer II, and Layer III, inc. MP3) audio decoder based on libmad
 * DTS (Digital Theater System) audio decoder based on libdca (formaly known as "libdts")
 * Dolby Digital AC3 audio decoder based on liba52
 * AAC (Advanced Audio Coding) MPEG-4 audio decoder based on AudioCoding.com's libfaad2

Known Issues
For every month that goes by, the native DVD-Player in XBMC is becoming more and more usable/stable for the average end-user. However, there is still a lot of work that can be done on it: For one thing there are still quite a few bugs left in it that should be found and fixed, something we really need your help with (see the "Bug Reporting" section below). Another thing is that not all features that you might expect from a normal DVD-player are implemented yet. Some of these features are listed below under "Unimplemented Features" and are not considered to be bugs, that does not mean that features not listed below under can be reported as bugs (something that happens too many times)!

Known Bugs
The official list/tracker of known bugs can be found trac

Bug Reporting
When reporting bugs or problems there are a few things to keep in mind before posting your bug report(s). Bug-reports should be reported at sourceforge.net, this way we are able to track all bugs on one tracker which makes our lifes a lot easier. However, before posting a bug-report there, make sure it is a valid bug-report and not a feature-request or something that is your own fault (i.e. user-error). To do that you can start a new topic thread on the XBMC bug-discussion forum to verify this with others. But most importantly, use the search functions first here and here, to make sure you are not posting duplicate bug reports. Duplicate reports/posts of the same bug makes it much harder for us to keep track of all the bug-reports/posts, not doing so will also save you a lot of work.

When reporting a bug there are a few things we will need, if these things are not provided, it will be much harder (and many times impossible) to replicate the problem and find the bug. In the case of an invalid bug-report the report will be closed without us even looking at it.

Some things that should be in a bug report:
 * A clear description of the problem and what you did (step-by-step) to see it so that we can then replicate it if and when we have the same DVD-disc or a sample (see “Sample” below).
 * A log file (see debug log below)
 * The XBMC version you are using (exact build date)
 * Did you build XBMC yourself (from GIT) or...?
 * Audio output mode (analog stereo, passthrough, ...)
 * Video output mode (output resolution, PAL or NTSC...)
 * The amount of free memory! See the “log file” chapter below on how to enable free memory display!
 * Before playing the DVD
 * During the problem
 * After the problem (if XBMC did not crash and just went back to the normal GUI)
 * If it is a non-menu related problem
 * Can you play the .vob file correctly with the DVDPlayer? (select dvdplayer with the 'play with dialog')
 * Other information you think that might be relevant

Please have a look at HOW-TO Submit a Proper Bug Report for additional information.

XBMC Log File
XBMC is able to create a log file that provides us with a lot of useful information when trying to locate a bug. See debug log for more information.

Sample
While it sometimes can be complicated to provide us with samples, it is usually worth the effort. With samples that show the problem we are able to fix bugs much easier and quicker, because with a sample we can very simply replicate the bug ourselves in our own debug enviroment, and most of the time these bugs can be fixed the same day if there is a developer with some free time available and willing. Without a sample, it will take much longer because we cannot replicate the bug ourselves and we will have to try a lot of things (which can break the current working version again).

Simplest is to just to snail-mail one of the developers a 1:1 copy of the DVD-disc (or the original DVD-disc if the bug has something to do with encryption problems), you can create a such 1:1 copy on your PC using software's like “DVDDecrypter”. Another possibility is to compress (ZIP/RAR) the sample and send it over the internet, (since most DVDs are a bit to big to send over the internet you can try to strip unneeded data out of it (read the section below about “DVD-menu related problems”). If you have the possibility to either snail-mail the disc (shipping the actual disc) or send a sample over the internet please post so in your bug-repost. Note! Please understand that if you send in a DVD-disc (copy or original) we can not send it back!

For DVD-menu related problems, the next can be done:
 * strip all non-menu related vob files.
 * These files take up most of the space. What is needed are the ifo and bup files, together with all menu vobs. If you are lucky the DVD has a few 1GB big vob files (these are probably the main movie and thus not needed) and one or two small vob files. These small vob files are needed. RAR or ZIP those vobs together with the ifo and bug files and provide them to us. Upload them to an upload site or find another way (like posting them on your own website or creating a torrent).

If the problem has something to do with the main movie, the only thing left todo is to take the problematic vob file and to strip it as much as is possible.

In all cases you must first test the sample yourself before you send it to the XBMC developer/team, the sample needs to have the same problem as the original DVD, (since it is not of much use otherwise).

Development
See the DVDPlayer core/library topic thread in the XBMC development forum for now.
 * Help is always wanted, so if you can program C/C++, please feel free to code and submit a patch.

Technical Details
See the DVDPlayer core/library topic thread in the XBMC development forum for now.

Classes

 * InputStreams
 * FactoryInputStream, creates an inputstream based on the filename
 * File, general file access (hd, cdrom, samba)
 * Http
 * Navigator, for accessing dvd
 * Demuxers
 * FactoryDemuxer, creates a demuxer based on inputstream information
 * FFmpeg, ffmpeg demuxer wrapper (supports all ffmpeg demuxers)
 * Shoutcast, for demuxing shoutcast streams
 * Codecs
 * FactoryCodec, creates audio and video codecs based upon demuxer information
 * Audio
 * FFmpeg, ffmpeg audio decoder wrapper
 * Liba52, liba52 wrapper
 * LibDts, libdca wrapper
 * LibFaad, libfaad wrapper
 * LibMad, libmad wrapper (for mp1, mp2, mp3 decoding)
 * LPcm, lpcm decoding
 * Passthrough, for digital passthrough
 * Video
 * LibMpeg2
 * FFmpeg, ffmpeg video decoder wrapper
 * Subtitles

Modules
The player is divided up into a few modules

Main Module
Runs in a separate thread Reads data from one of the input streams and sends it over to one of the other modules listed below Handle DVD events (such as audio / subtitle / video stream changes) Handle events from xbmc (such as audio / subtitle changes)

Audio Module
Runs in a separate thread. Decodes audio data

Video Module
Runs in a separate thread. Decodes raw video data into video frames

Subtitle Module
Process subtitles

Building Libraries (Audio / Video Codecs)
The dvdplayer depends on other libraries to function. These libraries are included in SVN by default as dll's under the "XBMC/system/players/dvdplayer" subfolder. The full source code of these libraries can be found under the "/docs/sources/dvdplayer/" subfolder in the SVN. To build these dll's yourself you need to have the following installed, (the .dll's must be then be placed under the "[XBMCFOLDER]/system/players/dvdplayer" subfolder).


 * MinGW and MSYS
 * see http://ml20rc.msnfanatic.com/ffmpeg/1.html for installation for ffmpeg
 * use binutils version 2.16.91 (20060119) 1
 * unrar