编写Python Music Streamer

编写Python Music Streamer,第1张

编写Python Music Streamer

mp3格式是为流而设计的,这使某些事情比您预期的要简单。数据本质上是带有内置边界标记的音频帧流,而不是带有原始数据的文件头。这意味着一旦客户端希望接收音频数据,您就可以开始从现有mp3源中的任何点(无论是实时文件还是文件)开始向其发送字节,并且客户端将同步至其找到的下一帧并开始播放音频。好极了!

当然,您必须为客户提供一种建立连接的方法。事实标准是SHOUTcast(ICY)协议。这非常类似于HTTP,但是状态和标头字段恰好不同,以至于与Python的内置http服务器库不直接兼容。您也许可以使这些库为您完成一些工作,但是它们记录的接口不足以完成这些工作。您必须阅读他们的代码以了解如何使他们说SHOUTcast。

以下是一些入门指南:

http://forums.winamp.com/showthread.php?threadid=70403

http://forums.radiotoolbox.com/viewtopic.php?t=74

http://www.smackfu.com/stuff/programming/shoutcast.html

http://en.wikipedia.org/wiki/Shoutcast

我建议以单个mp3文件作为数据源,开始客户端-服务器连接的设置和播放,然后再处理诸如实时源,多种编码比特率,带内元数据和播放列表之类的问题。

播放列表通常是.pls或.m3u文件,本质上只是指向实时流URL的静态文本文件。它们并不困难,甚至也不是绝对必要的,因为许多(大多数?)mp3流客户端将接受根本没有播放列表的实时流URL。

至于建筑,这个领域是广阔的。您拥有与HTTP服务器一样多的选项。穿线了吗?工人流程?事件驱动?由你决定。对我来说,更有趣的问题是如何与服务多个输出流(播放器)的网络处理程序共享来自单个输入流(广播器)的数据。为了避免IPC和同步问题,我可能会从单线程事件驱动设计开始。在python
2中,像gevent这样的库将为您提供非常好的I /
O性能,
同时允许您以一种非常易懂的方式来构造代码。在python 3中,我更喜欢asyncio协程。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5673679.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存