Video int что это
Video int что это
During this time, our software has become incredibly faster and smarter. Today, DriverPack is the largest database of unique drivers in the world, located on ultra high speed servers all over the world. In order to perform the process of driver installation always quickly and with the highest possible quality, we use machine learning technologies that makes our selection algorithm even better and more accurate. We have managed to achieve all this in such a way that the software remains absolutely free of charge, and everyone can use it.
Its history has lasted for more than 20 years. Opera Software participates in developing web standards within W3C project. More that 350 million people worldwide use Opera products.
Its headquarters is located in Oslo, the capital of Norway.»,»partners_landing-text-yandex»:»Yandex is a global developer of the search engine and popular Internet services of the same name.
In Russia, where Yandex comes from, its share among the search engines makes 56.4% (according to Yandex.Radar, for March, 2018). This company is one of the few who successfully withstands competition with Google, the search giant.
Its headquarters is located in Moscow, the capital of Russia.»,»partners_landing-text-avast»:»Avast Software is a global developer of software in the field of information security.
It releases the world most popular free antivirus. The software from Avast prevents 1.5 billion attacks against computers and the web every month.
Как повысить скорость декодирования видеопотока в FFmpeg
С приходом тяжеловесных видеоформатов, таких как 4K (Ultra HD), проблема эффективности декодирования видеопотока стала достаточно актуальной. На среднем компьютере приходится принимать специальные меры для того, чтобы можно было обработать такой видеопоток в реальном масштабе времени. В статье рассказывается о возможных способах увеличения скорости декодирования видеопотоков в решениях, основанных на FFmpeg, и приводятся результаты экспериментов по измерению скорости декодирования для 4K видеопотоков, закодированных в H264 и HEVC(H265).
Оглавление
1. Три способа повышения скорости декодирования видеопотока
Мы будем рассматривать три способа повышения скорости декодирования видеопотока.
Первый из них использует исключительно возможности CPU, а два других задействуют возможности графических процессоров.
Доступные способы повышения скорости декодирования видеопотока достаточно сильно зависят от используемой операционной системы, аппаратной конфигурации компьютера и конфигурации FFmpeg. Все приведенные в статье результаты проверялись на следующей программно-аппаратной конфигурации: операционная система — Windows 10, ЦП — Intel i5 8400 2.80 ГГц (6 ядер без hyper-threading), встроенный графический процессор — Intel UHD Graphics 630, память — 16 ГБ, сборка FFmpeg 4.2.1, с zeranoe.
Для лучшего понимания архитектуры кодеков в FFmpeg можно посмотреть предыдущую статью автора, которая находится здесь.
1.1. Подключение дополнительных рабочих потоков в стандартных декодерах
1.2. Подключение аппаратного ускорения в стандартных декодерах
Для описанной выше программно-аппаратной конфигурации мы получим:
Понятно, что cuda требует установки платы Nvidia и соответствущего ПО, qsv использует технологию Intel Quick Sync Video (QSV), реализованную на встроенных графических процессорах Intel (см. [1]), dxva2 и d3d11va используют технологию DirectX Video Acceleration (см. [2]), доступную только в Windows, но зато реализованную для видеокарт разных производителей (Intel, Nvidia, AMD).
Конкретные декодеры не обязаны поддерживать все эти типы аппаратного ускорения (или хотя бы один из них). Для определения типов, поддерживаемых конкретным декодером, можно воспользоваться следующим кодом:
А вот theora вообще не поддерживает аппаратного ускорения.
1.3. Использование специальных декодеров, реализующих декодирование на графических процессорах
В состав FFmpeg входят два семейства кодеков, реализующих кодирование и декодирование на графических процессорах.
После открытия входного потока доступ к декодеру обычно реализуется следующим образом:
Но таким образом можно получить только декодер по умолчанию для данного идентификатора кодека. Для альтернативных декодеров нужно использовать имя декодера примерно таким образом:
2. Измерение скорости декодирования
h264 | hevc | ||||||
---|---|---|---|---|---|---|---|
Config | # | Время | CPU | GPU | Время | CPU | GPU |
default | 1 | 75 | 26 | 0 | 125 | 25 | 0 |
2 | 132 | 28 | 0 | 180 | 27 | 0 | |
threads=2 | 1 | 47 | 42 | 0 | 74 | 42 | 0 |
2 | 79 | 48 | 0 | 104 | 46 | 0 | |
threads=4 | 1 | 35 | 60 | 0 | 46 | 64 | 0 |
2 | 60 | 54 | 0 | 71 | 70 | 0 | |
dxva2 | 1 | 45 | 14 | 72 | 34 | 28 | 70 |
2 | 107 | 28 | 35 | 99 | 30 | 36 | |
xxxx_qsv | 1 | 25 | 34 | 80 | 25 | 34 | 72 |
2 | 70 | 39 | 54 | 70 | 40 | 50 |
Эксперименты проводились также для 32-битной сборки FFmpeg. Результаты довольно близкие, кроме одного случая: декодер hevc в конфигурациях без аппаратного ускорения показал падение производительности в 2-3 раза. Весьма неожиданный результат.
3. Замечания о QSV декодерах
Integer и int
В этом топике я хочу описать некоторые базовые различия между примитивными типами и соответствующими им объектными на примере int и Integer. Различия эти достаточно простые и, если немного задуматься, то вполне логичные, но, как показал опыт, программист не всегда над этим задумывается.
Основное различие, разумеется, в том, что Integer — это полнофункциональный объект, который занимает место в куче, а в коде вы пользуетесь ссылками на него, которые неявно преобразуются в значения:
Однако в большинстве случаев создаётся новый объект, и это может быть существенно. Помните так же, что объект Integer никогда не меняет своего значения. Рассмотрим такой на первый взгляд невинный код:
public class Increment
<
public static void main (String[] args)
<
Integer a= 0 ;
while(true) a++;
>
>
Попрофилируем использование памяти, к примеру, триальной версией JProfiler’а:
Очевидно, при каждом инкременте создаётся новый объект Integer, а старые затем подчищаются сборщиком мусора, когда их накапливается порядка ста тысяч. Неплохая нагрузка на систему для обычной операции инкремента.
В целом понятно, что Integer надо использовать только тогда, когда без него не обойтись. Один из таких примеров — это параметризованные типы (generics), к примеру, стандартные коллекции. Но и тут надо быть аккуратным, чтобы использовать память разумно. Я приведу несколько утрированный пример на основе проблемы, с которой я столкнулся в реальном проекте. В некотором научном анализе требовалось ассоциировать с определёнными объектами длинные множества натуральных чисел. Можно сэмулировать это следующим кодом:
public class MapInteger
<
static Map > subSets = new HashMap >();
public static void put (Integer key, int value)
<
if(!subSets. containsKey (key)) subSets. put (key, new HashSet ());
subSets. get (key). add (value);
>
public static Collection getRandomKeys ()
<
List vals = new ArrayList ();
for( int i= 0 ; i int )(Math. random ()* 500 ); i++)
<
vals. add (( int )(Math. random ()* 1000 ));
>
return vals;
>
public static void main (String[] args)
<
new Scanner(System. in ). nextLine ();
for(Integer i= 0 ; i 100000 ; i++)
<
for(Integer key: getRandomKeys ())
put (key, i);
>
new Scanner(System. in ). nextLine ();
>
>
Для каждого числа из первых ста тысяч мы определяем набор ключей с помощью getRandomKeys (в реальной задаче ключи, конечно, были неслучайны) и добавляем текущее число в соответствующие множества subSets. Тип ключей Integer выбран для упрощения иллюстрации; в целом он неважен. Вот количества объектов до выполнения операции:
А вот после:
Принудительный запуск сборщика мусора помог несильно:
40 мегабайт памяти съедают целые числа — это печально. Причина кроется в прототипе метода put:
public static void put(Integer key, int value)
Из-за того, что здесь использован тип int, значения переменной i при передаче в метод автоматически преобразуются в int (unboxing), а затем заново в Integer (boxing), но уже создаётся новый объект. Заменим в прототипе int value на Integer value и запустим профайлер заново. В начале картина такая же:
Зато в конце значительные отличия:
И после сборки мусора:
Так, заменив один int на Integer, можно сэкономить около 40% используемой памяти. Заметим, что в for(Integer i=0; i тоже неслучайно используется Integer: напишем здесь int, и первое исправление не поможет. Видим, что правило писать int везде, где можно не писать Integer, работает не всегда: в каждом отдельном случае надо думать. Иногда также может пригодиться собственная реализация кэша целых чисел.
Русские Блоги
Руководство по Video.js и возникшие проблемы
Тег видео также доступен в формате html, но для настройки некоторых полезных стилей и методов мы обычно используем плагины проигрывателя с открытым исходным кодом. Здесь мы представляем его друзьям, которые не знают, как его использовать, когда впервые сталкиваются с ним.
1. Скачивание video.js
Сначала прикрепите официальный сайт video.jshttps://videojs.com/Если вы хотите использовать video.js, вам нужно сначала загрузить этот js, вот проект на GitHub, скачайте его сами,https://github.com/videojs/video.js
2. Инициализация video.js
Прежде всего, мы должны сначала ввести css и js (css также доступен в github),
Тогда есть использование тега видео.Есть два способа инициализации, которые будут представлены здесь отдельно, без чепухи, вставьте код.
1. Первый метод реализуется методом videojs, которому необходимо определить идентификатор, например, заполнить video1 в videojs (‘video1’), что позволит использовать функцию воспроизведения video.js.
3. Некоторые общие атрибуты и методы video.js
плакат: плакат, когда видео не воспроизводится. Это исходное изображение, которое можно настроить. По умолчанию используется первый кадр видео.
autoplay: автоматически загружается true / false, по умолчанию не загружается
loop: true / false После воспроизведения видео, следует ли воспроизводить в цикле
приглушено: true / false, отключать ли звук
Есть много атрибутов, вот лишь несколько часто используемых,https://blog.csdn.net/a0405221/article/details/80923090Эта статья представлена более подробно, и она также была заимствована из моего учебного процесса.
Тогда есть несколько часто используемых методов, вотhttps://www.awaimai.com/2053.htmlЭта статья. В нем представлены несколько часто используемых техник, вот некоторые из них.
1. Кнопка воспроизведения находится по центру.
Прежде всего, после того, как вы процитируете его, вы обнаружите, что кнопка воспроизведения video.js находится в верхнем левом углу, что не то же самое, что и у обычных домашних плееров (компульсивное обсессивно-компульсивное расстройство), которые можно использовать здесь
Это свойство vjs-big-play-centered можно сделать, что очень удобно.
2. Показывать кнопку воспроизведения при паузе (это не по умолчанию?)
Просто добавьте этот css на свою страницу, вы можете написать его на голове.
3. Пауза / воспроизведение при нажатии на экран (это не по умолчанию?)
То же, что и выше, добавив этот css.
4. Отображение текущего времени воспроизведения (вы знаете, что я хочу сказать =. =)
В статье, которую я позаимствовал, есть несколько других распространенных методов. Спасибо автору за разбор. Это также очень помогло мне в процессе обучения. Здесь я также сосредоточусь на представлении производного плагина video.js.videojs-playlist
Four.videojs-playlist
Вот ссылка для скачивания с прикрепленными js и css.
Ссылка: https://pan.baidu.com/s/1uRVPiXotsMQ6sv9SQz4Zdw Пароль: sl0v
https://videojs.com/advanced/#disneys-oceansЭто эффект официального сайта, он очень красивый, но его сложнее имитировать, а GitHub не дает вам бесплатную проституцию (даже js не выпущен, или название изменено). Давайте снова поставим их GitHubhttps://github.com/brightcove/videojs-playlist, Начните знакомить с тем, как использовать.
1. В первую очередь, это, конечно, справочник, поэтому повторяться здесь не буду, просто обратите внимание на расположение js и css.
2. Использование и инициализация плейлиста
Прежде всего, список воспроизведения также инициализируется на основе video.js, поэтому также необходимо сначала добавить различные атрибуты к видео и сначала вставить код.
Да, самая большая разница в том, что все источники помещаются в контейнер videoList, и, конечно же, видео сначала нужно преобразовать в video.js. Здесь нет идентификатора, который нужно передавать, и компонент видео используется для его идентификации. Конечно, передача идентификатора также должна быть возможна. Заинтересованные друзья могут попробовать, и главное,player.playlist(videoList) Эта строка кода передает эти видео в список воспроизведения, поэтому один проигрыватель может соответствовать нескольким видео.
3. Некоторые распространенные методы плейлистов
После инициализации видно, что видео воспроизводит только один плеер, добавьте его в скрипт
Но после прочтения представленной демоверсии я определенно хочу добиться аналогичного формата.
Итак, вот метод currentItem (), 0 представляет первое видео и так далее.
Конечно, есть и предыдущие методы.
Пока вы настраиваете несколько изображений и привязываете их к событиям прослушивателя, вы можете добиться аналогичных эффектов.
В заключение настоятельно рекомендуется взглянуть на их apis. Когда вы изучаете плейлист, вы должны проверить их apis, чтобы знать эти методы, и вы получили много пользы!
Перекодирование видео с Intel Quick Sync Video — сделай это по-быстрому
В русском написании аббревиатура Intel QSV выглядит как «ИКСВ», что привносит еще больше неизвестности — «икс», да еще и «в»? Поэтому (и не только поэтому) название лучше просто перевести.
Полный перевод — «Быстрая Синхронизация Видео». Что такое «видео» — вы, наверное, знаете сами. «Синхронизация» — это возможность конвертирования видео из исходных «десктопных», т.е. высокого разрешения форматов, в форматы, поддерживаемые мобильными устройствами и видеохостингами. Хотя, это далеко не единственное возможное использование QSV.
Прилагательное «быстрая» здесь отражает то, что по всем независимым тестам транскодирования видео QSV значительно, в разы, выигрывает не только у программного кодирования на CPU, но и у hi-end GPU!
Intel Quick Sync Video — это маркетинговый термин, обозначающий аппаратное декодирование и кодирование видеоконтента в форматах H.264/MPEG-4 AVC, VC-1 и MPEG-2 (пока только декодирование), реализованное во встроенных GPU процессоров Intel — от ультрабуков до серверов, начиная со второго поколения микроархитектуры Core (Sandy Bridge).
То есть, можно перекодировать видео с DVD или Blu-Ray.
Во встроенных GPU Intel помимо исполнительных устройств общего назначения (Execution Units или просто EU), имеется специальный аппаратный модуль, Multi-Format Codec Engine (MFX), реализующий декодирование и кодирование видео:
Подобное фиксированное аппаратное решение не только ускоряет обработку видео, но и разгружает CPU, а также снижает энергопотребление системы.
При этом, декодирование целиком осуществлено в упомянутом аппаратном модуле,
а кодирование происходит в два этапа: один на исполнительных устройствах GPU, второй — аппаратно.
На приведенном слайде из презентации на Intel Developer Forum видно, какие стадии кодирования где делаются. Еще раз подчеркну, что все происходит на GPU, т.е. в железе, а «Гибридное HW/SW решение» обозначает только факт использования программируемых EU блоков GPU.
Надо отметить, что эти две стадии кодирования хорошо конвееризуются, т.е. пока MFX аппаратно обрабатывает один кадр,
EU, закончившие свою часть работы над этим кадром, уже обрабатывают следующий, чтобы передать его аппаратной части,
что, естественно, повышает общую производительность системы.
В процессорах Ivy Bridge, то есть, во второй версии Quick Sync, аппаратные модули Sandy Bridge были доработаны — повышена скорость и качество кодирования, добавлена поддержка сверхвысоких разрешений вплоть до 4K Видео. Система даже способна декодировать несколько Quad HD video потоков одновременно.
Найти бы еще соответствующий монитор.
Тестов работы с подобным QuadHD разрешением не нашлось, зато обычных тестов, показывающих скорость работы Quick Sync больше, чем достаточно для статистики.
Например, прошлогодний опыт vilianov Счастлив с Quick Sync.
А вот относительно недавняя информация — Anandtech обозревает Intel Ivy Bridge (Core i7 3770K с HD Graphics 4000, Quick Sync второй версии) и сравнивает скорость перекодирования Blu-Ray исходника на iPad:
Измерение идет в кадрах в секунду, а производительность QSV Ivy Bridge сравнивается не только со внешними GPU, но и с Core i7 2000K (Sandy Bridge с первым поколением QuickSync — Intel HD Graphics 3000 на борту), а также Handbrake – программным решением с открытым кодом, не использующим QuickSync.
Также отметим, что преимущество QuickSync особенно заметно при перекодировании в низкие разрешения:
При этом, анекдот «печатаю со скоростью 1000 знаков в минуту, но такая фигня получается» здесь неуместен — качество кодирования, хотя и немного уступает чисто софтовому, но всегда выигрывает, или, в худшем случае, идет вровень с любым другим GPU кодированием. Пруфлинков с обсуждением качества можно привести много (вот хороший пример на русском), отметим только что качество почти всегда оценивается субъективно, «на глаз», и, кроме того, оно существенно зависит от конкретной программы кодирования.
Доступ к аппаратной видеообработке QSV осуществляется через драйвер Intel HD graphics, интерфейс к нему непубличен, прежде всего, потому, что он непостоянен — зависим от конкретного железа и версии драйвера. Хотя, отдельные немногочисленные компании-разработчики, при необходимости, по специальному соглашению с Intel, получают доступ к заветному API.
Все остальные компании, желающие использовать преимущества Quick Sync Video, могут сделать это (и делают, конечно) с помощью специального SDK — Intel Media SDK, который предоставляет фиксированный интерфейс для работы с видео. При этом, автоматически, «за кулисами», MSDK использует все возможности аппаратного ускорения Intel для каждой данной системы: Quick Sync при его наличии, иначе – оптимизированные для конкретного CPU программные библиотеки.
В общем, штука отличная. Да еще и бесплатная.
Поэтому в списке компаний, использующих MSDK, можно найти такие известные компании, как MainConcept, Nero, Corel, CyberLink…
Но, не все приложения одинаково полезны, т.е. производительны (сами понимаете, из одних и тех же кирпичей можно построить разные дома). Вот интересное и полезное сравнение производительности от того же vilianov — «Быстрее есть куда»
Итак, если вы хотите, чтобы столь же быстро видео перекодировалось и у вас, то для этого требуется:
1. Наличие в процессоре интегрированного GPU с поддержкой Quick Sync.
Как уже было сказано, CPU должен быть не старше, чем второе поколение микроархитектуры Core (Sandy Bridge).
Кроме того, его встроенная графика должна быть также второго поколения — начиная с Intel HD Graphics 2000. Это важно, так как начальные модели Sandy Bridge, продаваемые под маркой Pentium, имеют «безномерную» Intel HD Graphics, которая не поддерживает Quick Sync.
На сегодняшний день поддержка Quick Sync для мобильных и десктопных компьютеров присутстует в Intel HD Graphics 2000, 2500, 3000 и 4000, а для серверов – в моделях P3000 и P4000.
3. Поддержка видеодрайвером.
На сегодняшний день QSV поддерживается драйверами Windows 7, Windows 8 и Mac OS Mountain Lion.
Также возможно поставить соответствующие драйвера Windows 7 на Windows Server 2008 (при установленной компоненте Desktop Experience).
Свежие драйвера для Intel HD Graphics (кстати, не только для упомянутых выше систем) можно найти здесь.
Чтобы убедиться в том, что у вас актуальный драйвер, правильно понимающий ваше железо, проверьте наличие в системе библиотеки вида libmfxhw*.dll. Если она нашлась, например, libmfxhw64-s1.dll в случае 64-битной системы с процессором Sandy Bridge, все ОК.
4. Поддержка софтом.
Актуальный список рекомендованных Intel коммерческих приложений для Windows, использующих Quick Sync посредством MSDK находится здесь.
Также существует и приложение с открытым кодом – Quick Sync Decoder, использующее Quick Sync декодирование H.264, MPEG2 и VC-1 видео через фильтр ffdshow.
В OS X Mountain Lion QSV поддерживают AirPlay Mirroring и QuickTime X.
Но, во-первых, приложений для обработки видео в природе имеется на порядок больше, чем в приведенном списке. И какие-то из них вполне могут использовать QSV, не сообщая об этом из скромности. А во-вторых, заявленная поддержка QSV и его реальное задействование вашей задачей – это две большие разницы. Во многих приложениях для активации QSV надо выставить галочку в совершенно неожиданном месте или поменять какую-то неочевидную настройку, которую, возможно, стоит поискать, если QSV почему-то не работает.
Все это приводит нас к задаче – проверить, было ли реально использовано аппаратное ускорение при обработке вашего видео.
Как все сложно … а проще нельзя? Можно. Во всех ультрабуках Quick Sync Video работает изначально по определению, а используя бесплатный Intel MSDK вы можете легко самостоятельно написать приложение, задействующее QSV по умолчанию.