3.7. Odtwarzanie DVD

Aby poznać pełną listę dostępnych opcji, proszę przeczytać odpowiednie strony man. Składnia do odtwarzania standardowego DVD jest następująca:

mplayer dvd://<ścieżka> [-dvd-device <urządzenie>]

Przykład:

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

Jeśli skompilowałeś MPlayera z obsługą dvdnav, składnia jest taka sama, tylko musisz użyć dvdnav:// zamiast dvd://.

Domyślnym urządzeniem (device) DVD jest /dev/dvd. Jeżeli Twoje ustawienia są inne, stwórz odpowiedni symlink lub ustaw odpowiednie urządzenie (device) w linii polecenia korzystając z opcji -dvd-device.

MPlayer używa libdvdread oraz libdvdcss do odtwarzania i dekodowania DVD. Te dwie biblioteki są zawarte w głównym drzewie źródłowym MPlayera, nie trzeba instalować ich osobno. Możesz też użyć systemowych wersji tych bibliotek, ale nie jest to zalecane, ponieważ może spowodować błędy, niekompatybilności bibliotek oraz zmniejszenie prędkości.

Uwaga

Jeśli występują problemy z dekodowaniem DVD, spróbuj wyłączyć supermount lub inne tego typu usługi. Niektóre napędy RPC-2 mogą również wymagać ustawienia kodu regionu DVD.

Struktura dysku DVD.  Dyski DVD mają po 2048 bajtów na sektor z ECC/CRC. Zwykle posiadają system plików UDF na pojedynczej ścieżce zawierającej różnorakie pliki (małe pliki .IFO i .BUK oraz duże (1GB) pliki .VOB). Są one rzeczywistymi plikami i mogą być kopiowane/odtwarzane z podmontowanego systemu plików niezakodowanego DVD.

Pliki .IFO zawierają informacje nawigacyjne filmu (mapa rozdziałów/tytułów/kątów kamery, tablica języków, itp) i są konieczne do odczytu i interpretacji zawartości pliku .VOB (filmu). Pliki .BUK są kopiami zapasowymi plików .IFO. Używają sektorów wszędzie, więc aby zaimplementować nawigację na DVD lub rozszyfrować zawartość, należy używać adresowania sektorów dysku w trybie raw.

Z tego powodu obsługa DVD wymaga dostępu do urządzenia w trybie raw bazującym na sektorach. Niestety wymagane jest (pod Linuksem) posiadanie uprawnień roota aby móc korzystać z sektorowego adresowania pliku. Dlatego też nie w ogóle używamy sterownika systemu plików pochodzącego z jądra, ale reimplementujemy to w przestrzeni użytkownika. Zajmuje się tym biblioteka libdvdread 0.9.x. Sterownik systemu plików UDF zawarty w jądrze nie jest wymagany ponieważ wspomniane biblioteki zawierają własny, wbudowany sterownik systemu plików UDF. DVD nie musi być podmontowany, bowiem używany jest jedynie dostęp w trybie raw.

Czasami /dev/dvd nie może być czytany przez użytkowników, zatem autorzy libdvdread zaimplementowali warstwę emulacji, która tłumaczy adresowanie sektorowe na nazwy plików i offsety, aby emulować dostęp w trybie raw na podmontowanym systemie plików albo nawet na twardym dysku.

libdvdread równie dobrze akceptuje miejsce podmontowania (mountpoint) jak i nazwę urządzenia przy dostępie w trybie raw i sprawdza /proc/mounts w celu odnalezienia odpowiedniej nazwy urządzenia (device). Zostało to napisane z myślą o systemie Solaris, gdzie nazwy urządzeń są przydzielane automatycznie.

Deszyfrowanie DVD.  Do deszyfrowania DVD jest używana biblioteka libdvdcss. Metoda jej działania może być określona poprzez zmienna środowiskową DVDCSS_METHOD, co jest dokładniej opisane na stronie man.

Napędy DVD RPC-1 zabezpieczają ustawienia regionu jedynie poprzez oprogramowanie. Napędy RPC-2 mają sprzętowe zabezpieczenie, które pozwala na co najwyżej 5 zmian. Jeżeli posiadamy napęd DVD RPC-2 wymagana/zalecana jest aktualizacja firmware'u do RPC-1. Nowe wersje firmware'ów można znaleźć w internecie. Poszukiwania radzimy rozpocząć od forum firmware'ów. Jeżeli nie ma tam nowej wersji firmware'u dla naszego urządzenia, użyj regionset tool (narzędzia do zmiany regionów) aby ustawić kod regionu na swoim napędzie DVD (pod Linuksem). Ostrzeżenie: Możesz ustawić region tylko 5 razy.