2.2. Wspierane kodeki

2.2.1. Kodeki Video

Zobacz: http://www.mplayerhq.hu/DOCS/codecs-status.html. Znajdziesz tam kompletną, codziennie tworzoną listę!!!

Najważniejsze kodeki video:

- MPEG1 (VCD) i MPEG2 (DVD) video
- DivX ;-), OpenDivX (DivX4), 3ivx i inne warianty MPEG4
- Windows Media Video 7 (WMV1) i 8 (WMV2) wykorzystywany w plikach .wmv
- Kodeki Intel Indeo (3.1,3.2,4.1,5.0)
- MJPEG, ASV2 i inne formaty sprzętowe
- Kodeki XAnim
- VIVO
- FLI
- RealVideo 1.0

Jeśli masz kodeka Win32 nie wymienionego tutaj, oraz jeszcze nie obsługiwanego, przeczytaj importowanie kodeków, by uzyskać informacje o tym, jak pomóc nam w dodaniu wsparcia dla niego!

2.2.1.1. DivX4

Ta sekcja zawiera informacje o kodekach DivX4 z ProjectMayo. Ich pierwszą dostępną wersją alfa był OpenDivX 4.0 alfa 47 oraz 48. Wsparcie dla nich zostało dołączone w MPlayerze, i jest kompilowane standardowo. Dawniej używaliśmy kodu postprocessing z tych kodeków do opcjonalnego zwiększenia jakości filmów MPEG1/2. Teraz już stosujemy własny.

