Russian Qt Forum

Qt => Дополнительные компоненты => Тема начата: kibsoft от Апрель 24, 2013, 22:02



Название: Qt Media Encoding Library - библиотека кодирования аудио и видео
Отправлено: kibsoft от Апрель 24, 2013, 22:02
Привет всем!

Последнее время работал над кодированием видео с использованием FFMPEG, решил оформить это все в виде библиотеки, но в более расширенном виде.

Qt Media Encoding Library (QtMEL) - библиотека, позволяющая кодировать видео и аудио потоки.

Возможности:
  • кодирование видео с постоянной и переменной частотой кадров
  • кодирование аудио
  • граббинг экрана с переменной частотой кадров
  • граббинг веб-камер с переменной частотой кадров
  • граббинг аудио с устройств ввода

Иерарахия классов:
(https://dl.dropboxusercontent.com/u/77719957/QtMEL_Class_Hierarchy.JPG)

Платформа: пока только Windows
Лиценция: LGPL
Исходный код: https://github.com/kibsoft/QtMEL
Все, для использования в Вашем проекте: скачать (http://goo.gl/1n6yH)
Бинарники примеров: скачать (http://goo.gl/sOMgX)
FFmpeg(используется для сборки QtMEL): скачать (http://goo.gl/88w1C)
Документация(CHM): https://dl.dropboxusercontent.com/u/77719957/QtMEL_doc.chm

Процесс сборки:
1) Скачиваем исходники - https://github.com/kibsoft/QtMEL/archive/master.zip
2) Скачиваем FFmpeg по ссылке выше
3) Задаем значения переменных FFMPEG_LIBRARY_PATH и FFMPEG_INCLUDE_PATH в Qt Creator, либо в системе.
4) Собираем
В итоге получаем 2 .dll файла(дебаг и релиз) в папке lib(в каталоге с исходниками).

Что планируется к релизу:
  • Поддержка OC Linux (часть функционала уже работает)
  • Попробовать реализовать граббинг экрана с псевдо-постоянной частотой кадров
  • Расширенная документация(в т.ч. туториалы)

Тестирование проводилось на версии FFmpeg git-14d94a1 годичной давности. Работа с последними версиями не гарантируется.
Насчет багов(если кто-то будет пользоваться :) ) и предложений писать в IssueTracker  (https://github.com/kibsoft/QtMEL/issues)на GitHub, либо сюда.

P.S. Т.к. я занимаюсь разработкой QtMEL в свободное время, поэтому дата релиза не запланирована, но надеюсь это будет в скором времени :)
Помощь в разработке посредством Pull Request'ов приветствуется!


Название: Re: Qt Media Encoding Library - библиотека для кодирования аудио и видео
Отправлено: kibsoft от Июнь 19, 2013, 22:10
Итак, прошло уже 2 месяца с момента когда я написал первый пост и вот что было сделано за этот период:
  • Добавлена возможность захвата изображения с веб-камер (переменная частота кадров)
  • AudioGrabber был переведен на использование библиотеки RtAudio (из-за глюков в QtMultimedia)
  • Добавлен новый класс - Recorder, который является вашим помощником при записи видео/аудио
  • Исправлен глюк с рассинхронизацией звука и видео. Используя Recorder вам не нужно заботиться о синхронизации видео/аудио потоков
  • Добавлена возможность переключения источников захвата изображения "на лету" во время записи видео - т.е. экран <-> камера
  • Добавлен новый пример - CameraExample, который позволяет записывать видео с веб-камеры
  • Исправлены найденные баги

В первом посте актуализировал все ссылки и добавил пункт "Все, для использования в Вашем проекте" - в архиве находится скомпилированный QtMEL с зависимостями + папка include. Для подключения в свой проект нужно добавить в .pro следующее:
Код:
#add QtMEL library
INCLUDEPATH += путь_до_include
LIBS += -Lпуть_к_lib

CONFIG(debug, debug|release) {
    LIBS += -lqtmeld1
} else {
    LIBS += -lqtmel1
}

Вот пример include'ов для вашего проекте:
Код:
#include <AudioGrabber>
#include <CameraGrabber>
#include <ScreenGrabber>
#include <Recorder>
и так далее (т.е. иклуды по названию классов)

P.S. Заметил такой прикол - CameraExample требует mediaservice плагины, так вот, если они уже есть в PATH и лежат рядом с exe, то по какой-то причине они подгружаются дважды (проверено ProcessExplorer) и в связи с этим в списке камер появляются дубликаты. Кто-нибудь знает с чем это связано и как исправить?


Название: Re: Qt Media Encoding Library - библиотека для кодирования аудио и видео
Отправлено: kibsoft от Июнь 20, 2013, 08:52
Есть ли среди нас гуру по кодированию видео/аудио? :)
Есть идея сделать набор пресетов для разных кодеков, чтобы пользователю не приходилось изобретать велосипеды.
В примерах я использую один из таких пресетов:
Код:
//x264 loseless fast preset
    VideoCodecSettings settings;
    settings.setCoderType(EncoderGlobal::Vlc);
    settings.setFlags(EncoderGlobal::LoopFilter);
    settings.setMotionEstimationComparison(1);
    settings.setPartitions(EncoderGlobal::I4x4 | EncoderGlobal::P8x8);
    settings.setMotionEstimationMethod(EncoderGlobal::Hex);
    settings.setSubpixelMotionEstimationQuality(3);
    settings.setMotionEstimationRange(16);
    settings.setGopSize(250);
    settings.setMinimumKeyframeInterval(25);
    settings.setSceneChangeThreshold(40);
    settings.setIQuantFactor(0.71f);
    settings.setBFrameStrategy(1);
    settings.setQuantizerCurveCompressionFactor(0.6f);
    settings.setMinimumQuantizer(0);
    settings.setMaximumQuantizer(69);
    settings.setMaximumQuantizerDifference(4);
    settings.setDirectMvPredictionMode(EncoderGlobal::SpatialMode);
    settings.setFlags2(EncoderGlobal::FastPSkip);
    settings.setConstantQuantizerMode(0);
    settings.setPFramePredictionAnalysisMethod(EncoderGlobal::NoWpm);

Найден был здесь - https://code.google.com/p/bencos/source/browse/trunk/out/presets/?r=156
Хотелось бы пресеты не только для H264.


Название: Re: Qt Media Encoding Library - библиотека кодирования аудио и видео
Отправлено: kibsoft от Июнь 27, 2013, 21:22
Появилась версия 1.0 Alpha2!

Изменения:
  • Поддержка Linux (тестирование производилось на Ubuntu 12.04)
  • Поддержка Qt5
  • Исправлены краши, небольшие баги и т.д.

Новые сборки, готовые для использования:
  • Qt 5 RC1 MinGW 4.8 - Скачать (http://goo.gl/NbxFy)
  • Qt 5 RC1 MSVC 2010 - Скачать (http://goo.gl/AGJlg)
Для использования необходимо распаковать архив и добавить в .pro файл пути к папке include и к папке с библиотеками.

  • FFmpeg for QtMEL(deb package) - Скачать (http://goo.gl/9tF1M)
  • OpenCV for QtMEL(deb package) - Скачать (http://goo.gl/7BjS0)
  • QtMEL(deb package) - Скачать (http://goo.gl/h3qu2)

Нужно установить пакеты поочередно.

В deb пакеты включены не все зависимости нужные для работы, поэтому работа на система отличных от Ubuntu 12.04 не гарантируется. В этом случае вам нужно установить нужные пакеты вручную.

Это временный косяк, в дальнейшем будет исправлен(пока пакеты созданы для тестирования).

Если есть какие-то предложения - буду рад выслушать :)