MPlayer - instalacja

Slackware FAQ - czyli baza pytań i odpowiedzi.

Moderatorzy: Moderatorzy, Administratorzy

ODPOWIEDZ
Awatar użytkownika
difrost
Moderator
Posty: 2802
Rejestracja: 2006-03-11, 12:31
Lokalizacja: Wrocław
Kontakt:

MPlayer - instalacja

Post autor: difrost » 2006-08-25, 21:15

MPlayer - instalacja


CEL: Wśród użytkowników Linuksa nie brakuje kinomanów. Żadną tajemnicą nie jest, że MPlayer należy do najlepszych odtwarzaczy (i nie tylko) w tej galaktyce. Ten FAQ ma na celu przybliżyć proces instalacji tego wyśmienitego narzędzia.

SPIS TRESCI

Kod: Zaznacz cały

 1. Wstęp
 2. Czego będziemy potrzebować - zależności i nie tylko.
 3. Dlaczego NIE UŻYWAĆ GUI MPlayera.
 4. Struktura katalogów
 5. Środowisko kompilacji
 6. Schemat budowy pakietów
 7. Kompilacja.
 8. Składanie pakietu.
 9. Czynności poinstalacyjne.
 10. Dokumentacja
1. Wstęp
MPlayer posiada ogromna ilość opcji kompilacji i niesposób je wszystkie opisać. Podam tutaj kilka znaczących (lub nie) opcji i postaram sie w sposób jak najbardziej przejrzysty wszystko wytłumaczyć.

Produkt kompilacji opakujemy w ,,ładna paczkę'', tak aby mieć w systemie porządek. Proces składania w paczkę nie jest potrzeby i jeśli ktoś lubi mieć lekki bałagan w systemie, to może wykonać make install i nie przejmować się resztą.

2. Czego będziemy potrzebować - zależności i nie tylko.

Oczywiście podstawą są źródła budowanego MPlayera. Ponadto potrzebować będziemy troche kodeków, które nie są dostarczane wraz z MPlayerem:
- ostatni pakiet essentials;
- kodeki Real Video;
- oraz kodeki Quick Time.

To jednak nie wszystko. Możemy rozszerzyć liste obsługiwanych formatów instalując xvidcore (tutaj w wersji 1.1.0) lub/i wrzucić FFmpeg, który niestety będziemy musieli pobrać z repozytorium korzystając z Subversion (UWAGA: trzeba będzie spełnić sporo zależności jeśli chodzi o ten VCS):

Kod: Zaznacz cały

svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
Ponadto możemy dodać:
- CDParanoia-III;
- Libdv - (Quasar DV) kodek dla formatu DV;
- x264 - kodek formatu h264;
- Sterowniki DVB oraz dodatkowo - dla telewizji satelitarne (Digital Viedo Broadcast).

Obsługa DVD:
- Libdvdcss - biblioteka, która pozwala uzyskać dostęp do DVD tak jak do urządzenia blokowego, co ,,pomija'' szyfrowanie - używanie jej jest zakazane w kilku krajach (m. in. w USA);
- Libdvdread - biblioteka potrzeba jeśli chcemy odczytywać filmy na DVD (dobrze jest skompilować ją z obsługą biblioteki libdvdcss);
- Libdca - biblioteka do dekodowania formatu DTS.

Jeśli chodzi o Audio, to mamy do wyboru:
- ALSA
- aRts;
- EsounD;
- NAS;
- SDL.

Z bibliotek potrzebować możemy:
- libpng;
- libjpeg;
- Giflib;
- GTK+;
- FreeType;
- Fontconfig;
- AAlib;
- Fribidi;
- DirectFB.
Najważniejsze z nich, to libpng/libjpeg (zrzut klatek do PNG i JPEG), GTK+ (interfejs graficzny jest zrobiony - niestety - w GTK+ wersja 1.x.x), FreeType oraz Fontconfig.

Na koniec tej sporej listy należy zrobić sobie plik slack-desc o treści:

Kod: Zaznacz cały

