java - 使用 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 ,即先将数据输出到文件,然后再读取文件。虽然此解决方案有效,但它不是最佳的,并且会占用磁盘空间。
也许可以修改上面的示例以将音频定向到回调。
第二个例子是:
在那个例子中,音频数据被提取到内存中,这正是我想要的。但它也在一个窗口中播放视频,这不是我想要的。也许可以修改该示例以以某种方式关闭视频,并使其尽可能快地运行?
解决方案
遗憾的是,这里没有完美的答案。
使用DirectAudioPlayerTest.java
您已经找到的,您可以更改媒体播放器工厂创建以传递此参数以防止打开视频窗口:
factory = new MediaPlayerFactory("--novideo");
您将以 VLC 解码的速率将音频接收到内存缓冲区中,因此如果您有 5 分钟的视频,则需要 5 分钟来提取音频 - 这并不理想。
这是使用 vlcj 获取内存中音频数据的唯一方法。
您找到的RipAudioTest.java
IIRC 会尽快提取音频,这可能比正常播放速度快很多 - 但在这里您无法将解码后的音频直接抓取到您的 Java 应用程序中。
因此,您已经拥有的解决方案,首先将轨道翻录到磁盘,实际上可能是您可以在此处使用 vlcj 实现的最佳解决方案(因为它可能比使用直接音频播放器快得多)。
推荐阅读
- angular - 如何根据当前用户的登录名更改数据
- wcf - Microsoft WCF Web 服务参考提供程序生成 Web 服务。返回空数组
- python - 添加更多关于悬停的数据
- c - 仅在 for 循环内部的 C 指针算术分段错误
- ios - iOS12如何设置NFC后台读取关联域
- excel - 在电源查询编辑器的存储过程中使用单元格中的值作为参数
- symfony - Symfony 2:如何防止多个用户同时编辑同一个表单?
- .net - 无法加载 DLL 'Microsoft.Quantum.Simulator.Runtime.dll' (CentOS 7)
- javascript - 在 redux-saga-beginner-tutorial 中找不到模块“babelify”
- spring-mvc - 春季启动错误org.springframework.beans.factory.BeanCreationException数据源