HD Video в Linux. Компиляция mplayer с поддержкой VDPAU.

Обновлено: 15 май 2009

Всем известно, что прогресс на месте не стоит, технологии развиваются, в том числе и улучшается качество видео, что интересно, такие форматы как DVD, HDTV, DVD HD, Blue Ray появились уже давно, а вот полноценной поддержки этих форматов в GNU\Linux до сих пор нет. Конечно не все так плохо, многие современные компьютеры, легко выдерживают нагрузку которую им дает HD Video, так же с недавних пор NVidia объявила о аппаратной поддержке HD в новейших моделях видеокарт. И тем не менее, имея мощный core2duo вам возможно удастся посмотреть HD, но при этом проигрыватели которые вы будете использовать и не подозревают, что ядро не одно, и будут загружать CPU1 тогда как CPU2 будет оставаться без нагрузки, согласитесь это не правильно.
Теперь перейдем к более конкретным вещам. У меня недавно стала задача, воспроизвести HD видео в форматах *.mkv и *.mp4 с разрешением 1280?720, за воспроизведение HD в Linux отвечает кодек MPEG-4 AVC (H.264).

И справляется он со своей задачей из рук вон плохо. К примеру Totem нормально видео воспроизвести не в состоянии, происходит ассинхронизация звука и дерганье кадров. А я ведь хочу кино посмотреть, а не презентацию. VLC и Mplayer дали те же результаты, разве что если запустить фильм с помощью MPlayer из командной строки со следующими параметрами:

mplayer -ao alsa -lavdopts threads=2:fast:skiploopfilter=all ~/film.mkv

где:
– ao (audio output, type mplayer -ao -help for more Info) – отвечает за звуковую подсистему вывода
– -lavdopts threads=2 – разбить на два потока
– :fast:skiploopfilter=all – отключить все фильтры (качество видео??)

Т.е. если вы запустите фильм в HD качестве данной командой, есть шансы что все пучком, хотя сколько случаев не встречал, это сопровождается нарастающей ассинхронизацией звука с видео. Конечно можно попытаться вместо alsa использовать pulse.

Вариаций на тему как запустить фильм много, вот еще одна что мне удалось найти

mplayer -vfm ffmpeg -lavdopts lowres=0:fast:skiploopfilter=all /filename

Но это все не выход, кому-то это поможет, кому-то нет.

Недавно, NVidia выпустила patch для mplayer который “устроняет” проблему (путем использования VDPAU) в союзе с последней версией графических драйверов.

Что такое VDPAU?
VDPAU (Video Decode and Presentation API for Unix) – это свободный набор API разработанный NVIDIA для карточек начиная от GeForce 8 и последних GPU. VDPAU API позволяет распределять процесс декодирования видео и post-processing на GPU т.е. на графическое ядро видео карты. В частности GPU работает с mo comp, iDCT, VLD для MPEG-1, MPEG-2, MPEG-4 AVC (H.264), VC-1, и WMV3/WMV9. Таким образом уменьшая нагрузку процессора.

Проблема: Корректное воспроизведение HD 1080p video в GNU\Linux
Метод решения: Установка последних драйверов от NVidia и компиляция mplayer с поддержкой vdpau.
Используемая система: Ubntu 9.04, 2.6.28-11-generic
Компьютер:
Intel(R) Core(TM)2 Duo CPU T7100 @ 1.80GHz
nVidia GeForce 8600M GT
2500 RAM

Поехали…
Скачайте последнюю версию драйвера с официального сайта NVidia на момент написания статьи это:
Linux Display Driver – x86
Версия:180.51
Операционная система: Linux x86
Опубликовано: 21.04.2009

Если у вас установлены драйвера в системе с помощью “Система” – “Драйверы устройств” вам необходимо деактиврировать текущий драйвер, зайдите “Система” – “Драйверы устройств” выберите ваш драйвер, нажмите удалить. Перезагрузитесь.

Нажмите Alt+F1, введите логин пароль.
Для установки драйвера вам необходимы права суперпользователя:

su -

Остановите ваш X-server
Для GNOME

/etc/init.d/gdm stop

Для KDE

/etc/init.d/kdm stop

Перейдите в каталог с драйвером NVidia и выполните

sh NVIDIA-Linux-x86-180.51-pkg1.run

Программа установки предложит перейти на FTP сайт для загрузки вспомогательной утилиты, откажитесь. Произведите установку.

Перезагрузитесь

reboot

Убедитесь, что драйвера успешно установлены

cat /proc/driver/nvidia/version

Теперь вам необходимо скачать последнюю версию пакета mplayer-vdpau. На момент написания это mplayer-vdpau-3532130.tar.bz2 Так же нам понадобятся 2 дополнительных файла которые можно скачать тут
Для удобства я загрузил их себе на сервер в одном архиве. Как говорят американцы “tarred”

Переходим в папку где у вас лежит пакеты mplayer-vdpau & vdpau.tar.gz
И выполняем

