gpt4 book ai didi

javascript - 为流媒体服务器正确拆分 MPEG-1 Layer 3

转载 作者:行者123 更新时间:2023-11-30 13:48:52 24 4
gpt4 key购买 nike

我正在开发音乐流媒体服务器。现在我想将 MP3 文件从服务器分块发送到客户端(通过 http-range 请求/响应)。我的客户端成功解码响应数据并逐 block 播放音乐 block (固定字节大小),但在每个 block 之间有一个断断续续的声音(短但明显)。

MP3文件的编码版本是MPEG-1和layer 3。我看了MP3格式at this article ,我注意到第 3 层的帧不是独立的(称为位/字节库),他们特别说:

In the worst case, 9 input frames may be needed before being able to decode one single frame

我使用 http-range 请求的原因是因为在检查了 Spotify 网络传输(Chrome 开发工具)后,我复制了他们请求部分内容的技术。他们要求的字节长度大约是166000,但不是固定的(有时是166287、16682……字节)

问题:

Spotify 是否将他们的文件分成近似(非固定)大小的 block ?

如果是这样,我如何正确拆分此 MPEG-1 第 3 层文件以进行流式传输?

最佳答案

Right now, i'm using javascript on the client-side to playback the audio. I use "AudioContext" class and "decodeAudioData" method to decode each chunk

正如@szatmary 指出的那样,这就是问题所在。您将这些 block 视为完全独立的,但事实并非如此。这会导致出现故障。

您需要做的是一边解码一边将数据添加到您正在解码的缓冲区的末尾。 MediaSource Extensions是执行此操作的规定方法。 MSE 让您可以控制获取数据的方式,因此如果您想使用范围请求获取数据,您可以。

不过我认为更好的建议是让浏览器处理它。只需设置 Audio 元素的 src 属性并让它播放。浏览器足够聪明,可以发出自己的范围请求,如果需要,还会回退到常规请求。这允许浏览器也处理流控制。您不需要做任何额外的工作,最终会得到更优的解决方案。

关于javascript - 为流媒体服务器正确拆分 MPEG-1 Layer 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58706815/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com