12.3. Komercyjny Unix

MPlayer został przeportowany na wiele komercyjnych wariantów Uniksa. Jako, że środowiska programistyczne przeważnie różnią się od tych znajdowanych w wolnych Uniksach, być może będziesz musiał wprowadzić ręczne poprawki, aby program skompilował się poprawnie.

12.3.1. Solaris

MPlayer powinien działać na Solarisie 2.6 lub nowszym. Możesz skorzystać ze sterownika dźwięku SUN'a podająć opcję -ao sun.

Na UltraSPARCach, MPlayer korzysta z rozszerzenia VIS (odpowiednik MMX), obecnie tylko w libmpeg2, libavo i libavcodec, ale nie w mp3lib. Możesz oglądać plik VOB na procesorze z taktowaniem 400MHz. Będziesz potrzebował do tego biblioteki mLib.

Caveat:

  • mediaLib jest aktualnie wyłączone w domyślnej konfiguracji MPlayera, z powodu błędów. Użytkownicy SPARC-ów, którzy budują MPlayera z obsługą mediaLib informowali o delikatnym, zielonymi miganiu wideo kodowane i dekodowanego przez libavcodec. Możesz włączyć mediaLib, jeżeli chcesz używając:

    				$ ./configure --enable-mlib
    				

    Robisz to na własne ryzyko. Użytkownicy x86 powinni nigdy nie używać mediaLib, ponieważ w efekcie otrzymają kiepską wydajność MPlayera.

Aby zbudować pakiet, będziesz potrzebował GNU make (gmake, /opt/sfw/gmake), rdzenne make Solarisa nie zadziała. Typowy błąd jaki otrzymujesz, budując tym drugim zamiast GNU make, to:

   % /usr/ccs/bin/make
   make: Fatal error in reader: Makefile, line 25: Unexpected end of line seen

W Solarisie przeznaczonym dla SPARC, potrzebujesz kompilatora GNU C/C++; nie ma znaczenia, czy jest on skonfigurowany z, czy bez GNU assemblera.

Na Solarisie x86, potrzebujesz GNU assemblera i kompilatora GNU C/C++, skonfigurowanego do używania GNU assemblera! Kod MPlayera, na platformie x86, w znaczący sposób korzysta z instrukcji MMX, SSE i 3DNOW!, które nie mogą być skompilowane przy pomocy assemblera Sun /usr/ccs/bin/as.

Skrypt configure stara się określić, jaki assembler wywoływany jest przez komendę "gcc" (jeżeli próba zakończy się fiaskiem, użyj opcji --as=/gdziekolwiek/zainstalowałeś/gnu-as, żeby określić gdzie skrypt configure może znaleźć GNU "as" w Twoim systemie).

