5.2. DVD playback

For the complete list of available options, please read the man page. The Syntax for a standard Digital Versatile Disc (DVD) is as follows:

mplayer dvd://<track> [-dvd-device <device>]


mplayer dvd://1 -dvd-device /dev/hdc

The default DVD device is /dev/dvd. If your setup differs, make a symlink or specify the correct device on the command line with the -dvd-device option.

New-style DVD support (mpdvdkit2).  MPlayer uses libdvdread and libdvdcss for DVD decryption and playback. These two libraries are contained in the libmpdvdkit2/ subdirectory of the MPlayer source tree, you do not have to install them separately. We opted for this solution because we had to fix a libdvdread bug and apply a patch which adds cracked CSS keys caching support to libdvdcss This results in a large speed increase because the keys do not have to be cracked every time before playing.

MPlayer can also use system-wide libdvdread and libdvdcss libraries, but this solution is not recommended, as it can result in bugs, library incompatibilities and slower speed.


In case of DVD decoding problems, try disabling supermount, or any other such facilities.

DVD structure.  DVD disks have 2048 bytes per sector with ECC/CRC. They usually have an UDF filesystem on a single track, containing various files (small .IFO and .BUK files and big (1GB) .VOB files). They are real files and can be copied/played from the mounted filesystem of an unencrypted DVD.

The .IFO files contain the movie navigation information (chapter/title/angle map, language table, etc) and are needed to read and interpret the .VOB content (movie). The .BUK files are backups of them. They use sectors everywhere, so you need to use raw addressing of sectors of the disc to implement DVD navigation or decrypt the content.

DVD support needs raw sector-based access to the device. Unfortunately you must (under Linux) be root to get the sector address of a file. That's why we don't use the kernel's filesystem driver at all, instead we reimplement it in userspace. libdvdread 0.9.x and libmpdvdkit do this. The kernel UDF filesystem driver is not needed as they already have their own builtin UDF filesystem driver. Also the DVD does not have to be mounted as only the raw sector-based access is used.

Sometimes /dev/dvd cannot be read by users, so the libdvdread authors implemented an emulation layer which transfers sector addresses to filenames+offsets, to emulate raw access on top of a mounted filesystem or even on a hard disk.

libdvdread even accepts the mountpoint instead of the device name for raw access and checks /proc/mounts to get the device name. It was developed for Solaris, where device names are dynamically allocated.

The default DVD device is /dev/dvd. If your setup differs, make a symlink, or specify the correct device on the command line with the -dvd-device option.

DVD authentication.  The authentication and decryption method of the new-style DVD support is done using a patched libdvdcss (see above). The method can be specified through the environment variable DVDCSS_METHOD, which can be set to key, disk or title.

If nothing is specified it tries the following methods (default: key, title request):

  1. bus key: This key is negotiated during authentication (a long mix of ioctls and various key exchanges, crypto stuff) and is used to encrypt the title and disk keys before sending them over the unprotected bus (to prevent eavesdropping). The bus key is needed to get and predecrypt the crypted disk key.

  2. cached key: MPlayer looks for already cracked title keys which are stored in the ~/.mplayer/DVDKeys directory (fast ;).

  3. key: If no cached key is available, MPlayer tries to decrypt the disk key with a set of included player keys.

  4. disk: If the key method fails (e.g. no included player keys), MPlayer will crack the disk key using a brute force algorithm. This process is CPU intensive and requires 64 MB of memory (16M 32Bit entries hash table) to store temporary data. This method should always work (slow).

  5. title request: With the disk key MPlayer requests the crypted title keys, which are inside hidden sectors using ioctl(). The region protection of RPC-2 drives is performed in this step and may fail on such drives. If it succeeds, the title keys will be decrypted with the bus and disk key.

  6. title: This method is used if the title request failed and does not rely on any key exchange with the DVD drive. It uses a crypto attack to guess the title key directly (by finding a repeating pattern in the decrypted VOB content and guessing that the plain text corresponding to the first encrypted bytes is a continuation of that pattern). The method is also known as "known plaintext attack" or "DeCSSPlus". In rare cases this may fail because there is not enough encrypted data on the disk to perform a statistical attack or because the key changes in the middle of a title. This method is the only way to decrypt a DVD stored on a hard disk or a DVD with the wrong region on an RPC2 drive (slow).

RPC-1 DVD drives only protect region settings through software. RPC-2 drives have a hardware protection that allows 5 changes only. It might be needed/recommended to upgrade the firmware to RPC-1 if you have a RPC-2 DVD drive. You can try finding firmware upgrades for your drive on the internet, this firmware forum may be a good starting point for your search. If there is no firmware upgrade available for your device, use the regionset tool to set the region code of your DVD drive (under Linux). Warning: You can only set the region 5 times.