我正在开发一个基于Qt的多平台(Windows,Linux和Mac(Phonon C++应用程序,并且意识到Phonon本身只是API,它依赖于后端与已安装的编解码器进行交互。
从逻辑上讲,我应该假设最终用户没有安装额外的编解码器,只有操作系统提供的编解码器。
所以我的问题是,是否可以将 OGG(最好(或 AAC 解码器与我的应用程序捆绑在一起,以便后端能够识别它并能够播放音频文件?我通常应该采取哪些步骤,在哪里查找有关此的更多信息?
应用程序本身不可安装,它直接从物理介质运行。
Sound Libraries for C++
至于找到合适的库来播放声音,应该只是找出 Phonon 在您的系统上使用了哪些库。 我知道Phonon是一个非常大的项目,每个操作系统都有一组不同的驱动程序来播放媒体和使用编解码器等。 我建议看看Audacity和VLC并检查谷歌。
插件/库和Qt
至于让Phonon与Qt合作,我在那里有经验......
我还没有在每个主要操作系统上使用Phonon进行大量测试,但我在几个不同版本的Windows上都有。
Qt应用程序的部署非常简单,即使使用像Phonon这样的插件和库也是如此。 但是第一次弄清楚它有点痛苦,只是因为行话有点奇怪。
我的答案是在具有动态链接到Qt库的Windows桌面应用程序的上下文中,而不是静态的。
下面是窗口的目录结构以及如何找到 dll 的简短说明。
部署Qt应用程序
窗口中的动态链接库搜索顺序
对于Qt SDK中的Windows上的Mingw,有一个用于其二进制文件的文件夹,在该文件夹中有您的应用程序需要在运行时能够找到的dll(如果您正在执行动态链接(。 我通常将这些DLL放在与我在Qt creator中构建的应用程序EXE相同的文件夹中,然后将"工作目录"或运行EXE的目录也保留为同一目录。
对于用于特定媒体类型(如图像格式和声子(的其他插件/库,您需要具有应用程序可以找到它的特定结构。
您可以为您的应用程序制作一些非常具体的函数,并使用与此调用相关的函数添加它们。QStringList QCoreApplication::libraryPaths((
通常模仿您在 MingW"插件"文件夹中找到的目录结构,以获取所需的其他 dll。
例如,我希望能够正确显示系统托盘图标。 显然,您需要正确的图像格式引擎插件来显示图标。(qgif4.dll
、qico4.dll
和qjpeg4.dll
(
这是插件位于我的开发机器上:
"C:QtSDKDesktopQt4.7.3mingwpluginsimageformats"
这是我放置它的位置,以便可以在运行时找到它:
"C:pathtomyEXEimageformats"
或
".imageformats" (relative to my working directory of my EXE)
发现这些信息更烦人的事情之一是,插件不会像主要的Qt库那样失败,所以直到你到达程序实际尝试使用它们的部分,你才会看到它被破坏。
通常,您可以为Windows提供VLC Phonon后端。不幸的是,默认的 DirectX 后端非常有限。
在Linux上,你可以假设操作系统的Phonon安装附带一个合适的Phonon后端。目前流行的两个后端是GStreamer和VLC。