# Портинг

## Linux

Основная платформа разработки — это Linux на x86, хотя MPlayer работает под многими другими портами Linux. Бинарные пакеты MPlayer'а доступны из нескольких источников. Тем не менее, ни один из этих пакетов не поддерживается. Сообщайте о проблемах их авторам, а не нам.

### Debian пакеты

Чтобы создать Debian пакет, выполните следующие команды в каталоге с исходным кодом MPlayer'а:

    fakeroot debian/rules binary

Если вы хотите передать дополнительные опции configure, установите соответствующее значение переменной окружения `DEB_BUILD_OPTIONS`. В частности, если хотите поддержку GUI и OSD, укажите:

    DEB_BUILD_OPTIONS="--enable-gui --enable-menu" fakeroot debian/rules binary

Вы также можете передать некоторые переменные в Makefile. Например, если желаете компилировать gcc 3.4 даже если это не основной компилятор:

    CC=gcc-3.4 DEB_BUILD_OPTIONS="--enable-gui" fakeroot debian/rules binary

Для очистки дерева исходных текстов воспользуйтесь командой:

    fakeroot debian/rules clean

В качестве root'а Вы затем можете установить `.deb` пакет:

    dpkg -i ../mplayer_версия.deb

Какое-то время Christian Marillat собирал неофициальные Debian пакеты с MPlayer, MEncoder и бинарными кодеками, так что вы можете их скачать (выполнить apt-get) с его сайта.

### RPM пакеты

Dominik Mierzejewski поддерживает официальные Fedora Core RPM пакеты MPlayer'а. Они доступны в репозитории Livna.

Mandrake/Mandriva RPM пакеты доступны с P.L.F.. SuSE включала искалеченную версию MPlayer'а в дистрибутив. Из последних релизов они убрали эти пакеты. Вы можете взять работающие RPM с links2linux.de.

### ARM

MPlayer работает на Linux PDA с ARM процессором, например Sharp Zaurus, Compaq Ipaq. Простейший способ получить MPlayer — это скачать его с пакетных репозиториев OpenZaurus. Если Вы хотите скомпилировать его самостоятельно, обратите внимание на каталоги mplayer и libavcodec в корне сборки дистрибутива OpenZaurus. Там всегда найдутся свежий Makefile и патчи, используемые для сборки SVN MPlayer'а вместе с `libavcodec`. Если Вам нужен GUI, используйте встроенный в xmms

## *BSD

MPlayer работает на всех известных семействах BSD. Существуют портированные[ports]/пакеты сорцов[pkgsrcs]/fink/ и т.п. версии MPlayer, которые, наверное, проще использовать, чем просто исходный код.

Чтобы собрать MPlayer, Вам понадобится GNU make (gmake — родной BSD make не будет работать) и свежая версия binutils.

Если MPlayer ругается, что он не может найти `/dev/cdrom` или `/dev/dvd`, создайте соответствующую ссылку:

    ln -s /dev/Ваше_cdrom_устройство /dev/cdrom

Чтобы использовать Win32 DLL'и с MPlayer'ом, Вам необходимо перекомпилировать ядро с "`option USER_LDT`" (если только у Вас не FreeBSD-CURRENT, где это включено по умолчанию).

### FreeBSD

Если Ваш CPU поддерживает SSE, перекомпилируйте ядро с "`options CPU_ENABLE_SSE`" (необходимо FreeBSD-STABLE или патчи к ядру).

### OpenBSD

В связи с ограничениями в различных версиях gas (конфликт настройки адресов и MMX), Вы должны будете компилировать в два шага: сначала убедитесь, что не родной as — первый в Вашем `$PATH` и выполните `gmake -k` , затем убедитесь, что будет использоваться родная версия и запустите `gmake`.

Начиная с OpenBSD 3.4 подобный хак больше не нужен.

### Darwin

См. секцию Mac OS.

## Коммерческие Unix

MPlayer был портирован на некоторые коммерческие варианты Unix. Поскольку окружения разработки этих систем отличаются от свободных Unix'ов, вам придется самостоятельно произвести некоторые действия, чтобы сборка заработала.

### Solaris

MPlayer должен работать под Solaris 2.6 и более новыми версиями. Для звука используйте звуковой драйвер SUN с опцией `-ao sun`.

На UltraSPARC'ах, MPlayer использует преимущество их расширения VIS (эквивалент MMX), но (в настоящий момент) только в `libmpeg2`, `libvo` and `libavcodec`, но не в `mp3lib`. Вы сможете просматривать VOB'ы на 400MHz CPU. Вам потребуется установленная `mLib`.

Предостережение:

- mediaLib в данный момент отключена по умолчанию в MPlayer из-за поломанности. Пользователи SPARC, компилировавшие MPlayer с mediaLib сообщали об изобилии зелёного оттенка в видео, кодируемом и декодируемом libavcodec. Если хотите, можете включить ее:

      $ ./configure --enable-mlib

  Вы делаете это на свой страх и риск, пользователи x86 не жолжны никогда использовать mediaLib, поскольку это очень сильно скажется на производительности MPlayer.

Чтобы собрать программу, Вам потребуется GNU make (`gmake`, `/opt/sfw/gmake`), родной Solaris make не будет работать. Типичная ошибка которую Вы будете получать при использовании Solaris make, вместо GNU make:

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

На Solaris SPARC, Вам потребуется GNU C/C++ Compiler; при этом не имеет значения, был ли GNU C/C++ компилятор сконфигурирован с или без GNU ассемблера.

На Solaris x86, Вам потребуются GNU ассемблер и GNU C/C++ компилятор, сконфигурированный, чтобы использовать GNU ассемблер! На x86 платформах код MPlayer'а использует много MMX, SSE и 3DNOW! инструкций, которые Sun'овский ассемблер `/usr/ccs/bin/as` не может скомпилировать.

Скрипт `configure` пытается обнаружить, какой ассемблер используется Вашей командой "gcc" (в том случае, если автоопределение не сработает, используйте опцию `--as=`/там/где/у/Вас/установлен/gnu-as``, чтобы сообщить скрипту `configure`, где можно обнаружить GNU "as" на Вашей системе).

Решение общих проблем:

- Сообщения об ошибках `configure` на Solaris x86 системах при использовании GCC без GNU ассемблера:

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

  (Решение: Установите и используйте gcc, сконфигурированный с `--with-as=gas`)

  Типичная ошибка при сборке GNU C компилятором, который не использует 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 может сообщить о нарушении сегментации при кодировании и декодировании видео, использующего 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
      ...

  Это из-за изменений в sysi86() в Solaris 10 и пре-Solaris Nevada b31 релизах. Исправлено в Solaris Nevada b32; тем не менее Sun еще следует портировать исправление обратно на Solaris 10. Проект MPlayer осведомил Sun об этой проблеме и патч в данный момент готовится для Solaris 10. Больше информации об этой ошибке ищите на: .

- В связи с ошибками в Solaris 8, Вы не сможете проигрывать DVD диски, размером больше 4 Гб:

  - Под Solaris 8 x86 драйвер sd(7D) содержит ошибку, проявляющуюся при доступе к дискам, размером > 4 Гб на устройствах с логическим размером блока != DEV_BSIZE (например CD-ROM и DVD диски). Из-за целочисленного 32-х битного переполнения, происходит доступ к дисковому адресу по модулю 4 Гб (). Проблема отсутствует в SPARC версиях Solaris 8.

  - Похожая ошибка существует в коде файловой системы hsfs(7FS) (ISO9660), hsfs может не поддерживать разделы/диски больше 4 Гб, доступ к данным происходит по модулю 4 Гб (). Проблемы с hsfs могут быть исправлены установкой патча 109764-04 (sparc) / 109765-04 (x86).

### HP-UX

Joe Page на своей домашней странице держит подробное HOWTO по MPlayer на HP-UX, написанное Martin Gansser. С этими инструкциями сборка должна работать "прямо из коробки". Следующая информация взята оттуда.

Вам потребуется GCC 3.4.0 или полее поздней версии, GNU make версии 3.80 или новее и SDL 1.2.7 или более новый. HP cc не может создать работоспособную программу, предыдущие версии GCC глючат. Для функционирования OpenGL необходимо установить Mesa, после чего должны заработать драйвера вывода видео gl и gl2, хотя, в зависимости от быстродействия CPU, скорость может быть ужасной. GNU esound является хорошей заменой довольно бедной звуковой системе HP-UX.

Произведите сканирование шины SCSI на предмет наличия DVD устройства:

    # 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
    ...

