我在Python中创建了一个小项目,它使用Tornado来托管RESTful API,用于检索,搜索和添加音频文件。到目前为止,我可以通过
输出音频文件self.set_header('Content-type', mimeType)
self.write(open(fileName).read())
但是,我希望能够创建各种“无线电”电台。它实际上只是一个美化的播放列表,但我希望它可以在多台计算机上同步 我计划简单地让每个电台将其即将播放的曲目写入文件/数据库,当一首歌曲的输入流完成时,它将开始输出下一首曲目。如果一个不存在,它只是停止流。暂停流的能力将是一个奖励,但在这个时间点,我只想让一个流启动并运行。
我环顾四周,我所能找到的只是GStreamer(它有一个Python端口,但我不能让它在Mac上运行)和奇怪的不完整/旧/废弃项目。我知道SHOUTcast协议,但我不太确定如何以“无线电台”的方式传输音频。
我是Python编程的新手(我主要使用PHP),所以也许我只是在寻找合适的地方或寻找合适的东西?
感谢您的帮助!
答案 0 :(得分:2)
既然我(想想我)明白你想要什么,我认为最简单的入门方式就是这样:
首先,建立一个股票icecast服务器。现在,只需将其作为手动配置的独立守护程序运行。
接下来,设置一个股票冰或类似的源客户端,它只传输您通过服务器提供的播放列表。现在,再次手动配置和运行它。
接下来,编写一个Tornado服务器,为客户提供所需的UI,元数据和/或流地址。
您可以编写自定义客户端,也可以只提供将在用户默认播放器中打开的“电台播放列表”.m3u文件。 (这只是一个带有冰球流地址URL的文件。在大多数媒体播放器中播放.m3u将从给定的URL流式传输,这只是通过HTTP提供无限长的MP3文件。)
您可能希望在此基础上添加大部分内容,您将与源客户端进行交互。例如,您希望保留曲目数据库并动态生成播放列表。您可能希望最终用户能够添加或编辑数据库。等等。根据您想要获得的花哨程度,您可能只想通过修改其输入文件并将其作为子进程(subprocess.Popen
)运行来驱动冰,这样您就可以轻松地启动和停止实例,或者您可能想要编写一个自定义源客户端从头开始围绕shout-python。
如果您还需要控制服务器,可以通过编辑配置文件并将其作为子进程运行来同样驱动它。