我正在撰写Icecast
来源。源此处理MP3
。应用程序可以解析MP3
个文件以检索单个框架和其他metadata
。应用程序正确地将metadata
发送到Icecast
服务器。
当应用程序尝试将MP3
frames
发送到Icecast
时,会出现此问题。当我通过媒体客户端(frames
)收听时,它会将VLC
发送得过快,导致音频中出现跳过。
我已经读过Icecast
没有处理音频流的时间,这是源的工作。我可以确定音频文件的持续时间以及有关每个帧的所有信息。
如何执行正确的计时?我应该在发送单个帧,批量帧之间等待吗?时间实际上由什么组成?
我尝试过的一种方法是让应用程序在发送批量帧之间等待,但这并不能解决时间问题。
答案 0 :(得分:1)
您必须以流的采样率发送音频数据。您必须使用的时间是播放速率的时间。如果您希望源流为44.1kHz,则必须以44.1kHz发送该数据。
MP3帧尺寸固定为1,152个样本。这意味着如果您要以44.1kHz发送流,则必须每秒向Icecast发送38.28125帧。我建议你的源端有一个大缓冲区,这样你就可以以任何合理的速率解码,并有另一个线程来保持发送数据的时间。