2

我正在用 Python 创建一个小项目,它使用 Tornado 来托管一个 RESTful API 来检索、搜索和添加音频文件。到目前为止,我可以通过

self.set_header('Content-type', mimeType)
self.write(open(fileName).read())

但是,我希望能够创建一个“广播”站。它实际上只是一个美化的播放列表,但我希望它可以在多台计算机上同步。
我计划让每个电台将其即将播放的曲目写入文件/数据库,当一首歌曲的输入流完成时,它将开始输出下一首歌曲。如果一个不存在,它只会停止流。暂停流的能力将是一个奖励,但此时我只想让流启动并运行。

我环顾四周,我只能找到 GStreamer(它有一个 Python 端口,但我无法让它在 Mac 上工作)和奇怪的不完整/旧/废弃的项目。我知道 SHOUTcast 协议,但我不太确定如何以“广播电台”风格流式传输音频。

我是 Python 编程的新手(我主要使用 PHP),所以也许我只是没有在正确的地方寻找或寻找正确的东西?

谢谢你的帮助!

4

1 回答 1

2

现在我(想我)明白你想要什么,我认为最简单的开始方法是这样的:

首先,设置一个库存的 icecast 服务器。现在,只需将其作为手动配置的独立守护程序运行即可。

接下来,设置一个 stock ices 或类似的源客户端,它只流式传输您通过服务器提供的播放列表。同样,现在,手动配置和运行它。

接下来,编写一个 Tornado 服务器,为客户端提供您想要的任何 UI、元数据和/或流地址。

您可以编写自定义客户端,也可以只提供“广播播放列表”.m3u 文件,这些文件将在用户的默认播放器中打开。(这只是一个文件,其中包含指向 icecast 流地址的 URL。在大多数媒体播放器中播放此 .m3u 将从给定的 URL 流式传输,这只是通过 HTTP 提供无限长的 MP3 文件。)

您可能希望在此基础上添加的大部分内容都将与源客户端进行交互。例如,您想要保留曲目数据库并动态生成播放列表。您可能希望最终用户能够添加或编辑数据库。等等。根据您想要获得的花哨程度,您可能只想通过修改其输入文件并将其作为子进程(subprocess.Popen)运行来驱动 ices,以便您可以轻松启动和停止实例,或者您可能想编写一个自定义源客户端到处乱抓喊蟒蛇。

如果您还需要控制服务器,您可以类似地通过编辑其配置文件并将其作为子进程运行来驱动它。

于 2013-06-04T21:46:22.453 回答