tar xf vdpau_20090305.tar.gz
sudo mv vdpau /usr/include/
tar xf mplayer-vdpau-3532130.tar.bz2
sudo aptitude build-dep mplayer
cd mplayer-vdpau-3482714

В папке mplayer-vdpau-3482714 будет лежать скрипт checkout-patch-build.sh его необходимо чуть-чуть переделать. Открываем его в nano

nano checkout-patch-build.sh

Вод текст скрипта

#!/usr/bin/env sh
 
set -e
set -x
 
co_dir=mplayer-vdpau
mplayer_rev=28348
ffmpeg_rev=16726
dvdnav_rev=1166
 
svn co --ignore-externals -r ${mplayer_rev} svn://svn.mplayerhq.hu/mplayer/trunk ${co_dir}
cd ${co_dir}
svn co -r ${ffmpeg_rev} svn://svn.mplayerhq.hu/ffmpeg/trunk/libpostproc
svn co -r ${ffmpeg_rev} svn://svn.mplayerhq.hu/ffmpeg/trunk/libavformat
svn co -r ${ffmpeg_rev} svn://svn.mplayerhq.hu/ffmpeg/trunk/libavcodec
svn co -r ${ffmpeg_rev} svn://svn.mplayerhq.hu/ffmpeg/trunk/libavutil
svn co -r ${dvdnav_rev} svn://svn.mplayerhq.hu/dvdnav/trunk/libdvdread/src libdvdread4
svn co -r ${dvdnav_rev} svn://svn.mplayerhq.hu/dvdnav/trunk/libdvdnav/src libdvdnav
 
patch -p0 < ../mplayer-vdpau-mplayer.patch
 
#./configure --disable-x264-lavc --disable-x264 --enable-vdpau
#make

Собственно все изменения, что вам нужно сделать, это закомментировать последние две строчки.
Сохраните скрипт.
Запустите скрипт.

./checkout-patch-build.sh

Для скачивания исходников, скрипт использует svn, в Ubuntu по умолчанию он не установлен, так что его необходимо установить, в противном случае скрипт выбьет ошибкой.

sudo aptitude install subversion

Теперь когда у нас есть исходные коды, нам нужно добавить некоторые дополнительные параметры.

cd mplayer-vdpau
sed 's/%F/-vo vdpau -vc ffh264vdpau,ffmpeg12vdpau,ffvc1vdpau,ffwmv3vdpau, %F/' etc/mplayer.desktop > /tmp/mplayer.desktop
mv /tmp/mplayer.desktop etc/mplayer.desktop

Теперь можно приступать к конфигурации. Так как мы рассчитываем на core2duo и vdpau следующие параметры обязательны

--target=i686-linux
--enable-vdpau
./configure --enable-gui --disable-x264-lavc --disable-x264 --enable-vdpau --target=i686-linux --prefix=/usr --confdir=/etc/mplayer --mandir=/usr/share/man

Далее, если у вас опять таки не core2duo то следующие ухищрения можно пропустить.

sed 's/i686/core2/g' config.mak > /tmp/config.mak
mv /tmp/config.mak config.mak

Теперь все готово к инсталляции

make
sudo make install

Далее откройте mplayer с "Приложения" - "Аудио и видео" - "MPlayer"
или откройте нужный вам фильм из консоли, что предпочтительней

mplayer ~/torrents/film.mkv

Это все!

Если у вас нет под рукой полноценного HD фильма, скачайте ролик с сайта.
Запустите фильм. В консоли вбейте top и посмотрите на нагрузку процессора. Она должна быть низкой. Конечный результат тоже должен радовать, т.е. фильм воспроизводиться без проблем.

Альтернативный способ
Если описанный мною выше способ не сработал, попробуйте следующие.
Пройдите по этой ссылке.
Прочитайте внимательно содержимое страницы.
Откройте /etc/apt/sources.list

nano /etc/apt/sources.list

и добавьте в конец

deb http://ppa.launchpad.net/rvm/mplayer/ubuntu jaunty main
deb-src http://ppa.launchpad.net/rvm/mplayer/ubuntu jaunty main

Получите ключ

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 03E02400

Выполните update и установите MPlayer

sudo apt-get update
sudo apt-get install mplayer

Откройте конфиг MPlayer

gedit ~/.mplayer/config

Впишите туда следующие

# Write your default config options here!
#vo=gl:rectangle=1:swapinterval=1:slice-height=0
double=true
lavdopts=fast=1:skiploopfilter=all:threads=2
cache=8128
vsync=true
autosync=30
framedrop=true
brightness=1
afm=hwdts
ao=alsa
stop-xscreensaver=true

gl:yuv=2:force-pbo:ati-hack

vo=vdpau,xv,
vc=ffh264vdpau,ffmpeg12vdpau,ffwmv3vdpau,ffvc1vdpau,

Начните просматривать HD-видео командой

mplayer -ao alsa -vfm gl2 ffmpeg -lavdopts lowres=1:fast:skiploopfilter=all ~/discovery.mkv