Rozwiązania najczęstszych problemów:

  • Błąd jaki wyświetli configure na Solarisie x86, używającym GCC bez GNU assemblera:

       % configure
       ...
       Checking assembler (/usr/ccs/bin/as) ... , failed
       Please upgrade(downgrade) binutils to 2.10.1...
    

    (Rozwiązanie: Zainstaluj i używaj gcc skonfigurowanego z opcją --with-as=gas)

    Typowy błąd, jaki otrzymasz przy próbie budowy kompilatorem GNU C, który nie używa GNU as:

       % gmake
       ...
       gcc -c -Iloader -Ilibvo -O4 -march=i686 -mcpu=i686 -pipe -ffast-math
            -fomit-frame-pointer  -I/usr/local/include   -o mplayer.o mplayer.c
       Assembler: mplayer.c
       "(stdin)", line 3567 : Illegal mnemonic
       "(stdin)", line 3567 : Syntax error
       ... more "Illegal mnemonic" and "Syntax error" errors ...
    

  • MPlayer może się wysypać podczas dekodowania i kodowania wideo używających win32codecs:

    			...
    			Trying to force audio codec driver family acm...
    			Opening audio decoder: [acm] Win32/ACM decoders
    			sysi86(SI86DSCR): Invalid argument
    			Couldn't install fs segment, expect segfault
    			
    			
    			MPlayer interrupted by signal 11 in module: init_audio_codec
    			...
    		

    Dzieje się tak z powodu zmian w sysi86() w Solaris 10 i wydaniach pre-Solaris Nevada b31. Zostało to naprawione w Solaris Nevada b32; jednak Sun nie przeniósł jeszcze poprawki do Solarisa 10. Projekt MPlayer poinformował o tym problemie Sun i łatka jest aktualnie wprowadzana do Solarisa 10. Więcej informacji o tym błędzie może zostać znaleziona na stronie: http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6308413.

  • Ze względu na błędy występujące w Solarisie 8, możesz nie być w stanie odtwarzać płyt DVD o pojemności większej niż 4 GB:

    • Sterownik sd(7D) dla Solarisa 8 x86 ma błąd ujawniający się przy próbie dostępu do bloku dyskowego >4GB urządzenia korzystającego z logicznego rozmiaru bloku !=DEV_BSIZE (np. nośnik CD-ROM i DVD). Ze względu na przepełnienie 32bitowych liczb całkowitych, odczytywany jest adres dysku modulo 4GB (http://groups.yahoo.com/group/solarisonintel/message/22516). Ten problem nie występuje na Solarisie 8 przeznaczonym dla procesorów SPARC.

    • Podobny błąd występuje w kodzie systemu plików hsfs(7FS) (znanym jako ISO9660), hsfs może nie obsługiwać partycji/dysków większych niż 4GB, wszystkie dane są odczytywane z bloku modulo 4GB (http://groups.yahoo.com/group/solarisonintel/message/22592). Problem może być rozwiązany przy pomocy łatki 109764-04 (sparc) / 109765-04 (x86).

12.3.2. IRIX

Możesz albo spróbować zainstalować program GNU install i (jeżeli nie umieściłeś go w globalnej ścieżce) wskazać go przez:

./configure --with-install=
/ścieżka/i/nazwa/programu/instalacyjnego

Albo użyć domyślnego programu instalacyjnego dostarczonego z IRIX 6.5, w tym wypadku należy ręcznie zmodyfikować plik Makefile w kilku miejscach. Zmień poniższe dwie linijki:

  $(INSTALL) -c -m 644 DOCS/mplayer.1 $(MANDIR)/man1/mplayer.1

  $(INSTALL) -c -m 644 etc/codecs.conf $(CONFDIR)/codecs.conf

na:

  $(INSTALL) -m 644 mplayer.1 $(MANDIR)/man1/

  $(INSTALL) -m 644 codecs.conf $(CONFDIR)/

A potem wykonaj (w katalogu źródłowym MPlayera):

cp DOCS/mplayer.1 . ; cp etc/codecs.conf .

i dalej skompiluj i zainstaluj.

12.3.3. HP-UX

Joe Page umieścił na swojej stronie domowej dokument HOWTO stworzony przez Martina Gansser'a dotyczący MPlayera na HP-UX. Korzystając z zawartych tam intrukcji program powinien się skompilować bez najmniejszych problemów. Poniższe informacje są zaczerpnięte z tego opracowania.

Do budowy będziesz potrzebował GCC 3.4.0, GNU make 3.80, i SDL 1.2.7 lub ich nowszych wersji. Kompilator HP cc nie wyprodukuje działającego programu, a wcześniejsze wersje GCC są pełne błędów. Aby moć skorzystać z OpenGL, musisz zainstalować biblioteki Mesa, wtedy sterowniki wyjścia video gl i gl2 powinny działać. Ich wydajność może być tragiczna, jednak zależne jest to od mocy obliczeniowej procesora. Dobrym zamiennikiem, raczej kiepskiego, systemu dźwiękowego HP-UX jest GNU esound.

Stwórz urządzenie DVD, przeskanuj magistralę SCSI komendą:

# ioscan -fn

Class          I            H/W   Path          Driver    S/W State    H/W Type        Description
...
ext_bus 1    8/16/5      c720  CLAIMED INTERFACE  Built-in SCSI
target  3    8/16/5.2    tgt   CLAIMED DEVICE
disk    4    8/16/5.2.0  sdisk CLAIMED DEVICE     PIONEER DVD-ROM DVD-305
                         /dev/dsk/c1t2d0 /dev/rdsk/c1t2d0
target  4    8/16/5.7    tgt   CLAIMED DEVICE
ctl     1    8/16/5.7.0  sctl  CLAIMED DEVICE     Initiator
                         /dev/rscsi/c1t7d0 /dev/rscsi/c1t7l0 /dev/scsi/c1t7l0
...

Z rezultatów działania komendy możemy odczytać, że na adresie 2 SCSI znajduje się Pioneer DVD-ROM. Instancja karty dla ścieżki sprzętowej 8/16 to 1.

Stwórz dowiązanie surowego urządzenia do urządzenia DVD.

# ln -s /dev/rdsk/c<instancja magistrali SCSI>t<ID docelowego SCSI>d<LUN> /dev/<urządzenie>

Przykład:

# ln -s /dev/rdsk/c1t2d0 /dev/dvd

Poniżej znajdują się rozwiązania kilku najczęstszych problemów:

  • Wysypanie się programu przy uruchamianiu z komunikatem błędu:

    /usr/lib/dld.sl: Unresolved symbol: finite (code) from /usr/local/lib/gcc-lib/hppa2.0n-hp-hpux11.00/3.2/../../../libGL.sl
    

    Oznacza to, że funkcja .finite(). jest niedostępna w standardowej bibliotece math HP-UX. Zamiast niej dostępna jest .isfinite().. Rozwiązanie: Skorzystaj z najnowszego pliku składowego Mesa.

  • Wysypanie się programu przy odtwarzaniu z komunikatem:

    /usr/lib/dld.sl: Unresolved symbol: sem_init (code) from /usr/local/lib/libSDL-1.2.sl.0
    

    Rozwiązanie: Skorzystaj z opcji extralibdir skryptu configure --with-extralibdir="/usr/lib -lrt"

  • MPlayer powoduje błąd naruszenia ochrony pamięci (segfault) z komunikatem:

    Pid 10166 received a SIGSEGV for stack growth failure.
    Possible causes: insufficient memory or swap space, or stack size exceeded maxssiz.
    Segmentation fault
    

    Rozwiazanie: Jądro HP-UX ma domyślnie zdefiniowany rozmiar stosu przeznaczonego na każdy proces i jest to 8MB(?).(11.0 i nowsze łatki 10.20 pozwalają Ci zwiększyć parametr maxssiz do 350MB dla 32-bitowych programów). Musisz rozszerzyć maxssiz i przekompilować jądro (i uruchomić ponownie komputer). Możesz wykorzystać do tego celu SAM. (Kiedy w nim będziesz, sprawdź wartość maxdsiz. Określa ona maksymalny rozmiar danych, jaką program może użyć. To czy domyślne 64MB wystarczy czy nie, zależy wyłącznie od wymagań Twoich aplikacji.)

12.3.4. AIX

MPlayer kompiluje się z powodzenie na AIX 5.1, 5.2 i 5.3, korzystając z GCC 3.3 lub wyższego. Budowanie MPlayer na AIX 4.3.3 i niższych nie było sprawdzane. Zaleca się, abyś budowal MPlayera używając GCC 3.4 lub wyższego lub jeżeli kompilujesz na POWER5 - GCC 4.0.

Upenij się, że używasz GNU make (/opt/freeware/bin/gmake), aby kompilować MPlayera, jako że możesz napotkać na problemy przy korzystaniu z /usr/ccs/bin/make.

Wykrywanie CPU jest ciągle dopracowywane. Poniższe architektury zostały przetestowane:

  • 604e

  • POWER3

  • POWER4

Poniższe architektury nie były testowane, ale i tak powinny działać:

  • POWER

  • POWER2

  • POWER5

Dźwięk przez Ultimedia Services nie jest obsługiwany, jako że ta technologia została porzucona w AIX 5.1; dlatego też, jedynym wyjściem jest korzystanie ze sterowników AIX Open Sound System (OSS) tworzonych przez 4Front Technologies, znajdziesz je na http://www.opensound.com/aix.html . 4Front Technologies udostępnia swoje sterowniki OSS za darmo do niekomercyjnego zastosowania; jednakże, nie ma aktualnie sterowników wyjścia audio dla AIX 5.2 lub 5.3. Oznacza to, że AIX 5.2 i 5.3 nie potrafią aktualnie używać wyjścia audio MPlayera.

Rozwiązania częstych problemów:

  • Jeżeli otrzymujesz od configure taki komunikat błędu:

    				$ ./configure
    				...
    				Checking for iconv program ... no
    				No working iconv program found, use
    				--charset=US-ASCII to continue anyway.
    				Messages in the GTK-2 interface will be broken then.
    				

    To dzieje się tak dlatego, że AIX używa nie standardowych zestawów nazw znaków; dlatego też, konwersja wyjścia MPlayera do innego zestawu znaków (kodowania) nie jest aktualnie obsługiwana. Rozwiązaniem jest użycie:

    				$ ./configure --charset=noconv