Qt、Phonon和多媒体编解码器:如何捆绑它们?

3
我正在开发一款跨平台应用(支持Windows,Linux和Mac),基于Qt Phonon C++框架。我了解到Phonon仅是API,需要后端来与已安装的编解码器进行交互。
从逻辑上讲,我应该假设最终用户没有安装额外的编解码器,只有操作系统提供的编解码器。
因此我的问题是,是否可以将OGG(最好)或AAC解码器捆绑到我的应用程序中,以便后端能够识别并播放音频文件?我应该采取哪些一般步骤,并在哪里寻找更多信息?
该应用程序本身不可安装,它直接从物理介质上运行。
2个回答

1

C++声音库

关于获取正确的播放声音库,只需要找出您系统上 Phonon 所使用的库即可。我知道 Phonon 是一个相当大的项目,每个操作系统都有不同的媒体播放驱动程序和编解码器等。我建议查看 AudacityVLC 并检查 Google

插件/库和 Qt

关于让 Phonon 与 Qt 协同工作,我有经验...

我没有在每个主要操作系统上对 Phonon 进行大量测试,但我在几个不同版本的 Windows 上进行了测试。

Qt 应用程序的部署非常简单,即使涉及像 Phonon 这样的插件和库。但是第一次弄清楚可能会有点痛苦,因为术语有点奇怪。

我的回答是针对Windows桌面应用程序与Qt库的动态链接上下文,而不是静态链接。

以下是Windows的目录结构以及如何查找dll的简短说明。

部署Qt应用程序

Windows中的动态链接库搜索顺序

对于Qt SDK中的Windows Mingw,有一个二进制文件夹,在该文件夹中有您的应用程序在运行时需要找到的dll(如果您正在进行动态链接)。 我通常将这些DLL放在我在Qt Creator中构建的应用程序EXE相同的文件夹中,然后保持“工作目录”或从中运行EXE的目录也是相同的目录。

对于特定媒体类型的附加插件/库,例如图像格式和phonon,您需要具有应用程序可以在其中找到它的特定结构。

您可以为您的应用程序创建一些非常具体的插件,并使用与此调用相关的函数添加它们。 QStringList QCoreApplication::libraryPaths()

通常,模仿您在MingW“插件”文件夹中找到的目录结构,以获取所需的其他dll。

例如,我想要能够正确显示系统托盘图标。 显然,您需要正确的图像格式引擎插件来显示图标。(qgif4.dllqico4.dllqjpeg4.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库不会以相同的方式失败,因此直到您实际尝试使用它们的程序部分时才会发现问题。

很不幸,OSX对于phonon的支持要复杂得多。 - Jonathan

0
通常情况下,您可以为Windows提供VLC Phonon后端。不幸的是,默认的DirectX后端相当有限。
在Linux上,您可以假定适当的Phonon后端随操作系统的Phonon安装一起提供。目前流行的两个后端是GStreamer和VLC

不幸的是,在OSX上,macports目前不支持phonon-backend-vlcport search phonon只显示gstreamer - Jonathan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接