我正在做一个项目,该项目涉及从我的Web服务器流式传输.OGG(或.mp3)文件。我不想下载整个文件然后播放,有没有一种方法可以在纯Python中做到这一点(没有GStreamer,希望它能真正跨平台)?有没有一种方法可以使用urlib一次下载文件块,并将其加载到PyGame中进行实际的音频播放?
谢谢!
我想您的服务器支持范围请求。您通过标头范围询问服务器,其中包含所需范围的起始字节和结束字节:
import urllib2
req = urllib2.Request(url)
req.headers['Range'] = 'bytes=%s-%s' % (startByte, endByte)
f = urllib2.urlopen(req)
f.read()
您可以实现一个文件对象,并始终从服务器下载所需的文件块。几乎每个库都接受一个文件对象作为输入。
由于网络延迟,它可能会很慢。您需要下载更大的文件块,在单独的线程中预加载文件,等等。换句话说,您需要自己实现流式客户端逻辑。