Вывод показывает, что по адресу 2 шины SCSI находится Pioneer DVD-ROM. Экземпляр карты для аппаратного пути 8/16 равен 1.

Создайте ссылку от сырого устройства к DVD устройству.

    ln -s /dev/rdsk/c<SCSI bus instance>t<SCSI target ID>d<LUN> /dev/<device>

Пример:

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

Далее следуют решения некоторых общих проблем:

- Крах при запуске с таким сообщением об ошибке:

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

  Это значит, что функция `.finite().` недоступна в стандартной математической библиотеке HP-UX. Вместо этого используйте `.isfinite().`. Решение: Используйте последнюю версию Mesa из репозитория.

- Крах при воспроизведении со следующей ошибкой:

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

  Решение: Используйте опцию extralibdir программы configure `--extra-ldflags="/usr/lib -lrt"`

- MPlayer вылетает с нарушением сегментации и сообщением вроде этого:

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

  Решение: Ядро HP-UX по-умолчанию для каждого процесса имеет размер стека равный 8MB(?). (11.0 и новые патчи для 10.20 позволяют вам увеличить `maxssiz` вплоть до 350MB для 32-х битных программ). Вы должны расширить `maxssiz` и перекомпилировать ядро (и перезагрузиться). Чтобы сделать это, можно использовать SAM. (Находясь в нем, проверьте параметр `maxdsiz` на предмет максимального количества данных, которые могут использоваться программами. 64 Мб по умолчанию может хватить или не хватить в зависимости от Ваших приложений.)

### AIX

MPlayer успешно собирается на AIX 5.1, 5.2, и 5.3, используя GCC 3.3 или новее. Сборка MPlayer не проверена на AIX 4.3.3 и более ранних. Крайне рекомендуется собирать MPlayer используя GCC 3.4 или старше, и, как минимум, GCC 4.0, если собираете на POWER5.

Убедитесь, что используете GNU make (`/opt/freeware/bin/gmake`) для сборки MPlayer, поскольку столкнетесь с проблемами при использовании `/usr/ccs/bin/make`.

По-прежнему ведется работа над кодом определения CPU. Проверены следующие архитектуры:

- 604e

- POWER3

- POWER4

На следующих архитектурах не проверялось, но должно работать:

- POWER

- POWER2

- POWER5

Вывод звука через Ultimedia Services не поддерживается, т.к. Ultimedia была убрана из AIX 5.1; таким образом, остается единственный вариант: использовать драйвер AIX Open Sound system (OSS) от 4Front Technologies с http://www.opensound.com/aix.html. Для некоммерческого использования 4Front Technologies распространяет драйвер OSS под AIX 5.1 бесплатно; несмотря на это, на текущий день нет драйверов вывода звука для AIX 5.2 или 5.3. drivers for AIX 5.2 or 5.3. Это означает, что сейчас AIX 5.2 и 5.3 несовместимы с выводом звука MPlayer.

Решения для общих проблем:

- Если вы столкнулись с такой ошибкой `configure`:

      $ ./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.

  Это из-за того, что AIX использует нестандартные имена кодировок; поэтому перекодировка сообщений в данный момент не работает. Решение - использовать:

      $ ./configure --charset=noconv

### QNX

Вам нужно скачать и установить SDL для QNX. Затем запустите MPlayer с опциями `-vo sdl:photon` и `-ao sdl:nto`, и все будет работать быстро.

Вывод `-vo x11` будет ещё медленнее, чем под Linux, поскольку под QNX X'ы эмулируются, что ОЧЕНЬ медленно.

## Windows

Да, MPlayer работает под Windows под Cygwin и MinGW. Пока ещё нет официального GUI, но версия командной строки полностью функциональна. Обратитесь к списку рассылки MPlayer-cygwin за помощью и дополнительной информацией. Официальные бинарники под Windows могут быть найдены на странице загрузки. Пакеты установки и простые GUI фронтенды доступны из внешних источников, мы собрали их в разделе Windows на нашей странице проектов.

При нежелании использовать командную строку поможет простой трюк: поместите на рабочий стол ссылку, со следующим содержимым в секции execute:

    c:\путь\к\mplayer.exe %1

Это позволит MPlayer воспроизводить любой фильм, который вы перетащите на созданный ярлык. Добавьте `-fs` для полноэкранного режима.

