english francais
home Products Team Store
DVDRemaster Fairmount Products Deblock
Fairmount

FairMount 1.0.2

FairMount is a tool that allows decryption of DVD content on the fly for a convenient access. FairMount does not perform the actual decryption, it simply forwards the data to VLC Media Player which is used for decryption - thus, VLC Media Player must be installed for FairMount to work.

Download Fairmount Now

FairMount can be downloaded with DVDRemaster.

Fairmount Screenshot

Using FairMount is easy. Just launch the application, and it will do it's magic automatically, replacing the original DVD on the desktop by a decrypted disc image of this DVD. To eject the original disc, simply eject the decrypted image. Upon quitting, the orignal disc will reappear.

Fairmount in action

Once FairMount is launched, making a backup of a DVD is as simple as drag and dropping its VIDEO_TS folder somewhere on your hard disk. The resulting copy will be decrypted as it is copied and will be ready for archival.

FairMount also enables application such as DVDRemaster to work directly on an encrypted DVD to make a copy that can be burnt on another DVD or that can be played on a video iPod.

Requirements

Fairmount requires Mac OS X version 10.4 or higher.

Known Issues

FairMount adds a bit of latency to data access (the bandwidth - the speed at which data is accessed - is however nearly unaffected). Some applications such as Apple DVD Player that expects low latency access might suffer from hiccups. When experiencing these hiccups, you can simply quit FairMount and use the DVD normally.

Technical information

FairMount source code is available and released under GPL license. For the developers taking a look at the source, here is some useful information:

Basic Sequence of Operations

  • A disc is inserted by the user.
  • FairMount receives a notification about the new disc.
  • If the disk is a video dvd, the original disk is unmounted.
  • It then starts a local web server (which is only accessible by the local host), to serve the decrypted image.
  • The decrypted image is then mounted using Apple's tool (hdiutil).
  • When the user ejects the image, the web server is stopped, and the original disc is ejected.

By this process, FairMount allows you to use an encrypted dvd as if it was decrypted.

Sources files overview

The source code of FairMount is distributed with the binary which is packaged with DVDRemaster. Here is an overview of each source file.

  • Types.h:
    Specifies some data types used throughout the code.
  • Decryption.[h,m]:
    Provides the dvdcss API. dvdcss is not included with FairMount, it is rather loaded from the user's disk by searching for VLC's bundle.
  • FairMount.[h,m]:
    This contains the main classes for FairMount, the FairMount class which registers itself with the Disk Arbitration framework to receive notifications of disks appearing and disappearing, and the DVDServer class which do the heavywork and contains the web server object.
  • Overlay.[h,m]:
    Contains the code neccessary to show the progress's overlay Apple's style.
  • socketWrap.[h,c]:
    Provides a simple API to hide socket usage details.
  • FileSize.[h,c]:
    Function that provides the byte size of block devices.
  • ListFiles.[h,cpp]:
    Provides the file's list (size, start and end) of the ISO9660 filesystem of the dvd. Used by CSSFileAccess to ensure decryption is only applied on VOB files.
  • HTTPServer.[h,cpp]:
    A quite minimal web server able to serve large files.
  • IFileAccess.h:
    Provides an interface to all data access done by the web server. By using this interfaces, it is easy to test different methods of accessing data.
  • FileAccess.cpp:
    A dumb file access module used for debugging purpose.
  • CSSFileAccess.cpp:
    This module does the decryption on the VOB files, and slices requests on VOB boundaries.
  • CachedFileAccess.cpp:
    This module works on top of another to provide threaded read-ahead cache.

Working on FairMount

If you want to work on FairMount, the first thing you should do is set the following environment variable for the executable (this is saved per user in XCode): name:"DYLD_INSERT_LIBRARIES" value:"/usr/lib/libMallocDebug.A.dylib". This ensures memory bugs will be found sooner.

Bug fixes, new features, comments, better documentation, etc, are all welcomed and should be sent to fairmount-devel@metakine.com for integration.

shade