使用vlcj提取音频数据到内存

Extract audio data to memory using 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,即先将数据输出到文件,然后再读取文件。虽然此解决方案有效,但它不是最优的并且需要磁盘 space.

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

第二个例子是:

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

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

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

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

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

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

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

你找到的RipAudioTest.java,IIRC,以最快的速度提取音频,这可能比正常播放速度快很多 - 但在这里你不能将解码后的音频直接抓取到你的Java申请。

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