Lire un Blu-ray sur un Mac avec VLC

Aujourd’hui, un truc intéressant, même si ça reste une PoC (Proof of Concept) : il est possible de lire un Blu-ray sur un Mac. J’ai utilisé VLC, un logiciel open source bien connu (et français) et pas mal de bidouilles. Ce n’est pas à la portée de tout le monde, ça nécessite du matériel particulier — un lecteur de Blu-ray… — et ça ne fonctionne qu’avec certains Blu-ray actuellement.

Ce que je montre ici est vraiment une démonstration que ça fonctionne, mais c’est totalement inutilisable au quotidien, il faut bien s’en rendre compte. Pour information, le Blu-ray utilisé est une compilation des courts-métrages de Pixar. Ce n’est pas un hommage à Steve Jobs, simplement c’est le premier de mes Blu-ray qui a bien voulu fonctionner…

Les explications sont à prendre en l’état, je ne fais pas nécessairement les choses de la meilleure façon, je ne suis pas développeur à la base. Si vous avez des suggestions/corrections, commentez !

Commençons par le commencement : il faut un lecteur de Blu-ray. Mac OS X supporte sans soucis les lecteurs et les graveurs de Blu-ray et n’importe quel modèle devrait faire l’affaire. Le mien est un vieux modèle slim (PATA) dans un boîtier externe FireWire, mais ça n’a pas d’importance dans les faits.

Seconde chose, VLC 2.0.1, la dernière version en date.

Ensuite, ça va se corser : il faut deux bibliothèques que VLC ne livre pas par défaut, pour des raisons légales. Il va donc falloir compiler ces dernières en passant par Xcode, qui est disponible sur le Mac App Store.

Commençons par libbluray.

Il faut aller télécharger la dernière version sur le FTP, la décompresser et la compiler. Si vous n’êtes pas familier de ce genre de choses, il faut passer dans le Terminal, se rendre dans le dossier de téléchargement et taper les lignes suivantes.

./bootstrap
./configure
make
sudo make install

Normalement, il n’y aura pas d’erreur (j’ai testé sous Mac OS X 10.7.3 sur une machine fraîchement installée).

Ensuite, il faut installer et compiler libgcrypt, une dépendance nécessiare pour libaacs. Cette bibliothèque se télécharge sur le site officiel et se compile de la même façon.

Enfin, il faut compiler libaacs, qui vient de passer en version 0.4.0. La procédure est la même et tout devrait bien se passer si vous avez installé correctement libgcrypt.

Une fois que c’est fait, il faut aller récupérer les fichiers libaacs.0.dylib et libbluray.1.dylib (le nombre peut varier). Ils se trouvent normalement dans /usr/local/lib/.

Le moyen le plus simple de s’y rendre est d’aller dans le Finder, de choisir Aller dans la barre de menu, Aller au dossier… et de taper le chemin.

Une fois les fichiers sélectionné, il faut les placer au bon endroit dans VLC. Il faut se rendre dans le dossier Applications, faire un clic secondaire sur VLC, choisir Afficher le contenu du paquet et copier les deux fichiers dans /Contents/MacOS/lib/.

Maintenant, c’est la partie la plus gênante légalement : par défaut, VLC ne livre pas les clés qui permettent de lire les Blu-ray. C’est normal, ils n’en ont pas le droit. Il va donc falloir trouver un fichier qui s’appelle KEYDB.cfg qui contient les clés nécessaires à la lecture des Blu-ray (ce n’est que la première étape).

Je vous laisse chercher sur Internet, ça se trouve assez facilement.

Une fois que vous avez ce fichier, il faut passer dans le Terminal.

mkdir ~/.config
mkdir ~/.config/aacs

Comme précédemment, il faut maintenant aller dans ce répertoire caché (via le Finder) et copier le fichier sous le nom KEYDB.cfg.

Mais ce n’est pas fini. Visiblement, sous Mac OS X, VLC a du mal à déterminer lui-même les informations nécessaires à la lecture des Blu-ray, il faut donc les ajouter à la main dans le fichier.

Comme pour le fichier keydb.cfg, les clés se trouvent assez facilement sur le net. Il faut une clé par film, qui va se présenter sous la forme suivante :

0000000000000000000000000000000000000000 = Alien_WW | D | 2000-00-00 | V | 00000000000000000000000000000000 | M | 00000000000000000000000000000000 | I | 00000000000000000000000000000000

Les points importants sont la première série de code, le nom, la date et la série qui est derrière le | V |. Il va donc falloir les récupérer et les faire précéder de 0x, pour obtenir une ligne qui ressemble à ça :

0x0000000000000000000000000000000000000000 = Alien_WW | D | 2000-00-00 | V | 0x00000000000000000000000000000000

Enfin, il faut copier la ligne en question à la fin du fichier KEYDB.cfg. Il faudra donc le faire pour chaque film, en supposant que la clé soit disponible sur le net. Pour ceux que ça intéresse, la structure du fichier KEYDB.cfg est disponible sur le site de Videolan.

Normalement, maintenant, ça devrait fonctionner. Devrait, parce que j’ai du essayer plusieurs Blu-ray avant d’obtenir une image. Sur une dizaine de films, trois ont bien voulu démarrer : La Belle Au Bois Dormant, Un Jour Sans Fin et une compilation des courts métrages de Pixar. Et seul le Pixar fonctionne correctement. Sur Un Jour Sans Fin, par exemple, VLC n’arrive pas à décoder l’image (le son fonctionne parfaitement) du film, même si les bonus passent parfaitement.

Quelques petits trucs pour ceux qui veulent tester. D’abord, faire une image du disque sur le disque dur permet de faire des tests plus rapidement, mon lecteur Blu-ray est assez lent et attendre qu’il mette en cache les données est vite énervant lors de tests.

Ensuite, il est parfois pratique de lancer VLC avec des informations de debug, pour vérifier ce qui pose des problèmes. Il suffit de mettre le nom de votre Blu-ray et de vérifier les problèmes dans le Terminal.

/Applications/VLC.app/Contents/MacOS/VLC bluray:////Volumes/PIX1EFD1 -vvvvv

VLC ne charge pas (encore) les menus des Blu-ray. libbluray est normalement capable de le faire, mais je n’ai pas réussi sur un seul film. Ca s’active dans les préférences de VLC, section Input / Codecs, Access Modules, BluRay, il faut cocher Bluray menus. Pour sélectionner le film, il faut donc passer par Lecture puis Titre dans les menus de VLC.

Petit truc à savoir, VLC ne prend pas encore en charge les GPU sous Mac OS X pour le décodage, donc un ordinateur puissant est nécessaire pour décoder correctement les flux vidéo. Mon Core 2 Duo à 2,8 GHz a un peu de mal, mais une machine à base de Core i5 ou i7 devrait s’en sortir plus facilement.

Maintenant, quelques images…

Un bonus en SD

Un bonus en HD

Luxo en Full HD

Les Indestructibles