如何在适当的时间发送音频数据到Icecast?

时间:2014-06-05 20:28:58

标签: java audio mp3 shoutcast icecast

我正在撰写Icecast来源。源此处理MP3。应用程序可以解析MP3个文件以检索单个框架和其他metadata。应用程序正确地将metadata发送到Icecast服务器。

当应用程序尝试将MP3 frames发送到Icecast时,会出现此问题。当我通过媒体客户端(frames)收听时,它会将VLC发送得过快,导致音频中出现跳过

我已经读过Icecast没有处理音频流的时间,这是源的工作。我可以确定音频文件的持续时间以及有关每个帧的所有信息。

如何执行正确的计时?我应该在发送单个帧,批量帧之间等待吗?时间实际上由什么组成?

我尝试过的一种方法是让应用程序在发送批量帧之间等待,但这并不能解决时间问题。

1 个答案:

答案 0 :(得分:1)

您必须以流的采样率发送音频数据。您必须使用的时间是播放速率的时间。如果您希望源流为44.1kHz,则必须以44.1kHz发送该数据。

MP3帧尺寸固定为1,152个样本。这意味着如果您要以44.1kHz发送流,则必须每秒向Icecast发送38.28125帧。我建议你的源端有一个大缓冲区,这样你就可以以任何合理的速率解码,并有另一个线程来保持发送数据的时间。