mplayer: MPlayer - Linux Movie Player  & MEncoder - video encoder
mplayer:
mplayer: MPlayer can play most standard video formats and all other with the
mplayer: help of external codecs.
mplayer: 
mplayer:
mplayer: MEncoder is a command line video encoder for advenced users.
mplayer: 
mplayer:
mplayer:
mplayer:
4. Dlaczego NIE UŻYWAĆ GUI MPlayera.

Dotyczy wersji przed 1.0pre8!
Interfejs GUI MPlayera jest delikatnie mówiąc przestarzały. Został napisany z wykorzystaniem GTK+ w wersji 1. Nie jest on ani poręczny, ani estetyczny (istnieją odtwarzacze z o wiele ładniejszym GUI). Odpalenie filmu z linii poleceń jest szybszą i ,,poręczniejszą'' alternatywą. Ponadto interfejs GUI potrafi zachowywać się niestabilnie i sprawiać wiele problemów. Z tych właśnie powodów lepszym rozwiązaniem jest korzystać z linii poleceń.

W wersji 1.0pre8 GUI MPlayera zostało przepisane i wykorzystuje bibliotekę GTK+ w wersji 2. Jeśli użyjemy opcji --enable-gui, to zostanie zbudowany interfejs z wykorzystaniem tej wersji GTK.


4. Struktura katalogów

Najlepiej jest sobie zorganizować jakoś miejsce pracy. W tym celu tworzymy drzewo katalogów, np:

Kod: Zaznacz cały

./slack_devel
  |
  |__ src ($src)
  |__tmp ($tmp)
  |__prod ($prod)
  \__packages ($pkg)
gdzie:
*) src -- katalog gdzie mamy zapisane źrodła oraz pliki slack-desc;
*) tmp -- tutaj będziemy rozpakowywać źrodła i kompilować;
*) prod -- KATALOG ROBOCZY (KR), tutaj przekierujemy instalacje;
*) packages -- miejsce do przechowywania pakietów.

W nawiasach podałem nazwy, poprzez które będę się odnośił do poszczególnych katalogów w dalszej częsci tekstu.

5. Środowisko kompilacji

MPlayer potrafi sam dobrać odpowiednie flagi kompilacji, aczkolwiek możemy je sobie ustawić po swojemu. Developerzy MPlayera zalecają nie ustawianie własnych flag i pozostawienie ich doboru skryptowi konfiguracyjnemu, jednak jeśli wiemy dobrze co robimy (co robią używane przez nas flagi), to można zignorować te zalecenia.
Więcej o flagach optymalizacji i architekturze można poczytać np. tutaj.

Musimy ustawić sobie środowisko pracy, tj. ustawić zmienne CFLAGS i/lub LDFLAGS (nie musimy ustawiać CXXFLAGS -- nie będziemy mieli do czynienia z kodem C++). Przykładowo:

Kod: Zaznacz cały

export CFLAGS="-O2 -mtune=prescott -pipe"
export LDFLAGS=-s
Proponuje jednak nie używać LDFLAGS w tej postaci. Opcja '-s' powoduje, że podczas linkowania binarki będą ,,wstępnie'' stripowane. Stripowanie jest zdecydowanie lepiej zrobić samemu -- ,,na własną rękę :)'' -- przy użyciu komendy strip (man strip).

Zmienna CFLAGS odpowiada za flagi dodawane przy kompilacji źrodła C. Znaczenie kolejnych opcji jest następujące:
*) -O2 -- włącza optymalizacje kodu na poziomie 2 (poziomów jest 3, w kompilatorach serii 3.4.5 i wyżej jest jeszcze poziom 4). Jest to rozsądny wybór, dlatego, że optymalizacja na poziomie wyższym, tj. 3, rzadko daje pożądany efekt w postaci mniejszej binarki.
*) -mtune=ARCH -- włącza kilka flag optymalizujacych kod specjalnie pod architekture ARCH procesora. Jesli nie wiesz pod jaką nazwą występuje architektura twojego procesora to w man gcc znajdziesz więcej informacji na ten temat.
UWAGA!!! Opcja -mtune występuje tylko w kompilatorach GCC 3.4.x i wyższych. We wcześniejszych wersjach należy stosować opcje -cpu! Ponadto można użyć flagi -march, która jest ,,mocniejsza'' od -mtune. Swoją drogą włącza ona również -mtune (lub -mcpu).
*) -pipe -- opcja ta nie optymalizuje kodu, ale przyspiesza proces kompilacji. Mowi ona kompilatorowi, aby zamiast plików tymczasowych używal potoków, co znacząco przyspiesza kompilacje.

