2012-02-02 67 views
4

我正在从事一个涉及从我的网络服务器传输.OGG(或.mp3)文件的项目。我宁愿不必下载整个文件然后播放它,是否有一种方法可以在纯Python中执行此操作(无GStreamer - 希望能够真正实现跨平台)?有没有办法使用urllib来一次下载文件块,并将其加载到PyGame中来进行实际的音频播放?使用Python(无GStreamer)流式传输音频

谢谢!

+0

我在类似的角落。我试图看看我是否可以将音频文件转换为base-64块,以便通过网络发送,以便客户端重新转换并播放 – Blazer 2012-02-13 05:38:26

+1

我听说GStreamer是跨平台的:http:// en。 wikipedia.org/wiki/GStreamer。 – Tshepang 2012-03-01 15:46:32

回答

1

我想你的服务器支持范围请求。您可以通过标题范围你想要的范围的起始字节和终止字节要求服务器:

import urllib2 

req = urllib2.Request(url) 
req.headers['Range'] = 'bytes=%s-%s' % (startByte, endByte) 
f = urllib2.urlopen(req) 

f.read() 

您可以实现一个file object始终从服务器下载文件的只是一个需要的块。几乎每个库都接受一个文件对象作为输入。

由于网络延迟,它可能会很慢。您需要下载更大的文件块,在单独的线程中预载文件等。换句话说,您需要自己实现流客户端逻辑。