我想使用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,即先将数据输出到文件,然后再读取文件。尽管此解决方案有效,但它并不是最佳选择,它会占用磁盘空间。
也许上面的示例可以修改为将音频定向到回调。
第二个例子是:
在那个例子中,音频数据被提取到内存中,这正是我想要的。但是它也可以在窗口中播放视频,这不是我想要的。也许可以修改该示例以某种方式关闭视频?
可悲的是,这里没有完美的答案。
使用已经找到的DirectAudioPlayerTest.java
,您可以更改媒体播放器的出厂创建以传递此参数以防止打开视频窗口:
factory = new MediaPlayerFactory("--novideo");
[您将以VLC解码的速率将音频接收到内存缓冲区,因此,如果您有5分钟的视频,则将需要5分钟来提取音频-不理想。
这是vlcj唯一可以获取内存中音频数据的方法。
您发现的RipAudioTest.java
IIRC尽可能快地提取音频,这可能比正常的播放速度快很多-但在这里您不能将解码的音频直接捕获到Java应用程序中。
因此,您已经拥有的解决方案,首先将磁道撕裂到磁盘上,实际上可能是在这里使用vlcj可以实现的最佳解决方案(因为它可能比使用直接音频播放器快得多)。