26 августа 2012 г.

Девять кругов VAAPI в Linux


VAAPI  средство для воспроизведения видео силами видеокарты. Как и всё в Linux, работает не у всех и не всегда. Во время настройки я много ходил по форумам и читал про проблемы людей. Большинство проблем прошло мимо меня, к счастью.
Во-первых, нужно разобраться, какое железо, точнее видеокарта и драйвера к ней установлены в системе. С INTEL всё просто: железо начиная с GMA X4500HD и выше с открытыми драйверами (других и нет). Для Nvidia есть свой интерфейс VDPAU, через который можно кодировать/декодировать видео на аппаратном уровне, но только с закрытым блобом. С AMD нужно использовать XvBA и блоб.

Декодировать видео с помощью vaapi умеют плееры vlc, xbmc и mplayer и gstreamer. Вот тут-то и начинается веселье. Для работы vaapi нужен libva-intel-vaapi-driver, который есть в стандартном репозитории. Однако, в вики vlc написано, что он умеет работать только с их собственной версией этого драйвера. Ладно, скачаем его. Но ссылка для скачивание ведёт в никуда. Так что, vlc пролетает.

Далее по списку шёл gstreamer. Единственный вменяемый плеер, использующий gstreamer  это Totem. Я установил пакет libgstreamer-vaapi, но в totem я не нашёл способа активировать vaapi, там вообще нет никаких настроек.

Xbmc -- жутко тормозил, мигал и артефачил, галка напротив 'enable vaapi' ничего не дала и xbmc вешал X.

Gnash (замена flash player) крутил 360p с нагрузкой 45%, сам flash занимает 13-18% на том же ролике, активация vaapi и cairo ничего не дала, с opengl не работало.

Mplayer  нужна пропатченная версия, называется mplayer-vaapi. Есть PPA для ubuntu 12.04 и старше. В арче вроде есть в стандартных репах. Ставится без проблем. Smplayer и gnome-mplayer работают. Первый работает хорошо, второй -- глюкодром, используйте smplayer.

Хотел собрать свой mplayer, но на сайте intellinuxgraphics есть совет:

mplayer-vaapi

Get MPlayer with VA-API support from mplayer-vaapi on Gitorious 
git clone -b hwaccel-vaapi git://gitorious.org/vaapi/mplayer.git mplayer-vaapi

./configure --enable-x11 --enable-vaapi
make
make install

./configure --enable-x11 --enable-vaapi не работает. Предварительно скачал вдобавок ffmpeg и бросил в каталок с исходниками mplayer-vaapi, но mplayer отказывался, ссылаясь на неизвестный аттрибут --enable-vaapi. Короче, я бросил это гиблое дело, и оставил mplayer из рра.

Эпизод II. Картинка в картинке (с)

Фокусы продолжались и после того, как я настроил smplayer в связке с mplayer-vaapi. Настривается легко:

  • Настройки > Основные > Снимки экрана > отключаем обязательно, иначе будет есть цпу.
  • Настройки > Основные > Видео > Прямой рендеринг включаем.
  • Настройки > Основные > Видео > Устройство вывода выбираем vaapi (доступны также видео выходы из набора стандартного mplayer, можно переключаться на лету.

Первый фокус: compiz вкупе с Unity-3D не дружит с mplayer-vaapi, картинка 720p и выше рандомно тормозит, причём, без какой-либо нагрузки на GPU и ЦПУ.
Второй фокус: видео артефакты

Редко, но бывает, тот же самый кадр с использованием xv, например, артефактов не показывает.

Ссылки:
и проч.

Итог: в связке mplayer-vaapi+smplayer+xfce работает быстро, нагрузка на процессор не поднимается выше 3%, на GPU не выше 20%, так что даже на слабом железе можно крутить FullHD. Артефакты есть, но не часто. С compiz глючит, работает только с кодеком h264, прочие грузят процессор так же.