Nowa generacja tych kodeków potrafi nawet dekodować filmy zrobione z użyciem niesławnych kodeków DivX! Ale to jeszcze nie wszystko! Są one DUŻO szybsze, niż tradycyjne DLLe Win32 DivX (zauważ, że dekoder libavcodec jest JESZCZE SZYBSZY :). Zobacz poniżej opis konfiguracji. Jedyną wadą tych kodeków jest fakt, że aktualnie są one closed-source. :(

Kodek można ściągnąć z następującego URL:

http://avifile.sourceforge.net

Jeśli to nie zadziała, spróbuj jeszcze:

http://divx.com

Rozpakuj je i uruchom, jako root, polecenie: `./install.sh` .

Uwaga: NIE zapomnij dodać `/usr/local/lib` do `/etc/ld.so.conf` i uruchomić `ldconfig`!

MPlayer automatycznie wykrywa czy DivX4 jest (właściwie) zainstalowany, wystarczy go, tak jak zawsze, skompilować. Jeśli mplayer nie wykrywa DivX4, oznacza to, że nie zainstalowałeś go w taki sposób jak powyżej podano, i/lub popsułeś konfigurację (zobacz ostatnie pytanie w sekcji 5.1).

Używanie tego kodeka jest trochę skomplikowane. Ponieważ powstaje konflikt ze starym OpenDivX (jego API jest bardzo podobne do do tego z OpenDivX), kod OpenDivX jest wyłączony, również sterownik OpenDivX wywołuje tą bibliotekę.

Ogólnie możemy sprowadzić to zagadnienie do faktu, że masz dwie opcje do zastosowania tego kodeka:

| -vc odivx |  | użycie kodeka divx4 jako nowej wersji OpenDivX. W tym przypadku produkuje on we własnym buforze obrazy YV12 oraz MPlayer (libvo) dokonuje konwersji przestrzeni kolorów. (REKOMENDOWANE!)
| -vc divx4 |  | użycie konwersji przestrzeni kolorów z kodeka divx4. W tym trybie można użyć również YUY2/UYVY.

Metoda 'odivx' jest zazwyczaj szybsza, ze względu na fakt, że przenosi ona dane obrazu do formatu YV12 (planar YUV 4:2:0), a to wymaga dużo mniejszego pasma przenoszenia na szynie. W trybie spakowanego YUV (YUY2, UYVY) stosuj metodę 'divx4'. W trybie RGB możesz dowolnie wybierać, ponieważ prędkości ich są takie same, różnią się być może tylko w odniesieniu do aktualnego bpp.

Uwaga: ten kodek wspiera również postprocessing (użyj opcji `-oldpp`, aby to włączyć), ale zakres wartości jest dziwny:

| 0 |  | bez postproc
| 10 .. 20 |  | postprocessing, normalny (jak na poziomie 2 z divxd)
| 30 .. 60 |  | mocny prostprocessing, obciąża mocno CPU (podobnie jak poziom 4 z divxd

2.2.1.2. DivX/libavcodec z ffmpeg

Poczynając od wersji 0.4.2, ffmpeg zawiera kodek DivX opensource, który jest kompatybilny z tradycyjnym DivX. MPlayer wspiera ten kodek i dzięki temu możliwe staje się oglądanie filmów DivX/DivX4 na platformach innych niż x86 oraz osiąganie dużo szybszej prędkości dekodowania DivX/DivX4, niż za pomocą kodeków Win32 i oryginalnych bibliotek DivX4
. Ponieważ zostało to usunięte z drzewa cvs MPlayera, musisz ściągnąć to ręcznie bezpośrednio z drzewa cvs FFmpeg

.

`cvs -d:pserver:anonymous@cvs.ffmpeg.sourceforge.net:/cvsroot/ffmpeg login
cvs -d:pserver:anonymous@cvs.ffmpeg.sourceforge.net:/cvsroot/ffmpeg co ffmpeg`

UWAGA: Jeśli kopiujesz z podkatalogami CVS, następnym razem wystarczy zrobić 'cvs update'.

Teraz przenieś nowo ściągnięte źródła ffmpeg: katalog libavcodec, (ze wszystkimi jego podkatalogami) do drzewa katalogowego MPlayera, tak, aby to wyglądało w taki sposób:

`main/libavcodec`

Linkowanie symboliczne NIE jest wystarczające. Musisz to skopiować bądź przenieść!!!

Następnie skompiluj. configure wykrywa czy wszystko jest w porządku i może być skompilowane. Ten kodek również wspiera postprocessing!

W celu użycia go, uaktualnij swój plik codecs.conf, zgodnie z tym, co mówią strony podręcznika lub example.conf (opcja -vfm).

Aby osiągnąć największą prędkość na moim K6, usuwam sekcję `ffmpeg12` z codecs.conf (ten kodek nie jest zoptymalizowany a libmpeg2 jest dwa razy szybszy), i wpisuję `vfm=5` w moim pliku konfiguracyjnym. Po czym MPlayer zawsze już używa ffdivx/ffodivx do dekodowania plików DivX/DivX4 oraz libmpeg2 do plików MPEG1/2. Przy takiej konfiguracji na moim K6/2 500 z Matrox G400 mogę oglądać filmy DivX/DivX4 w najwyższej rozdzielczości, bez straty klatek (framedrop).

2.2.1.3. Kodeki XAnim

Używanie (niektórych) kodeków XAnim z innym programem niż XAnim, jest NIELEGALNE. TWOIM obowiązkiem jest przeczytanie licencji i zastosowanie się do niej. Autorzy MPlayera nie mogą zostać pociągnięci do odpowiedzialności za jakiekolwiek, sprzeczne z prawem, zachowania użytkowników.

A więc: tak, MPlayer potrafi używać do dekodowania kodeków XAnim. Włączenie ich jest bardzo proste:

- Ściągnij kodeki, których chcesz używać ze strony XAnim. Nie ma tam kodeka 3ivx , więc ściągnij go ze strony 3ivx.
- Użyj opcji `--with-xanimlibdir`, aby podać dla configure, gdzie znajdują się kodeki xanim. Domyślnie są one szukane w katalogu `/` (...). Alternatywą jest ustawienie w zmiennej środowiskowej XANIM_MOD_DIR ścieżki do katalogu z kodekami XAnim.
- Zmień nazwy plików, obcinając część dotyczącą architektury tak, aby wyglądały one następująco: `vid_cvid.xa, vid_h263.xa, vid_iv50.xa`

Jest to rodzina kodeków video o numerze 10, przydatne więc będzie użycie opcji `-vfm 10` i poinformowanie MPlayera, by ich użył jeśli to możliwe.

Testowane kodeki: Indeo 3.2, 4.1, 5.0, CVID, 3ivX, h263.

2.2.1.4. Obraz VIVO

MPlayer potrafi odgrywać obrazy Vivo (1.0 i 2.0). Najbardziej odpowiedni kodek do plików 1.0, to dekoder FFmpeg's H263, Możesz go użyć za pomocą opcji `-vc ffh263` (domyślnie) (będziesz potrzebował najnowszego libavcodec!). Do plików 2.0 użyj `ivvideo.dll` pliku DLL Win32 (do sciągnięcia tutaj), zainstaluj go w `/usr/lib/win32`, bądź w innym miejscu, w którym przechowujesz kodeki Win32. Ten późniejszy kodek nie obsługuje trybów YV12 ani YUY2, a tylko BGR i jest użyteczny wyłącznie z wyjściami X11 i OpenGL. Miejmy nadzieję, że ffh263 będzie wspierał pliki VIVO 2.0 w przyszłości.

2.2.1.5. Obraz MPEG 1/2

MPEG1 i MPEG2 są dekodowane za pomocą biblioteki własnej libmpeg2. Jej kod źródłowy jest zawarty w MPlayerze i oczywiście jest wieloplatformowy. Obsługujemy pliki video MPEG1/2 z błędami przez sprawdzanie, jaką sygnaturę zwraca libmpeg2, i kiedy jest to sig11 (segmentation fault), szybko inicjalizujemy ponownie kodek, i kontynuujemy dokładnie z tego miejsca, w którym pojawił się błąd. Nie ma tu zauważalnej straty prędkości.

2.2.1.6. MS Video1

Jest bardzo stary i bardzo zły kodek Microsoftu. W przeszłości był on dekodowany z kodekiem Win32 `msvidc32.dll`, teraz mamy własną implementację open-source wykonaną przez Mike'a Melansona).

2.2.1.7. Cinepak CVID

MPlayer posiada teraz swój własny opensource, wieloplatformowy dekoder Cinepak. Obsługuje on wyjścia YUV, wykonuje skalowanie sprzętowe, jeśli sterowniki wyjścia video na to pozwalają. Jest używany domyślnie.

2.2.1.8. RealVideo

Aktualnie obsługiwany jest TYLKO kodek RealVideo 1.0 (fourcc RV10), poprzez ffmpeg. To smutne, ale żadne nowe pliki RealMedia nie są z nim dostarczone, tylko nowe kodeki RV20 i RV30, które są closed-source. Mało prawdopodbne jest wsparcie dla nich w przyszłości :(

2.2.2. Kodeki dźwięku

Najważniejsze kodeki dźwięku, to:

- MPEG layer 2 oraz layer 3 (MP3) audio(własny kod, z optymalizacją MMX/SSE/3DNow!)
- MPEG layer 1 audio(własny kod, z libavcodec)
- AC3 Dolby audio (własny kod, z optymalizacją SSE/3DNow!)
- Ogg Vorbis kodek audio (własna biblioteka)
- Voxware audio (użycie DirectShow DLL)
- alaw, msgsm, pcm i inne proste stare formaty dźwiękowe
- VIVO audio (g723, Vivo Siren)
- RealAudio: DNET (niska bitrate AC3)

2.2.2.1. Programowe dekodowanie AC3

Domyślny dekoder, używany do plików z dźwiękiem AC3.

Dekoder AC3 może tworzyć mieszanki wyjściowego dźwięku dla 2, 4 lub 6 głośników. Skonfigurowany dla 6 głośników, dekoder ten dostarcza oddzielne wyjścia dla wszystkich kanałów AC3 do sterownika karty dźwiękowej, umożliwiając doświadczenie wrażenia pełnego "dźwięku otaczającego", bez wymagania od zewnętrznego dekodera AC3 użycia kodeka hwac3.

Użyj opcji `-channels`, aby wybrać ilość kanałów wyjściowych. Użyj opcji `-channels 2` dla stereo downmix. Dla czterokanałowego downmix (wyjścia lewo-przód, prawo-przód, lewo-tył, prawo-tył), użyj opcji `-channels 4`. W tym przypadku jakikolwiek centralny kanał będzie miksowany odpowiednio do przednich kanałów. Ostatecznie, "-channels 6" będzie wyprowadzało wszystkie kanały AC3 tak, jak są zakodowane - w kolejności lewy, prawy, lewy-tylny, prawy-tylny, centralny oraz LFE.

Domyślna liczba kanałów wyjściowych wynosi 2.

Aby korzystać z więcej niż dwóch kanałów wyjściowych, musisz użyć OSS, i posiadać sterownik dla karty dźwiękowej, który obsługuje odpowiednią liczbę kanałów wyjściowych przez SNDCTL_DSP_CHANNELS ioctl. Na przykład wersja sterownika emu10k1 (używanego z kartami SB Live), nowsza niż z sierpnia 2001, powinna być odpowiednia (słyszałem, że najnowszy ALSA CVS obsługuje to także) .

Miksowanie na wyjściu więcej niż dwóch kanałów powinno być traktowane jako eksperymentalne.

2.2.2.2. Sprzętowe dekodowanie AC3

Potrzebna ci będzie karta dźwiękowa, zdolna do obsługi AC3, z cyfrowym wyjściem (SP/DIF). Sterownik karty dźwiękowej musi obsługiwać format AFMT_AC3 (tak, jak to robi SB Live, albo C-Media!). Połącz swój dekoder AC3 do wyjścia SP/DIF oraz użyj opcji '-ac hwac3'. To może zadziałać, bądź nie (status eksperymentalny - najprawdopodobniej aktualnie będzie działać tylko z kartami C-Media, masz wolną rękę w naprawieniu tego dla SB Live).

2.2.2.3. Obsługa libmad

libmad jest wieloplatformową biblioteką dekodowania dźwięku MPEG. Jeśli nie wiesz dlaczego to jest dobre, prawdopodobnie nie potrzebujesz tego.

Aby włączyć obsługę, skompiluj źródła z opcją `--enable-mad`.

2.2.2.4. Dźwięk VIVO

Kodek dźwięku stosowany do plików VIVO zależy od tego, czy jest to plik VIVO/1.0, czy VIVO/2.0. Pliki VIVO/1.0 zawierają dźwięk g.723, zaś pliki VIVO/2.0 mają Vivo Siren. Oba formaty są obsługiwane. Możesz ściągnąć kodek g.723/Siren Win32 DLL z tej strony, a następnie skopiować go do katalogu `/usr/lib/win32` lub innego odpowiedniego.

2.2.2.5. RealAudio

Aktualnie jedynym obsługiwanym kodekiem jest DNET. Właściwie jest to wersja low-bitrate dobrze znanego kodeka AC3. Może on się pojawić zarówno w starszych jak i w nowych filmach RealMedia

2.2.3. Importowanie kodeków Win32

2.2.3.1. Kodeki VFW

VfW (Video for Windows), jest to stare Video API dla Windows. Jego kodeki mają rozszerzenia .DLL lub (rzadziej) .DRV. Jeśli MPlayer nie działa z twoim AVI:

`UNKNOWN video codec: HFYU (0x55594648)`

To oznacza, że twój AVI jest zakodowany za pomocą kodeka, który ma HFYU fourcc (HFYU = kodek HuffYUV, DIV3 = DivX Low Motion, itd....). Teraz, gdy już to wiemy, będziemy musieli dowiedzieć się, którą bibliotekę DLL z Windows załadować, aby móc odtworzyć ten plik. W naszym przypadku system.ini zawiera to (oraz wiele innych):

`VIDC.HFYU=huffyuv.dll`

Tak więc będziemy potrzebować pliku huffyuv.dll. Zauważ, że kodeki dźwięku są wyróżnione za pomocą prefiksu MSACM:

`msacm.l3acm=L3codeca.acm`

To jest kodek MP3. Mając już wszystkie potrzebne informacje (fourcc, plik z kodekiem, próbka AVI), wyślij żądanie wsparcia dla twojego kodeka mailem i załaduj te pliki przez FTP:

`ftp://ftp.mplayerhq.hu/MPlayer/incoming/[nazwa_kodeka]/`

2.2.3.2. Kodeki DirectShow

DirectShow to najnowsze Video API, które jest nawet gorsze, niż jego poprzednik. Sprawy się bardziej komplikują, odkąd:

- system.ini nie zawiera potrzebnych informacji, a w zamian za to jest przechowywany w rejestrze :(
- będzie potrzebny nam GUID kodeka.

Więc znajdźmy ten przeklęty rejestr ...

- Uruchom 'regedit'.
- Wciśnij ctrl-f, odznacz pierwsze dwie opcje i zaznacz trzecią. Wpisz fourcc kodeka (np.: TM20).
- Powinno się pokazać pole ze ścieżką i nazwą pliku (np. : C:\WINDOWS\SYSTEM\TM20DEC.AX).
- Skoro mamy już plik, potrzebne nam jeszcze GUID. Spróbuj jeszcze raz poszukać, ale tym razem nazwy kodeka, nie fourcc. Jego nazwę można odczytać w File/Properties/Advanced, podczas odtwarzania tego pliku przez Media Player. Jeśli się nie da, to pech ;) Spróbuj zgadnąć (np. szukaj: TrueMotion).
- Jeśli znalazłeś (w rejestrze), powinno być tam pole FriendlyName oraz pole CLSID. Zapisz, że 16 bajtów CLSID, to potrzebne nam GUID.

UWAGA:Poszukując plików, staraj się włączyć wszystkie pola wyboru ... Możesz dostać wiele nieprzydatnych odpowiedzi, ale być może dostaniesz te właściwe przy okazji ...

UWAGA: W razie niepowodzenia zrzuć wszystko na M$.

Mając już wszystkie potrzebne informacje (fourcc, GUID, plik z kodekiem, próbka AVI), wyślij zgłoszenie wsparcia dla swojego kodeka mailem, i prześlij te pliki na adres FTP:
ftp://ftp.mplayerhq.hu/MPlayer/incoming/[nazwa_kodeka]/