在java18spring-boot应用程序中插入mp3音频文件



在我的应用程序中,我从服务器获取多个音频(mp3(文件,并将它们作为输入流或字节数组获取。我将它们转换为一个AudioInputStreams列表,然后将数据连接到一个大的ByteArrayInputStream中。然后,我再次将其转换为AudioInputStream,并通过REST端点提供其中的数据(byte[](。我的前端是一个react应用程序,用户可以在其中收听并下载它

不幸的是,这个过程似乎破坏了mp3标头,并且长度错误。我的前端播放器确实会将文件播放到最后,所以通常情况下,这个过程甚至是有效的,但如果我将其作为文件下载,其长度总是与我在后端连接的第一个文件的长度相同,有些音频播放器甚至不会播放到最后。

问题是:如何在java中正确地连接两个mp3字节数组?

ok,我设法用Jaffree解决了这个任务,它与ffmpeg-cli包装器非常相似,后者是ffmpeg的java包装器。这可能不是最好的性能,因为启动了一个外部程序,但如果符合我的需求。相关代码为:

try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) {
for (InputStream inputStream : inputStreams) {
FFmpeg.atPath()
.addInput(PipeInput.pumpFrom(inputStream))
.addOutput(
PipeOutput.pumpTo(byteArrayOutputStream)
.setFormat("mp3")
)
.execute();
}
}

其中inputStreams是有效的mp3数据inputStreams

最新更新