【发布时间】:2023-03-23 21:05:02
【问题描述】:
我有一个需要播放 mp3 和 aac 文件的 java 项目。我创建了一个 MediaPlayer 类,它使用通用代码通过 Java Sound API 播放声音文件。我的 CLASSPATH 中有两个注册为 Java Sound SPI 的 audo 解码库。 (MP3SPI 和 JAAD)。
问题是 MP3SPI 似乎优先于 JAAD。这意味着当我播放 AAC 文件时,MP3SPI 会引发异常并且(显然)不会播放我的歌曲。当我从 CLASSPATH 中删除 MP3SPI 时,会调用正确的 SPI (JAAD),并且我的 AAC 文件可以正常播放。
由于这个问题可能更通用,我希望有人有解决这个问题的经验。
如何同时支持 MP3 和 AAC 解码/播放?
【问题讨论】:
-
AAC 文件的文件扩展名是什么?问题是否可以表述为“如何同时支持 MP3 和 AAC 编码?”?如果没有,请edit(我的编辑)回答您的问题。
-
我认为 JDK 7 中提供了一个修复程序,可以在运行时选择/取消选择提供程序。 bugs.sun.com/bugdatabase/view_bug.do?bug_id=4666881
-
Usman,此修复尚未实现(计划用于 Java 8)。还有其他想法吗?编辑:在我的 Linux 机器上,冲突似乎不存在,这意味着 jaad 和 mp3spi 很好地共存......我会继续调查。谢谢。
-
正确播放的文件类型取决于 jar 文件在 CLASSPATH 中的位置。 Windows:仅当 JAAD 位于类路径的首位时才播放 AAC,仅当 mp3spi 位于类路径的首位时才播放 mp3。这是有道理的。 Linux:无论顺序如何都可以工作。 Linux JVM > Windows JVM?