Лучшие результаты получаются при использовании родного DirectX видео вывода (`-vo directx`). Альтернативой является использование OpenGL или SDL, но производительность OpenGL сильно зависит от машины, а SDL на некоторых системах искажает видео или вылетает. Если изображение искажено, попробуйте отключить аппаратное ускорение, указав `-vo directx:noaccel`. Скачайте файлы заголовков DirectX 7, чтобы скомпилировать видео драйвер DirectX. Кроме того, вам потребуется установленный DirectX 7, чтобы работал DirectX видеодрайвер.

VIDIX теперь доступен и под Windows, как `-vo winvidix`, хотя это ещё экспериментально и требует небольшой ручной установки. Скачайте dhahelper.sys или dhahelper.sys (с поддержкой MTRR) и скопируйте его в каталог `vidix/dhahelperwin` в Вашем дереве исходного кода MPlayer'а. Откройте консоль и перейдите в этот каталог. Теперь наберите

    gcc -o dhasetup.exe dhasetup.c

и запустите

    dhasetup.exe install

под Администратором. Теперь Вам нужно перезагрузить машину.

Для получения наилучших результатов, MPlayer должен использовать пространство цветов, аппаратно поддерживаемое Вашей видеокартой. К сожалению, многие графические драйверы под Windows ошибочно сообщают, что некоторые пространства цветов поддерживаются аппаратно. Чтобы найти какие именно, попробуйте

    mplayer -benchmark -nosound -frames 100 -vf format=colorspace movie

, где `colorspace` может быть любым пространством цветов из вывода опции `-vf format=fmt=help`. Если Вы найдёте пространство цветов, которое Ваша карта особенно плохо поддерживает, опция `-vf noformat=`colorspace`` помешает его использованию. Добавьте это в ваш конфигурационный файл, чтобы это пространство цветов больше никогда не использовалось.

Существуют специальные пакеты кодеков для Windows, доступные на нашей странице загрузки, позволяющие воспроизводить форматы, для которых пока нет родной поддержки. Поместите их куда-нибудь в пути или укажите `configure` опцию `--codecsdir=`c:/path/to/your/codecs`` (или `--codecsdir=`/path/to/your/codecs``, но только под Cygwin). У нас были сообщения о том, что Real DLL должны быть доступны пользователю, запускающему MPlayer, для записи, но только на некоторых системах (NT4). Если у Вас проблемы с ними, попробуйте сделать их доступными на запись.

Вы можете воспроизводить VCD, проигрывая `.DAT` или `.MPG` файлы, которые Windows показывает на VCD. Вот как это работает (указывайте букву диска Вашего CD-ROM):

    mplayer d:/mpegav/avseq01.dat

В качестве альтернативы вы можете напрямую воспроизводить VCD дорожки, указав:

    mplayer vcd://<дорожка> -cdrom-device d:

DVDs также работают, укажите `-dvd-device` с буквой Вашего DVD-ROM:

    mplayer dvd://<title> -dvd-device d::

Консоль Cygwin/MinGW весьма медленная. Перенаправление вывода или использование опции `-quiet` улучшает производительность на некоторых системах. Прямой рендеринг (`-dr`) также может помочь. Если воспроизведение прерывисто, попробуйте `-autosync 100`. Если какие-то из этих опций Вам помогут, стоит поместить их в конфигурационный файл.

Если у Вас Pentium 4 и Вы заметили крахи при использовании кодеков RealPlayer, попробуйте отключить hyperthreading.

### Cygwin

Для компиляции MPlayer требуется запустить Cygwin версии 1.5.0 или старше.

Файлы заголовков DirectX надо распаковать в `/usr/include/` или `/usr/local/include/`.

Вы можете найти инструкции и файлы для запуска SDL под Cygwin на сайте libsdl.

### MinGW

Прежде, установка версии MinGW, способной скомпилировать MPlayer, была сложновата, но сейчас все работает с самого начала. Просто установите MinGW 3.1.0 или более новый и MSYS 1.0.9 или старше и укажите постустановщику MSYS, что MinGW установлен.

Распакуйте файлы заголовков DirectX в `/mingw/include/`.

Для поддержки сжатых заголовкоав MOV необходима zlib, которую MinGW по умолчанию не предоставляет. Сконфигурируйте её, указав `--prefix=/mingw` и установите её до компиляции MPlayer'а.

