Streaming 如何无缝连接MP3流?

Streaming 如何无缝连接MP3流?,streaming,mp3,lossless,Streaming,Mp3,Lossless,我正在开发一个能够播放目标广告的流媒体服务器。基本上,听众听到的是相同的音乐,但每,比如说,30分钟就会出现一块广告,每个听众都有自己的块。实现这样的流式服务器会带来各种问题,这个问题就是其中之一 服务器将以类似于Icecast的方式工作,即它将通过网络从某个流生成器读取流,并将其转发给每个侦听器。当广播广告时,服务器停止从生成器获取流,从文件中读取广告并将其插入每个侦听器的缓冲区,传输广告并继续从生成器中继流 当服务器从中继流切换到广播广告时,它必须连接两个MP3流(我们用MP3广播)。我担心

我正在开发一个能够播放目标广告的流媒体服务器。基本上,听众听到的是相同的音乐,但每,比如说,30分钟就会出现一块广告,每个听众都有自己的块。实现这样的流式服务器会带来各种问题,这个问题就是其中之一

服务器将以类似于Icecast的方式工作,即它将通过网络从某个流生成器读取流,并将其转发给每个侦听器。当广播广告时,服务器停止从生成器获取流,从文件中读取广告并将其插入每个侦听器的缓冲区,传输广告并继续从生成器中继流

当服务器从中继流切换到广播广告时,它必须连接两个MP3流(我们用MP3广播)。我担心的是,简单地将一段又一段数据附加在一起可能会产生一些可听的伪影。可以无缝地完成吗

我已经弄明白了这一点: -我可以让服务器知道MP3帧,以避免同步错误。 -我正在考虑将广告文件中的MP3帧附加到流中的MP3帧之后。 -由于ad是从正确编码的MP3文件加载的,所以我避开了字节库的问题,因为文件中的第一帧不能使用它

但我关心的是MDCT的工作方式。听众不知道我的服务器会做什么,所以他们的MP3解码器可能会产生一些瑕疵,因为不正确的MDCT数据会一个接一个地放在他们下载的流中。文件开头的零填充是否可以弥补这一点

你知道有什么库/工具(如果可能的话是开源的)可以无缝地连接两个MP3文件而无需解压缩它们吗

你能指出一些描述MP3格式的好资源吗?我在网上搜索了很多,找到了很多信息,但是我仍然错过了整个画面

也许你知道,如果我使用另一个编解码器,比如OGG/Vorbis,AAC,这会更容易些


附:这个问题不是重复的。mp3wrap和类似的工具不是我的选择。

如果您使用的是Windows,则Microsoft API可能是一种选择。您应该发现它能够以各种格式(您只需要必要的编解码器,并且接口实际上对所有人都是相同的)处理静态和流式音频和视频


不幸的是,DirectShow的设计极其复杂,学习曲线陡峭,但如果你打算在Windows上进行音频/视频操作,它所提供的功能是无与伦比的。然而,有大量关于如何使用它的示例和教程,因此最终可能不会那么痛苦。此外,如果您使用的是.NET Framework,则有一个名为的托管包装。不管你做什么,这都不是一件容易的事情,除非有什么我不知道的事情。祝你好运

我相信只需将文件连接起来,就可以合并MP3。在一些快速测试中(
cat file1.mp3 file2.mp3>merged.mp3;mplayer merged.mp3
),它似乎能按预期工作。来自web服务器的流式传输可能也能起到同样的作用


您将如何处理当前输入文件的切换?你可以简单地把这些广告当作短音轨来播放。

我遇到了一个非常类似的问题,在从各种渠道提出正确的问题后,我得出了以下结论

任何有价值的解码器都会跳过“坏”数据,直到它到达有效的帧头。这就是ID3v2向mp3数据中注入额外信息的依据。在服务器上,我会对源MP3文件进行分析,只提供有效的MP3帧。如果您提供了几个无声帧(大约7个),解码器应该有时间在下一次加载(未关联的)MP3数据之前稳定下来,避免在连接来自不同编码会话的帧时(正确地)假设的伪影

更有问题的是MP3属性(1/2通道、输出采样率等)可能在一帧到下一帧之间切换。当遇到这样的流时,一些解码器会非常不安,从而导致1/2的播放速度等等。因此,您需要确保所有源材质都编码为相同的输出属性,否则您可能会失败

您可能已经看到了这一点,但如果没有:


我不明白您为什么要连接这些文件。为什么不使用某种播放列表系统,只需更改发送的文件即可。我认为,从长远来看,这将允许更大的灵活性,并且最终不会产生大的MP3文件。

您应该能够连接CBR和VBR格式的MP3文件。 MP3文件没有主标题(忽略ID3和Xing)。音频数据存储为块,其中每个块都包含自己的头。报头包含解码该块中音频数据所需的信息(比特率、采样频率、立体声等)

这就是为什么很难确定mp3文件的持续时间的原因之一

另一种方法是,如果将CBR MP3文件与VBR文件连接起来,最终结果与一个长VBR文件相同,第一部分音频以恒定比特率传输


问题是,一些MP3播放器可能要求严格,希望VBR MP3文件有一个Xing头。然而,这从来不是MP3格式的规范,但现在被认为是正确的。

是的,这是我想要的方式,但你确定它可以工作,并且在任何情况下都不会产生声音故障吗?很可能这不起作用。。。有多种mp3格式。。。您可以使用恒定帧大小的恒定比特率mp3(每个样本有这么多比特),也可以使用波动的可变比特率mp3。。。它们不兼容。同样,简单的连接将使