我正在开发一个能够播放有针对性的广告的流媒体服务器。基本上听众会听到相同的音乐,但是每隔 30 分钟就会出现一个广告块,每个听众都有自己的广告块。实现这样的流媒体服务器会带来各种问题,这个问题就是其中之一。
服务器将以类似于 Icecast 的方式工作,即它将通过网络从某个流生成器读取流并将其中继到每个侦听器。当广播广告的时候,服务器停止从生成器获取流,从文件中读取广告并将它们插入每个侦听器的缓冲区,传输它们并继续从生成器中继流。
当服务器从中继流切换到广播广告时,它必须连接两个 MP3 流(我们在 MP3 中广播)。我担心的是,简单地将一个数据一个接一个地附加可能会产生一些听得见的伪影。可以无缝完成吗?
我已经想通了: - 我可以让服务器知道 MP3 帧以避免同步错误。- 我正在考虑在流中的 MP3 帧之后附加广告文件中的 MP3 帧。- 由于广告是从正确编码的 MP3 文件加载的,我绕过了字节库的问题,因为文件的第一帧不能使用它。
但我担心的是 MDCT 的工作方式。听众不知道我的服务器会做什么,因此他们的 MP3 解码器可能会产生一些伪影,因为不正确的 MDCT 数据将一个接一个地放置在他们下载的流中。带有广告的文件开头的零填充会对此进行补偿吗?
您是否知道任何可以无缝连接两个 MP3 文件而无需解压缩的库/工具(如果可能的话是开源的)?
你能指出任何描述 MP3 格式的好资源吗?我在互联网上搜索了很多,找到了很多信息,但我仍然错过了整体情况。
也许您知道如果我使用其他编解码器(如 OGG/Vorbis、AAC)会更容易?
PS。这个问题与合并 mp3 文件的最佳方法是什么?. mp3wrap 和类似的工具对我来说不是一个选择。