Qt, Phonon и мультимедийные кодеки: как их связать?

Я занимаюсь разработкой мультиплатформенного (для Windows, Linux и Mac) приложения Phonon C++ на базе Qt и знаю, что сам Phonon - это всего лишь API, который опирается на бэкэнд для взаимодействия с установленными кодеками.

Логично предположить, что у конечного пользователя не установлены дополнительные кодеки, а только те, которые предоставляются ОС.

Таким образом, мой вопрос был бы: возможно ли связать декодер OGG (предпочтительно) или AAC с моим приложением, чтобы бэкэнд распознал его и мог воспроизводить аудиофайлы? Какие шаги в целом я должен предпринять и где искать дополнительную информацию по этому вопросу?

Само приложение не устанавливается, оно запускается непосредственно с физического носителя.

2 ответа

Решение

Как правило, вы можете поставить VLC Phonon для Windows. Стандартный бэкэнд DirectX, к сожалению, весьма ограничен.

В Linux вы можете предположить, что подходящий бэкэнд Phonon поставляется с установкой Phonon операционной системы. В настоящее время популярны два бэкэнда: GStreamer и VLC.

Звуковые библиотеки для C++

Чтобы получить правильные библиотеки для воспроизведения звука, нужно просто выяснить, какие библиотеки используются Phonon в вашей системе. Я знаю, что Phonon - довольно большой проект, и в каждой ОС есть свой набор драйверов для воспроизведения мультимедиа, использования кодека и т. Д. Я бы посоветовал взглянуть на Audacity и VLC и проверить Google.

Плагины / Библиотеки и Qt

Что касается Phonon для работы с Qt, у меня есть опыт там...

Я не проводил тонны тестирования с Phonon на всех основных ОС, но у меня было несколько разных версий Windows.

Развертывание приложения Qt очень просто, даже с плагинами и библиотеками, такими как Phonon. Но понять это в первый раз было немного больно, просто потому, что жаргон немного странный.

Мой ответ в контексте приложения для рабочего стола Windows с динамическим связыванием с библиотеками Qt, а не статическим.

Вот структура каталогов для окон и краткое объяснение того, как найти dll.

Развертывание приложения Qt

Порядок поиска в библиотеке динамических ссылок в Windows

Для Mingw в Windows в Qt SDK есть папка для его двоичных файлов, и в этой папке находятся библиотеки, которые ваше приложение должно найти во время выполнения (если вы используете динамическое связывание). Я обычно помещаю эти DLL в ту же папку, что и EXE-файл приложения, который я создаю в Qt creator, а затем сохраняю "Рабочий каталог" или каталог, из которого запускается EXE-файл, в том же каталоге.

Для дополнительных плагинов / библиотек, предназначенных для определенных типов мультимедиа, таких как форматы изображений и фононов, вам необходимо иметь конкретную структуру, в которой ваше приложение может найти ее.

Вы можете сделать несколько очень специфичных для вашего приложения и добавить их, используя функции, связанные с этим вызовом. QStringList QCoreApplication:: libraryPaths ()

В общем, имитируйте структуру каталогов, которую вы найдете в папке "plugins" MingW для дополнительных библиотек, которые вам нужны.

Например, я хотел иметь возможность правильно отображать значок в системном трее. По-видимому, вам нужен правильный плагин движка формата изображения, чтобы показать значок. (qgif4.dll, qico4.dll, а также qjpeg4.dll)

Вот где плагин был расположен на моей развивающейся машине:

"C:\QtSDK\Desktop\Qt\4.7.3\mingw\plugins\imageformats"

Здесь я размещаю его так, чтобы его можно было найти во время выполнения:

"C:\path\to\my\EXE\imageformats"

или же

".\imageformats" (relative to my working directory of my EXE)

Что является одной из наиболее раздражающих вещей при обнаружении этой информации, так это то, что плагины не работают так же, как и основные библиотеки Qt, поэтому вы не увидите, что они сломаны, пока не доберетесь до той части вашей программы, которая на самом деле пытается использовать их.

Другие вопросы по тегам