【发布时间】:2012-04-02 19:41:52
【问题描述】:
我正在为 Linux/OS X 开发一个流媒体音频播放器,它有一个奇怪的用例,它让我确信已经存在的任何东西都行不通。对于第一部分,我只想接收 MP3 数据并播放它。我目前使用 libmad 进行解码,使用 libao 进行播放。我的问题是 libao,我不相信这是我的最佳选择。
特别是,ao_play 函数是阻塞的。在传递给它的整个缓冲区播放完之前,它不会返回。这没有足够的时间在对 ao_play 的调用之间解码块,因此必须完全提前或同时进行解码。由于这是为了流式传输,我拒绝提前解码。 (可以想象,我可以发送超过一个小时的音频数据——我不想使用那么多内存。)这就留下了并发性。但是,虽然 pthreads 在 Linux 和 OS X 中是标准的,但周围的许多库都不是。我不太确定我想去并发 - 所以我正在重新考虑我对 libao 的选择。
对于我的应用程序,我能想到的用于音频播放的最佳模型是获取一个我可以选择的文件描述符,以便在它准备好写入时收到通知,然后发出非阻塞写入。 (这是由于用例的其余细节,这意味着我真的想要一个选择循环。)
是否有一个在 Linux 和 OS X 上都能以这种方式工作的库?
【问题讨论】: