Введение, или как все начиналось.
Когда я пришел подавать заявление на работу, мне показали модель того, что мне придется делать.
Это был видеоплеер с довольно приятным интерфейсом.
Предполагалось, что мой плеер будет использовать в качестве видеодвижка плеер VLC (вернее его библиотеку LibVLC).
Дело в том, что плеер, который все привыкли видеть на своем рабочем столе — VLC — это по сути всего лишь интерфейс библиотеки LibVLC, позволяющий загружать и декодировать видеофайлы с локального диска, мультикаст-потоком.
С языком разработки мы определились сразу — C++.
Что касается среды разработки, то у меня, как и у моего начальства, были свои предложения (Visual Studio IDE) — в итоге они сошлись на Qt IDE, т.к.
в SDK есть много классов для ускорения разработки приложения пользовательского интерфейса.
Суть проблемы
Необходимо было нарисовать полупрозрачный интерфейс поверх видеоизображения.Хммм.
Я думал, и думал крепко.
Проблема была весьма интересной.
Посоветовавшись с Google, я нашел несколько вариантов:
Решение 1
Поскольку сам плеер состоит из множества плагинов, сделанных как самими разработчиками, так и любителями и недоброжелателями, возникла идея сделать свой плагин наподобие наложения изображений.Однако, изучив исходники таких плагинов, я пришёл к выводу, что встроить такую систему с анимацией и отслеживанием кликов мыши, клавиш и т.п.
будет проблематично.
Решение 2
Решением было сохранить прозрачное окно с интерфейсом поверх видеопотока.Второе окно, естественно, должно быть синхронизировано с координатами и состоянием первого окна.
Но это было хорошо только в теории и, к сожалению, так и осталось — мне не удалось это реализовать, так как я так и не понял, как связать абсолютно прозрачное окно с полупрозрачными элементами.
И потому что.
Решение 3
Очень часто в Интернете при описании движков на базе VLC я встречал описание плагина VMem. Поэтому я решил, что это мое последнее средство – и был прав.
Эврика! Или на сцену выходит VMem.
Итак, модуль VMem, чем он так хорош, какие функции выполняет? Модуль предназначен для вывода изображений в ячейку памяти вместо непосредственного отображения их на экране.Причём раздел памяти должен быть создан вызывающим приложением.
И самое главное, изображение в памяти будет сформировано только после того, как будут применены все фильтры и плагины для обработки видеоизображения (например, фильтр деинтерлейсинга, отображения субтитров и т.п.
).
LibVLC API
Несколько слов об API: хотя библиотека написана на PureC, есть порты на другие языки (Python, Java, .NET, Pascal, Objective C) есть даже обертки для C++, Qt. в общем, за исключением того, что BrainFuck не включен в приведенный выше список.
На официальном сайте есть пара уроков, как собрать видеоплеер на базе LibVLC на коленке.
Заключение
Вот и закончилась первая часть статьи.В ней я описал основные трудности, с которыми мне пришлось столкнуться, когда я впервые начал разработку плеера.
В следующей части статьи хотелось бы поговорить о том, как организовать отображение изображений на экране и какой графический API (GAPI) лучше всего для этого использовать.
Список чтения и посещения:
Теги: #C++ #Qt #DirectX #VLC #Разработка веб-сайтов-
Как Загрузить Norton 360 Premier Edition?
19 Oct, 24 -
Речная Гидравлика
19 Oct, 24 -
Av Против Fakeav
19 Oct, 24 -
Калькулятор Егэ
19 Oct, 24 -
Динамические Роли И Права
19 Oct, 24