Oczywiście możesz tutaj podawać jakie chcesz opcje.

6. Schemat budowy pakietów
Schemat budowy pakietu jest zasadniczo zawsze taki sam, tj:
1) kompilujemy źrodło (większość pakietów umieszczamy z prefixem ustawionym na /usr);
2) przekierowujemy instalacje do KATALOGU ROBOCZEGO ($prod), gdzie będzie składany pakiet;
3) tworzymy w KR katalog install i do niego kopiujemy odpowiedni plik slack-desc i/lub doinst.sh.
4) składamy pakiet komendą makepkg.

Jeszcze jedna mała uwaga:
Jeśli posiadacie komputer z HT lub maszynę wieloprocesorowa (2 to juz wiele:D), to można podać odpowiednią opcję (-jX, gdzie X to ilość wątków) do make, tak aby kompilowane było kilka plików jednocześnie, np. dla HT:

Kod: Zaznacz cały

make -j2
jest dobrym wyborem :).

7. Kompilacja
W pierwszej kolejności musimy rozpakować pobrane kodeki w dwa miejsce: tam gdzie będziemy składać paczke i tam gdzie będą one po instalacji paczki. Powiedzmy, że będzie to katalog /usr/lib/codecs. Tak wiec tworzymy te katalogi:

Kod: Zaznacz cały

mkdir -p /usr/lib/codecs
mkdir -p $prod/usr/lib/codecs
Teraz rozpakowujemy wszystkie kodeki do katalogu $prod/usr/lib/codecs.
Musimy jeszcze zmienic prawa dla tych kodeków:

Kod: Zaznacz cały

