首页 > 解决方案 > 使用 vlcj 将音频数据提取到内存

问题描述

我想使用 vlcj(https://github.com/caprica/vlcj,版本 4.2.0)将音频数据提取到内存中。我不想同时播放视频,只要在性能允许的范围内尽可能快地提取音频数据。

现在我正在使用基于此的解决方法:https ://github.com/caprica/vlcj/blob/master/src/test/java/uk/co/caprica/vlcj/test/rip/RipAudioTest.java ,即先将数据输出到文件,然后再读取文件。虽然此解决方案有效,但它不是最佳的,并且会占用磁盘空间。

也许可以修改上面的示例以将音频定向到回调。

第二个例子是:

https://github.com/caprica/vlcj/blob/master/src/test/java/uk/co/caprica/vlcj/test/directaudio/DirectAudioPlayerTest.java

在那个例子中,音频数据被提取到内存中,这正是我想要的。但它也在一个窗口中播放视频,这不是我想要的。也许可以修改该示例以以某种方式关闭视频,并使其尽可能快地运行?

标签: javalibvlcvlcj

解决方案


遗憾的是,这里没有完美的答案。

使用DirectAudioPlayerTest.java您已经找到的,您可以更改媒体播放器工厂创建以传递此参数以防止打开视频窗口:

factory = new MediaPlayerFactory("--novideo");

您将以 VLC 解码的速率将音频接收到内存缓冲区中,因此如果您有 5 分钟的视频,则需要 5 分钟来提取音频 - 这并不理想。

这是使用 vlcj 获取内存中音频数据的唯一方法。

您找到的RipAudioTest.javaIIRC 会尽快提取音频,这可能比正常播放速度快很多 - 但在这里您无法将解码后的音频直接抓取到您的 Java 应用程序中。

因此,您已经拥有的解决方案,首先将轨道翻录到磁盘,实际上可能是您可以在此处使用 vlcj 实现的最佳解决方案(因为它可能比使用直接音频播放器快得多)。


推荐阅读