Убедитесь, что аппаратное кодирование/декодирование VP8 действительно работает в Linux.

У меня "Бибокс" от "ASRock". Процессор этой машины — Intel Celeron N3150, который поддерживает аппаратное кодирование и декодирование видеопотоков VP8. Я хотел бы использовать эту функцию в Google Chrome (в Debian Linux) для выполнения вызовов WebRTC. Но я не уверен, как доказать, что Chrome действительно использует кодирование/декодирование HW.

Мои выводы

К сожалению, ситуация с Linux очень запутанная. Помимо различных API-интерфейсов ускорения (VAAPI, VDPAU и т. д.), из которых я не знаю, какой из них на самом деле использует Chrome, Chrome вносит дополнительную путаницу, говоря:

Декодирование видео: только программное обеспечение, аппаратное ускорение недоступно

Кодирование видео: аппаратное ускорение

на странице "chrome://gpu".

Кодирование: несмотря на то, что ist говорит, что кодирование ускоряется, у меня загрузка ЦП составляет 60-70% при кодировании HD-видео в виде потока VP8. Это не похоже на HW-кодирование для меня.

Декодирование. Насколько я читал в Интернете, аппаратное декодирование, похоже, вообще не поддерживается в Chrome под Linux. В Chrome есть переключатель --ignore-gpu-blacklist, который действительно меняет строку "Video Decode" с "Только программное обеспечение... " на "Аппаратное ускорение", но это ничего не меняет. Я также провел некоторое исследование с различными медиаплеерами, такими как Kodi и VLC. Эти плееры показывают загрузку процессора примерно на 25-30% при воспроизведении VP8, что действительно может быть связано с аппаратным декодированием, но, что удивительно, когда я отключаю аппаратное кодирование в этих плеерах, никаких изменений не происходит. Что в свою очередь заставляет меня поверить, что даже эти не декодируются в HW.

Инструменты: я нашел несколько инструментов, даже от Intel, но большинство из них относится к нагрузке на GPU (что означает 3D-ускорение). Я также пробовал использовать glxinfo от mesa-utils, где написано: "прямой рендеринг: Да" и в соответствии с эта ветка подтверждает, что аппаратное декодирование (?) поддерживается. Но это просто говорит о том, что поддержка доступна, а не о том, действительно ли в настоящее время ее использует какое-либо приложение.

Вопрос

Есть ли способ четко проверить, работает ли аппаратный кодер и/или декодер, когда видеопоток VP8 кодируется или декодируется в Linux?

Буду очень признателен за вашу помощь!


person Bernd    schedule 30.01.2016    source источник


Ответы (1)


1) Здесь важен более конкретный флаг. В Chrome://gpu вы должны увидеть VPx Video Decode:

Там написано аппаратное или программное обеспечение?

2) В связи с этим, что-то попробовать: Зайдите на YouTube в Chrome, воспроизведите любое видео. Щелкните правой кнопкой мыши видео во время его воспроизведения и выберите Stats for Nerds в контекстном меню.

Это скажет вам, дает ли YouTube вам VP8, VP9 или H.264. Это может быть полезной подсказкой, особенно если вы получаете H.264. (Это было бы более полезно на ноутбуке, потому что, если Chrome похож на MS Edge, он перестанет рекламировать поддержку VPx, когда ноутбук работает от батареи, заставляя YouTube предоставлять ему H.264, потому что VPx потребляет намного больше батареи, чем H. .264, даже при аппаратном декодировании. H.264 — кодек с гораздо меньшими затратами, и его аппаратное декодирование более эффективно, чем аппаратное декодирование VPx. Kaby Lake может, наконец, закрыть этот пробел.)

3) Есть еще несколько вопросов. В списке рендеринга программного обеспечения Chrome есть несколько интересных записей, которые предполагают, что Chrome может игнорировать даже довольно новые графические процессоры Intel, включая ваш чип Braswell. Проверьте это здесь. Обратите внимание, что в одной записи говорится: "Декодирование VPx слишком медленное на Intel Broadwell, Skylake и CherryView".

Если вы следуете навигационная цепочка, вы видите, что это означает каждый графический процессор с определенной маской PCIID (например, N3150 должен быть 0x22b1). Это только Windows, и, кроме того, это может быть остатком старая ошибка уже исправлена.

Также обратите внимание на другие возможные записи, в некоторых из которых упоминаются конкретные версии драйверов Intel, а также конкретные версии ядра Linux.