Полные инструкции по сборке MPlayer и необходимых библиотек могут быть найдены на странице MPlayer MinGW HOWTO.

## Mac OS

MPlayer не работает на Mac OS версий меньше 10, но компилируется "из коробки" на Mac OS X 10.2 и старше. Предпочитаемым компилятором является версия Apple GCC 3.x или более позднего. Вы можете получить начальное окружение для компиляции, установив Apple'овский Xcode. Если у вас Mac OS X 10.3.9 или выше и QuickTime 7, можете использовать драйвер видео вывода `corevideo`.

К сожалению, основное окружение не позволяет получить преимущество от всех приятных возможностей MPlayer. В частности, чтобы иметь включенную поддержку OSD, потребуются установленные в системе библиотеки `fontconfig` и `freetype`. В отличие от остальных Unix'ов, таких как Linux и клоны BSD, OS X не имеет поставляющейся с ОС систему управления пакетами.

Есть как минимум два на выбор: Fink и MacPorts. Они оба предоставляют одинаковый сервис (т.е. огромное количество пакетов для установки, разрешение зависимостей, возможность простой установки/обновления/удаления пакетов и т.д.). Fink предлагает как предкомпилированные бинарные пакеты, так и сборку всего из исходников, в то время как MacPorts предлагает только собирать из исходных текстов. Автор данного руководства выбрал MacPorts исходя из того простого соображения, что его базовая установка легче. Последующие примеры будут основаны на MacPorts.

В частности для компиляции MPlayer с поддержкой OSD:

    sudo port install pkgconfig

Это установит pkg-config, который является системой управления флагами компиляции/сборки библиотек. Скрипт `configure` программы MPlayer использует его для правильного обнаружения библиотек. Тем же способом можно установить fontconfig:

    sudo port install fontconfig

Затем можно продолжить, запустив MPlayer'овский `configure` скрипт (задайте переменные окружения `PKG_CONFIG_PATH` и `PATH` так, чтобы `configure` мог найти библиотеки, установленные при помощи MacPorts):

    PKG_CONFIG_PATH=/opt/local/lib/pkgconfig/ PATH=$PATH:/opt/local/bin/ ./configure

### MPlayer OS X GUI

Вы можете получить родной GUI для MPlayer вместе с предкомпилированными бинарниками MPlayer для Mac OS X из проекта MPlayerOSX, но предупреждаем: этот проект давно не развивается.

К счастью, MPlayerOSX был подхвачен членом команды MPlayer. Предварительные релизы доступны с нашей страницы загрузки и скоро ожидается официальный релиз.

Чтобы самостоятельно собрать MPlayerOSX из исходный текстов, вам потребуется `mplayerosx`, `main` и копию `main` SVN модуля, называющегося `main_noaltivec`. `mplayerosx` - это GUI frontend, `main` - это MPlayer, а `main_noaltivec` - это MPlayer собранный без поддержки AltiVec.

Для извлечения модулей из SVN:

    svn checkout svn://svn.mplayerhq.hu/mplayerosx/trunk/ mplayerosx
    svn checkout svn://svn.mplayerhq.hu/mplayer/trunk/ main

Чтобы собрать MPlayerOSX потребуется настроить что-то вроде этого:

    MPlayer_source_directory
       |
       |--->main           (MPlayer Subversion исходники)
       |
       |--->main_noaltivec (MPlayer Subversion исходники, сконфигурированные с --disable-altivec)
       |
       \--->mplayerosx     (MPlayer OS X Subversion исходники)

Сначала надо собрать main и main_noaltivec.

Для начала, чтобы добиться максимальной обратной совместимости, установите переменную окружения:

    export MACOSX_DEPLOYMENT_TARGET=10.3

Затем сконфигурируйте:

Если конфигурируете для G4 или более позднего CPU с поддержкой AltiVec, делайте так:

    ./configure --disable-gl --disable-x11

Если конфигурируете для машины c G3 без AltiVec, используйте:

    ./configure --disable-gl --disable-x11 --disable-altivec

Вам может потребоваться отредактировать `config.mak` и изменить `-mcpu` и `-mtune` с `74XX` на `G3`.

Продолжайте с

    make

после чего идите в каталог mplayerosx и там наберите:

    make dist

Это создаст сжатый архив `.dmg` с котовым к использованию бинарником.

Также можно использовать проект Xcode 2.1; более старый Xcode 1.x больше не работает.