chmod 755 $prod/usr/lib/codecs/*.so*
chmod 644 $prod/usr/lib/codecs/*.dll $prod/usr/lib/codecs/*.ax $prod/usr/lib/codecs/*.acm \
  $prod/usr/lib/codecs/*.qtx $prod/usr/lib/codecs/*.DLL $prod/usr/lib/codecs/*.qts $prod/usr/lib/codecs/*.drv
Następnie kopiujemy jego zawartość do /usr/lib/codecs

Kod: Zaznacz cały

cp $prod/usr/lib/codecs/* /usr/lib/codecs
Mała dygresja: - po co zaszywać kodeki w paczce? Odpowiedź prosta - jeśli dorzucimy kodeki do wybranego katalogu, to bez rekompilacji MPlayera nie będziemy mogli z nich korzystać (brak wzmianki w codecs.conf).

Przechodzimy do konfiguracji. Przykładowe configure:

Kod: Zaznacz cały

./configure --prefix=/usr --confdir=/etc --disable-lirc --disable-lircc \
--disable-tv --disable-rtc --disable-tv-v4l --disable-tv-v4l2 --disable-esd \
--disable-tv-bsdbt848 --enable-dvdread --disable-macosx --disable-inet6 \
--with-xvidlibdir=/usr/lib --with-xvidincdir=/usr/include --enable-libavutil_so \
--enable-libavcodec_so  --enable-libavformat_so --enable-largefiles \
--enable-alsa --language=pl --with-win32libdir=/usr/lib/codecs --with-reallibdir=/usr/lib/codecs \ --with-extraincdir=/usr/include
To jest tylko przykład, posłuży do opisy kilku opcji:
(*) --prefix=/usr --confdir=/etc - te dwie opcje powinny być w każdej kompilacji;
(*) --disable-lirc --disable-lircc - (disable lub enable) zdalne sterowanie poprzez LIRC i/lub LIRCCD LIRC klient daemon;
(*) --disable-tv - (disable lub enable) interfejs TV (TV i DVB);
(*) --disable-rtc - (disable lub enable) RTC (Real Time Clock = /dev/rtc), zmiany w jadrach > 2.6.16 spowodowały, że MPlayer nie kompiluje się z tą opcją i należy użyć tutaj disable;
(*) --disable-tv-v4l --disable-tv-v4l2 - (disable lub enable) interfejsy Video4Linux TV i Video4Linux2 TV;
(*) --disable-tv-bsdbt848 - (disable lub enable) interfejs BSD BT848;
(*) --disable-esd --disable-arts - (disable lub enable) wsparcie dla aRts i EsounD;
(*) --enable-dvdread - (disable lub enable) czytanie plyt DVD - biblioteka ta jest również częścią MPlayera ale z powodów podanych poniżej (dla FFmpeg) lepiej jest korzystać z zewnętrznej biblioteki;
(*) --disable-macosx - (disable lub enable) dodatki dla MacOSa;
(*) --disable-inet6 - (disable lub enable) wsparcie dla IPv6;
(*) --with-xvidlibdir=/usr/lib --with-xvidincdir=/usr/include - jeśli kompilowaliśmy wcześniej xvidcore z --prefix=/usr, to te opcje mają na celu pomóc MPlayerowi znaleźć biblioteki i nagłówki xvidcore;
(*) --enable-libavutil_so --enable-libavcodec_so --enable-libavformat_so - (disable lub enable) biblioteki dostarczane przez FFmpeg, są one również częścią MPlayera i jeśli nie korzystamy z zewnętrznego FFmpeg, to nie musimy podawać tych opcji. Nowe wersje MPlayera wychodzą dosyć rzadko, a FFmpeg jest rozwijane na bieżąco i warto co jakiś czas ściągnąć nową wersję i ją skompilować. Nie będziemy musieli rekompilować MPlayera po takim upgrade;
(*) --enable-alsa - (disable lub enable) obsluga wyjścia Audio przez system ALSA;
(*) --language=pl - wybieramy język;
(*) --with-win32libdir=/usr/lib/codecs --with-reallibdir=/usr/lib/codecs - wskazujemy miejsce gdzie wrzuciliśmy kodeki;
(*) --enable-largefiles - wsparcie dla plików > 2GB;
(*) --with-extraincdir=/usr/include - opcja, jak to się mówi, w razie 'W'.

Pozostałe opcje i uwagi:
(*) --enable-menu - włącza OSD (On Screen Display)
(*) --enable-shared-pp - MPlayer tworzy statyczną bibliotekę post-procesingu (PP). Jeśli chcemy wymusić utworzenie biblioteki dzielonej należy podać tą opcje, ale tylko w przypadku korzystania z wewnętrznej biblioteki FFmpeg. Jeśli to zrobimy musimy również dodać poniższą opcje;
(*) --disable-fastmemcpy - przy budowie dzielonej biblioteki post-procesingu, opcja ta zapobiega występowaniu błędów undefined reference, gdy inne biblioteki próbują zlinkować sie ze statyczną biblioteką PP, która nie została zbudowana (opcja wyżej);
(*) --enable-gui - zbuduj interfejs GUI MPlayera z wykorzystaniem GTK+ 2;
(*) --enable-old-gui - zbuduj interfejs GUI MPlayera z wykorzystaniem GTK+ 1 - stary interfejs, który został zastąpiony nowym napisanym z wykorzystaniem GTK+ 2 (wyżej wymieniona opcja);
(*) --disable-network - wyłącza wsparcie dla strumieni http, mms i rtp.

Opcji jest więcej, ale skrypt configure sprawdzi co mamy w systemie i sam podejmie decyzję o tym jaką ,,usługę'' włączyć. Wszystkie opcje można znaleźć wydając komendę

Kod: Zaznacz cały

./configure --help | less
Przechodzimy do kompilacji nieśmiertelnym

Kod: Zaznacz cały

make dep && make
Tutaj można zastosować wcześniejsze uwagi na temat SMP i HT.

Jeśli po wydaniu powyższej komendy pojawi się błąd o braku pliku version.h, to trzeba uruchmić skrypt version.sh i ponownie rozpocząć kompilacje.

8. Składanie pakietu
Tworzymy teraz resztę drzewa katalogów w miejscu gdzie przekierowujemy instalację ($prod), tj.

Kod: Zaznacz cały

mkdir -p $prod/etc/mplayer
mkdir -p $prod/usr/bin
mkdir -p $prod/usr/man
mkdir -p $prod/usr/share/mplayer
Teraz należy przekierować instalację do katalogu $prod. Niestety Makefile nie posiada magicznej zmiennej DESTDIR i dlatego proces ten wygląda troche inaczej:

Kod: Zaznacz cały

make install prefix="$prod/usr" BINDIR="$prod/usr/bin" CONFDIR="$prod/etc/mplayer" \
MANDIR="$prod/usr/man" DATADIR="$prod/usr/share/mplayer"
Musimy jeszcze skopiować w odpowiednie miejsce wygenerowane pliki konfiguracyjne:

Kod: Zaznacz cały

cp etc/codecs.conf $prod/etc/mplayer
cp etc/input.conf $prod/etc/mplayer
cp etc/menu.conf $prod/etc/mplayer
W tym momencie możemy spakować manuale i złożyć paczkę. Pierwsza czynność jest trywialna i nie będę pisał jak to zrobić. Jeśli chodzi o składanie paczki, to wygląda to tak:

Kod: Zaznacz cały

cd $prod
mkdir install
cat $src/slack-desc > install/slack-desc
makepkg -l y -c n $pkg/mplayer-1.0pre8-ARCH-1.tgz
gdzie ARCH jest zastosowaną architekturą.

Na końcu usuwamy katalog, do którego kopiowaliśmy kodeki:

Kod: Zaznacz cały

rm -rf /usr/lib/codecs
Wystarczy teraz zainstalować paczkę i cieszyć sie najlepszym odtwarzaczem (i nie tylko) w całej galaktyce.

9. Czynności poinstalacyjne

Po zainstalowaniu paczki musimy wykonać jeszcze kilka czynności:
- tworzymy katalog konfiguracji dla MPlayera w naszym katalogu domowym i kopiujemy pliki z /etc/mplayer:

Kod: Zaznacz cały

mkdir ~/.mplayer
cp /etc/mplayer/* ~/.mplayer
- czcionki TTF. Kopiujemy sobie wybraną czcionke TTF z systemu MS Windos (np. arial.ttf) do katalogu domowego:

Kod: Zaznacz cały

cp arial.ttf ~/.mplayer/subfont.ttf
- konfiguracja MPlayera. Odbywa się ona poprzez plik config:

Kod: Zaznacz cały

touch ~/.mplayer/config
Tutaj podajemy wszystkie opcje, które są przez nas używane ,,na codzień'', np.:

Kod: Zaznacz cały

vo=sdl
ao=alsa
fs=yes
cache=8192
dr=yes
font=~/.mplayer/subfont.ttf
subfont-autoscale=0
subfont-text-scale=28
subfont-encoding=cp1250
dvd-device=/dev/cdrom
Znaczenie opcji:
- vo - Video Output, dostępne wyjścia można znaleźć wydająć polecenie

Kod: Zaznacz cały

mplayer -vo help
Polecam wyjścia xv i sdl. To drugie wymaga biblioteki SDL i pozwala na umieszczanie napisów pod obrazem.
- ao - Audio Output, tak jak wyżej dostępne wyjścia uzyskujemy wydając polecenie

Kod: Zaznacz cały

mplayer -ao help
- fs=yes - tryb pełnoekranowy;
- cache=ROZMIAR - cachowanie odtwarzanego filmu (ROZMIAR danych zostanie zarezerwowany);
- dr=yes - Double Rendering - opcja przydatna, ale wymaga dosyć mocnego komputera;
- dvd-device=/dev/cdrom - wskazujemy nasz napęd DVD;
- font=~/.mplayer/subfont.ttf - ścieżka do czcionki, czasem '~' potrafi nie zadzialać, więc lepiej jest podać pełną ścieżkę;
W przypadku czcionek TTF:
- subfont-autoscale=0 - wyłącz autoskalowanie rozmiaru czcionki;
- subfont-text-scale=28 - ustaw ,,rozmiar'' czcionki;
- subfont-encoding=cp1250 - ustaw kodowanie napisów.

10. Dokumentacja

Niezwykle bogatą dokumentację (w języku ojczystym) do MPlayera można znaleźć tutaj.
------------------------------------------------------------------------------------------------
Autor:difrost
Ostatnio zmieniony 2006-11-13, 20:51 przez difrost, łącznie zmieniany 11 razy.

ODPOWIEDZ