4) Убедитесь, что ваша страница Chrome://flags действительно указывает на то, что список рендеринга программного обеспечения переопределен (это самый первый флаг). Вы упомянули синтаксис командной строки со старым термином «черный список», но в последние годы у этого флага были некоторые ошибки, в основном не работающие для некоторых людей и другие проблемы. Я бы просто перепроверил, что, как бы вы ни установили этот флаг, он действительно отображается с правильной настройкой на странице флагов. Если нет, очевидно, установите его правильно на этой странице. Обратите внимание, что существует ошибка, которая может быть связана или не связана с вашими проблемами — переопределение списка программного рендеринга переключает флаг декодирования видео VPx в chrome://gpu на аппаратное ускорение даже на ПК без аппаратного ускорения VPx, таких как ноутбук Ivy Bridge. м сейчас с Intel HD 4000. Я не знаю, является ли это просто ошибкой презентации, и Chrome на самом деле не пытается использовать аппаратное ускорение, или Chrome действительно делает это (что, казалось бы, должно рухнуть или что-то в этом роде). , но это не так).

Флаги Chrome — это путаница и конфликтующие варианты слов. Флаг говорит: Переопределить список рендеринга программного обеспечения. Этот флаг должен быть включен, а не отключен. Но если он включен, вы не увидите слова «Включено» или какого-либо индикатора состояния. Вы увидите слово Отключить в качестве приглашения изменить настройку. Просто чтобы вы знали... может быть, для вас это уже старая шляпа.

5) Последним, но очень мощным источником информации о том, что происходит с VP8 в вашей системе, является Intel Media SDK. Если это не бесплатно по умолчанию, это бесплатно как часть студенческой версии компиляторов Intel IDE/C++ и бесплатных пробных выпусков платных выпусков IDE. Там многое можно сделать, чтобы увидеть, что происходит. Меня поразил этот отрывок на странице 24 их руководства для разработчиков:

Аппаратное ускорение можно добавить в FFmpeg с помощью простого шага компиляции. Для приложений, написанных для использования командной строки FFmpeg или API-интерфейсов libav*, их можно включить аппаратно, изменив имя кодека, например, с libx264 на h264_qsv.

Я бы поэкспериментировал с этим методом для кодеков VP8 в ffmpeg, чтобы увидеть, можете ли вы вообще запускать аппаратное ускорение в своей системе за пределами Chrome.

6) Также обратите внимание, что термин «аппаратное ускорение», когда речь идет о видеокодеках, используется в отрасли непоследовательно, и я не уверен, что именно Chrome подразумевает под ним (во флагах). Декодирование может быть ускорено с помощью графического процессора или полностью аппаратно с помощью блока с фиксированными функциями, который также находится на графическом процессоре (но не использует шейдеры графического процессора). Оба они называются аппаратным ускорением, но это не одно и то же. Иногда используется «полностью аппаратное» или «фиксированная функция», чтобы отличить этот сценарий от общего ускорения графического процессора (которое иногда называют частичным ускорением или гибридным ускорением).

официальный документы довольно запутаны, но Braswell (как и его предшественник и Broadwell) должен иметь полное фиксированное декодирование функций для VP8. При кодировании и VP9 (так же, как в Skylake, которые могут иметь тот же модуль QSV), предоставляются через гибридное решение. Я думаю, что они используют какое-то ускорение графического процессора (с шейдерами, может быть, с использованием OpenGL или OpenCL или чего-то еще, но я не знаю подробностей). Это различие может иметь значение, особенно когда вы используете устройство, работающее от батареи (не говоря уже о том, что HEVC будет намного эффективнее с точки зрения качества). И я думаю, что это может оправдать решения команды разработчиков Chrome о том, как использовать вашу модель Braswell. К сожалению, все это плохо документировано...

person LearningFast    schedule 07.01.2017
comment
Спасибо за ваше обширное объяснение! Возможно, у меня будет шанс вернуться к этой теме в течение следующих нескольких недель. Затем я обновлю / опубликую свои результаты. Как я выяснил, сначала мне нужно скомпилировать специальный драйвер VAAPI Linux для моего оборудования со страницы Intel 01.org, чтобы это вообще заработало. - person Bernd; 23.04.2017
comment
Теперь, со всем этим в сокращении, я хотел бы добавить, что, поскольку я вижу много кода VPx как для кодирования, так и для декодирования в основном драйвере VA-API (включая шейдеры, которые определенно не работают на аппаратных блоках). , Я полагаю, что вам все равно потребуется установить отдельный гибридный драйвер< /a> (что также может потребовать исправлений для работы с последними дистрибутивы однако). С некоторыми предостережениями Chrome, наконец, должен выйти в 2019 году. . - person mirh; 23.11.2019