使用Python/Tornado扮演“收音机”的音频流

2024-05-14 19:16:22 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

然而,我希望能够创建一个类似“电台”的电台。这真的只是一个美化的播放列表,但我希望它能在多台计算机上同步。
我计划让每个电台把即将播放的曲目写入文件/数据库,当一首歌曲的输入流结束时,它将开始输出下一首歌曲。如果它不存在,它就不会停止。暂停流的能力将是一个额外的奖励,但在这个时候,我只想有一个流启动和运行。在

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

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

谢谢你的帮助!在


Tags: 项目selftypeopencontentfilename歌曲tornado
1条回答
网友
1楼 · 发布于 2024-05-14 19:16:22

既然我(想我)明白了你想要什么,我想最简单的开始方法是这样的:

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

接下来,设置一个stock ice或类似的源客户机,它只是流式传输通过服务器提供的播放列表。现在,再次手动配置并运行它。在

下一步,编写一个Tornado服务器,它为客户机提供任何UI、元数据和/或流地址。在

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

您可能希望在此基础上添加的大部分内容都将与源客户机交互。例如,您希望保留曲目数据库并动态生成播放列表。您可能希望最终用户能够添加或编辑数据库。等等。根据您想要获得的花哨程度,您可能只想通过修改其输入文件并将其作为子进程(subprocess.Popen)来驱动ice,这样您就可以轻松地启动和停止实例,或者您可能希望围绕shout python从头开始编写一个自定义源客户机。在

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

相关问题 更多 >

    热门问题