0

我正在实施一个广播电台客户端。

我的参考客户端将“Initial-Burst”HTTP 请求标头发送到 960000。我不知道我的参考客户端的初始缓冲区大小,它是一个 iOS 应用程序,我没有源代码。我所知道的是,只要用户选择一个频道,它就会立即开始播放。

当我将初始缓冲区大小提高到约 100 KB 以上时,我的收音机不再立即播放,在某些流上它会等待来自服务器的数据,这会持续几秒钟。

服务器说它正在运行 Icecast 2.3.3-kh3 和 Linux v1.9.8。Icecast 是一个开源软件,不用说它没有文档。

哪些单位有 Initial-Burst 标头?字节,位,滴答声等?

是否有一些推荐值/最佳实践?

4

1 回答 1

1

我怀疑正在发生的事情是您请求的数据比服务器缓冲的数据多。如果您要请求 1MB,但缓冲区中只有 512KB,那么您将接收来自编码器的数据,直到 1MB 客户端缓冲区填满。您可以使用数据包嗅探器(例如 Wireshark)来确认这一点。

如果您构建自己的客户端,您应该能够将播放缓冲区大小与标头分开。完成此操作后,您可以将Initial-Burst标题设置为任意大小。

另一种可能性(我怀疑不太可能)是服务器正在创建服务器端缓冲区并在发送之前将其填充到请求的大小。这对我来说没有多大意义,但同样,您可以使用数据包嗅探器确认行为。

我所做的是在服务器端有一个固定的缓冲区大小,并忽略任何与缓冲区控制相关的标头。这使我能够尽快刷新大缓冲区,而无需依赖客户端行为。不过,我使用自定义代码执行此操作...我认为这在 Icecast 中不可配置,但我可能是错的。

于 2013-01-07T03:33:01.483 回答