【发布时间】:2013-06-01 22:58:36
【问题描述】:
我正在用 Python 创建一个小项目,它使用 Tornado 托管一个 RESTful API,用于检索、搜索和添加音频文件。到目前为止,我可以通过
输出音频文件self.set_header('Content-type', mimeType)
self.write(open(fileName).read())
但是,我希望能够创建一个“广播”电台。它实际上只是一个美化的播放列表,但我希望它可以在多台计算机之间同步。
我计划让每个电台将其即将播放的曲目写入文件/数据库,当一首歌曲的输入流完成时,它将开始输出下一首歌曲。如果一个不存在,它只会停止流。暂停流的能力将是一个奖励,但此时我只想让流启动并运行。
我环顾四周,我只能找到 GStreamer(它有一个 Python 端口,但我无法让它在 Mac 上工作)和奇怪的不完整/旧/废弃的项目。我知道 SHOUTcast 协议,但我不太确定如何以“广播电台”风格流式传输音频。
我是 Python 编程的新手(我主要使用 PHP),所以也许我只是没有在正确的地方寻找或寻找正确的东西?
感谢您的帮助!
【问题讨论】:
-
“电台”通常意味着服务器处理播放列表,一次播放一首歌曲;任何连接的客户都会在当前歌曲的中间加入。如果这是您想要的,GStreamer、icecast/SHOUTcast 等非常适合您(尽管您可能想要考虑 HTML5 AV 流媒体)。但是如果你想发送一个每个客户端都从头开始的播放列表,只需发送一个播放列表(例如,一个完整的 MP3 URL 文件)并在客户端解析它。
-
我确实计划提供可供下载/修改等的播放列表,但我会看看你提到的流媒体选项(尽管如前所述,我无法让 GStreamer 工作),谢谢!
-
但是您希望每个新客户端从播放列表的顶部开始,还是从当前曲目开始?对于后者,您需要广播式流媒体;对于前者,你不需要;只需提供客户端 URL 即可下载和播放。 (如果您担心隐藏下载 URL 以防止盗版……好吧,这实际上是不可能的,但是 RIAA 已经隐含地认为目前使用的一些半途而废的解决方案已经足够好了,所以您可能想要使用其中一个而不是发明新的东西,即使它更好......)
-
每个客户端都应该从当前曲目中的当前时间戳开始,就像收音机一样。幸运的是盗版不会成为问题,因为这仅供内部使用,但我有兴趣寻找帮助防止盗版的方法
标签: python streaming tornado gstreamer