Речь пойдет о
Media Player Classic-Home Cinema Mod(MPC-HC) и его особенности - поддержке
DXVA.
Немного о такой спецификации, как
DXVA:
DXVA - Microsoft API спецификация для Microsoft Windows и Xbox 360 платформ, позволяющая процессу декодирования видео быть аппаратно усиленным. Т.е., дает возможность видеоадаптеру расгрузить процессор при декодировании видео, что актуально при нынешнем широком распространении High Definition(HD) видеоконтента.
Существует
два вида DXVA: 1.
Hardware assisted decoding(процесс декодирования совместно GPU(графический процессор) видеоадаптера и software декодером, т.е. видеоадаптер берет на себя лишь часть работы) и 2.
Full bitstream decoding(когда видеоадаптер выполняет все части процесса декодирования, плеер должен только отдавать/принимать потоки информации).
DXVA 1.0, которая была введена как стандартный API с
Windows 2000 и Windows 98 или выше, может использовать метод вывода overlay или VMR 7/9.
DXVA 2.0, доступна только для
Windows Vista или более новых ОС, интегрируется с Media Foundation (MF) и использует Enhanced Video Renderer (EVR), которые есть в MF и позволяет делать больше операций, включая захват видео и его обработку, с аппаратным усилением.
Чем же нам поможет MPC-HC ? HD-видео может быть сжатым кодеками семейства H.264(а именно библиотекой x.264) и VC1) в форматах mkv, mp4 и т.д., потоками стандарта MPEG-2 (например, записи со спутника или HD-камкордера) в форматах ts, m2ts и т.д.
Важно: MPC-HC поддерживает лишь второй вид акселерации(
Full bitstream decoding) и
может декодировать контент, сжатый кодеками
x.264 и VC1.
Как же узнать,
поддерживает(все пункты по своему подходят) или
будет ли поддерживать(пункты 1 и 3 подходят) моя
видеокарта DXVA ? Не стоит забывать о полной и неполной поддержке DXVA(пункт Важно). Я считаю, можно пойти двумя путями(может и тремя
):
1. разработчики данного плеера
говорят о поддерживаемых видеоадаптерах так: ATI Radeon™ HD, ATI HD (2400/2600 - возможно, но не точно)/3850/3870/4850/4870, AMD Hybrid CrossFireX™ 780G серии для H.264 & VC-1 или nVidia GeForce 8500, 8600, 9600 или лучше/старше, а также, от недавнего времени, ввели поддержку интегрированного GPU от Intel - на чипсете G45(пока в стадии отладки).
2. использовать утилиту
DXVAChecker(для запуска необходимо наличие в Windows XP - Visual C++ 2005 SP1 Runtime и .NET Framework 2.0, а в Windows Vista - Visual C++ 2005 SP1 Runtime), где нас будут интересовать подчеркнутые строки, сигнализирующие о поддержке DXVA(записи вида: *ModeVC1_MoComp* или *ModeVC1_PostProc* и т.д. говорят о частичной поддержке DXVA, т.е. ускоряются через GPU видеоадаптера в данном случае не самые ресурсоемкие подпроцессы декодирования)
3. использовать
сравнительную таблицу A Basic Overview of GPU HD Video Processing. Вас будут интересовать соответственно колонки *VC-1
decode ability* и *H.264 decode ability*, где для задействования акселерации через MPC-HC необходимы записи
*full*. Таблица на сегодняшний день не совсем полна и актуальна на 14 августа 2008 г.
Я приобрёл видеокарту, соответствующую требованиям, данным выше. Как мне
воспроизвести HD-контент с помощью MPC-HC ? Необходимо соблюдать следующие правила:
1. использование операционной системы Windows XP или Vista, или Windows 7;
2. для Windows XP, нужно выбрать в настройках на вкладке *Вывод* Системный, Overlay Mixer, VMR9 или VMR9 Renderless;
3. для Windows Vista и Windows 7, нужно выбрать в настройках на вкладке *Вывод* EVR или EVR Custom(пользовательский);
4. для поддержки режимов DXVA и вывода субтитров нужно выбрать в настройках на вкладке *Вывод* VMR9 Renderless или EVR Custom(пользовательский);
5. видеодекодер должен быть подсоединен непосредственно к рендереру(в цепочке декодирования). Это означает, что никаких посторонних(внешних) фильтров(декодеров)[например, DirectVobSub или ffdshow] не должно быть между декодером и рендерером
примерный вид верной цепочки фильтров при задействованной DXVA 6. DXVA совместимые файлы, сжатые(закодированные) x264|VC1;
7. Самые новые/последние: драйвера(стабильной сборки) для видеокарты и DirectX.
Замечания(как увидеть ускоряет ли): 1. на вкладке *Форматы* нужно соответствующие форматы выбрать(Matroska, mp4...) и на вкладке *Встроенные фильтры* не забыть поставить галки на фильтрах для Matroska, mp4... и декодерах с DXVA отметкой в названии
2. задействован ли режим DXVA при воспроизведении можно
проверять: а) сочетанием клавиш
Ctrl+J(но это лишь
справедливо, если в пунктах 2-4
выбраны VMR9 Renderless или EVR Custom(пользовательский)). Графики, отображающиеся по Ctrl+J, это джиттер-кривые(jitter curve), показывающие временной интервал между моментами, когда кадр должен(ожидается) к отображению, и когда реально отображается на экране. Самая длинная ось, которую зависимость пересекает, служит нулем отсчета, маленькие короткие - 10 мс, а более длинные - 40 мс. По нему хорошо ориентироваться на плавность(smoothless) вывода картинки, дрожание - достаточно, хотя бы в ОС Windows XP, сравнить графики в оконном режиме и в Direct 3D режиме(как в играх).
б) зайдя в меню *Воспроизведение/Фильтры* и выбрав MPC Video Decoder
в) в самом низу окна в статусной строке должна отображатся запись вида
Сделал все как сказано, а не вижу результата для HD-видео(идет только звук(без видео), или по Ctrl+J DXVA задействована, а видео некорректно воспроизводится, или плеер вообще с ошибкой вылетает), что делать? Возможный ход решения и причина(ы):
1. идет воспроизведение, а DXVA не задействована->возможно вы воспроизводите MPEG-2 контент в соответствующих контейнерах (ts, m2ts и т.д.), а такой контент MPC-HC с DXVA не ускорить->смотрите ниже пункты *Всё равно не выходит задействовать DXVA в MPC-HC....* и *У моей видеокарты нет поддержки DXVA...*;
1.1 идет воспроизведение, а DXVA не задействована->не соответствие пункту 5(т.е., возможно, вы используете распространенные сейчас кодек-паки, как-то CCCP, klcodecpack, XP-Codec-Pack и др.)->посмотрите цепочку фильтров при воспроизведении, нет ли там чего лишнего, и вид её(при задействованной DXVA) должен быть примерно такой(по правому клику мышкой)
можно, либо удалить кодек-пак, либо правильно настроить *мешающий* декодер(ы)->если в системе нет других декодеров h264, кроме, например, ffdshow(один декодер мешает), то достаточно снять галки с соответствующий форматов в Настройках ffdshow(мешающего декодера); если в системе есть другие декодеры h264, то на вкладке *Внешние фильтры* добавить их и поставить запрет.
2. идет только звук(без видео)->возможно видео сжато VC1 и при этом interlaced(так называемая *гребенка*)->MPC-HC пока с таким контентом не справляется;
3. идет только звук(без видео) или плеер вообще с ошибкой вылетает->проблема может быть в драйверах->поэтому при обновлении драйверов лучше позаботится о том, чтоб у вас в запасе всегда была последняя рабочая сборка!;
4. идет воспроизведение, а DXVA не задействована, или DXVA задействована, а видео некорректно воспроизводится->не соответствие пункту 6->часто видео сжимается заведомо без учета задействования DXVA в будущем(говорят, но сам не проверял, что учет DXVA - это экономия на качестве в угоду совместимости с аппаратной частью той или иной системы) или просто ещё не опытен человек(необходимо для DXVA, чтоб при сжатии, в настройках кодера выставлялся параметр *Level* как 4.1 и не превышалось определённое количество ссылочных кадров(reference frames)[параметр *ref*] в зависимости от размера кадра будущего(сжатого) видео
Level4.1
1920x1088: (--ref 4)
1920x864: (--ref 5)
1920x720: (--ref 6)
Level4.1
1280x720: (--ref 9)
1280x648: (--ref 10)
1280x588: (--ref 11)
1280x540: (--ref 12)
1280x498: (--ref 13)
1280x462: (--ref 14)
1280x432: (--ref 15)
1280x405: (--ref 16)
причем, если разрешение не точно такое как выше указанное, то по рекомендациям форумов doom9 и avs на "промежуточных" разрешениях лучше использовать ближайшее МЕНЬШЕЕ кол-во ref. frames)->смотрим на количество reference frames с помощью
Mediainfo если вы видите превышение, то DXVA уже не задействовать на данном файле(для определенных рендереров) и можно помочь:
а) полностью пересжав фильм(без пересжатия можно обойтись, если, по каким-то причинам *Level* изменен(не 4.1), хотя видео сжималось со значением 4.1, тогда можно помочь, используя программы MKVtoolnix(+оболочку MKVExtractGUI), AVInaptic, H264info и подробнее описано процедуру
сдесь); лично у меня корректно воспроизводились файлы с DXVA и *Level 5.1*;
б) переключившись на вкладке *Вывод* на Системный рендерер.
в) если Вы владелец видеокарты от NVIDIA, то MPC-HC должен *переваривать* видео и с *Level 5.1*, и с ref вплоть до 16(ATI данные ограничения на уровне драйверов не сняла).
5. идет воспроизведение, DXVA задействована, а пропорции видео искажены->MPC-HC некорректно определил AR из заголовка файла(соотношение сторон видео)->можно попробовать *заставить* MPC-HC читать
AR из видеопотока, и задействовать эту настройку можно сдесь
6. идет воспроизведение, DXVA задействована, а
картинка выглядит осветлённой, не совсем естественно ->при просмотре на ПК (где уровень яркости 0-255) материала с уровнем яркости 16-235 (любой фильм)
происходит искажение вывода черного и белого, и в итоге получаем картинку менее насыщенную и более контрастную->можно использовать шейдеры
16-235 -> 0-255 [SD](предназначен для работы с видео файлами, у которых ширина кадра до 720 пикселей) и
16-235 -> 0-255 [SD] [HD](работает с видео файлами у которых ширина кадра любая), которые позволяют в MPС-HС получить правильный уровень черного и белого
в текущих билдах(12xx) можно обойтись настройками рендеринга
но нужно заметить, что этот совет
не для всех мониторов, либо не для всех типов матриц и, скорей всего, это подойдет владельцам новых мониторов (нужна статистика), так что субъективно оцените необходимость применения этих шейдеров! Очень хорошо о уровнях яркости и их корректировке при просмотре видеоматериала рассказано в этом
FAQ с форума Doom9.
7. идет воспроизведение, DXVA задействована, но
внизу картинки есть
расплывчатая(blur) область(наблюдается не для всех файлов и с рендерером VMR9 Renderless(возможно и с EVR Custom), Системным)
->вот что главный разработчик говорит на этот счет(
на примере видео 1920 x 1080) - *1080
не является верным размером для DXVA DirectX поверхности(не делится нацело на 16), поэтому mpc-hc(думаю, речь о декодере) дополняет его до корректного(до 1088) и 'сообщает' рендереру о обрезке последних 8 линий, но VMR9 Renderless(возможно и EVR Custom), если он
не в режиме Mixer, не реагирует на это*->нужно использовать Mixer mode рендерера: или VMR9 Renderless, или Overlay Mixer->включил
режим Mixer у VMR9 Renderless, но видео как-то
подтормаживает(идет небольшими рывками)->посмотрите при проигрывании в меню *Воспроизведение/Фильтры* свойства VMR9 Renderless(или, возможно, EVR Custom)
видно много пропущенных(drop) кадров->можно попробовать сменить
встроенный сплитер для Matroska(и/или для mp4, в соответствии с вашим файлом(и)) на
Haali Media Spliter(который
более корректно(пока) распаковывает mkv и mp4 контейнеры), затем на вкладке *Форматы* поставьте галочки напротив Matroska и mp4(если вдруг после установки Haali Media Spliter это необходимо) и на вкладке *Встроенные фильтры* снимите галку с Matroska(и/или с mp4)->видео воспроизводится теперь без рывков, но не вижу где выбрать субтитры и дополнительные аудиодорожки->это делается или через меню *Навигация* mpc-hc, или через меню самого Haali Media Spliter по иконке в трее
Примечание: вполне вероятно, что подтормаживание видео при воспроизведении, когда используется Mixer mode рендерера и внутренний сплиттер для .mkv, связано с используемыми драйверами, т.к., с версиями драйверов для видеокарт ATI <=8.12 приходилось использовать сплиттер от Haali, а с использованем линейки 9.х все нормализовалось.
Всё равно не выходит задействовать DXVA в MPC-HC, а производитель видеоадаптера говорит о поддержке DXVA у своего продукта и
хочется очень смотреть HD-видео, что делать ? Возможно у вашего адаптера неполная поддержка DXVA. Оба вида DXVA поддерживают продукты/плееры
PowerDVD и
WinDVD, декодер из пакета утилит
Nero(они являются коммерческими продуктами!), бесплатный плеер корейского пошиба
Daum PotPlayer(будет полезен пользователям, у которых видеоадаптеры с неполной поддержкой DXVA - не самые новые). Стоит упомянуть о введении поддержки DXVA для декодеров H.264|VC1 ОС Windows 7 - по отзывам достаточно всеядные.
У моей
видеокарты нет поддержки DXVA, как
комфортно просматривать HD-видео ?
Если у вас многоядерный процессор, то можно использовать декодеры, поддерживающие многопоточность, т.е. могут дать возможность задействовать все ядра вашего CPU, как-то тот-же
Cyberlink Power Decoder,
CoreAVC Professional Edition(тоже являются коммерческими продуктами) и, с 14 февраля 2009 года,
ffdshow.
P.S. Данный материал может быть где-то неточен/неграмотен и, по возможности, укажите на ошибки.
P.S.S. Большое спасибо данной ветке ru-board и форуму Doom9 за детальное обсуждение работы MPC-HС, форуму AVS, разработчикам - за создание данной модификации MPC!!!!
FAQ немного дополнил. Жду дополнений и указаний неточностей.
V0lt Поправь ссылку в шапке на данный пост.