3

我正在开发一个基于多平台(Windows、Linux 和 Mac)Qt 的 Phonon C++ 应用程序,并且我知道 Phonon 本身只是 API,它依赖于后端与已安装的编解码器进行交互。

从逻辑上讲,我应该假设最终用户没有安装额外的编解码器,只有操作系统提供的那些。

所以我的问题是,是否可以将 OGG(最好)或 AAC 解码器与我的应用程序捆绑在一起,以便后端能够识别它并能够播放音频文件?我一般应该采取哪些步骤以及在哪里寻找更多信息?

应用程序本身不可安装,它直接从物理媒体运行。

4

2 回答 2

1

C++ 声音库

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

插件/库和 Qt

至于让 Phonon 与 Qt 一起工作,我有经验......

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

Qt 应用程序的部署非常简单,即使使用像 Phonon 这样的插件和库也是如此。但是第一次弄出来有点痛苦,只是因为行话有点奇怪。

我的答案是在具有到 Qt 库的动态链接的 Windows 桌面应用程序的上下文中,而不是静态的。

这是 windows 的目录结构和如何找到 dll 的简短说明。

部署 Qt 应用程序

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

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

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

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

一般来说,模仿您在 MingW“插件”文件夹中找到的目录结构,以获得您需要的其他 dll。

例如,我希望能够正确显示系统托盘图标。显然您需要正确的图像格式引擎插件来显示图标。( 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)

What is one of the more annoying things about discovering this information, is that the plugins don't fail in the same way as the main Qt Libraries, so you don't see it broken until you get to the part of your program that is actually attempting to use them.

于 2012-05-15T20:30:34.383 回答
0

Generally, you could supply the VLC Phonon backend for Windows. The default DirectX backend is unfortunately quite limited.

On Linux, you can assume that a suitable Phonon backend comes with the OS's Phonon installation. The two backends currently popular are GStreamer and VLC.

于 2012-05-15T20:49:30.690 回答