使用Python流式音频(不使用GStreamer)
我正在做一个项目,需要从我的网络服务器上播放 .OGG(或 .mp3)文件。我希望能直接播放,而不是先下载整个文件再播放。有没有办法用纯 Python 来实现这个功能(不想用 GStreamer,希望能在不同平台上都能用)?有没有办法用 urllib 一次下载一小块文件,然后把这些数据加载到 PyGame 中来播放音频呢?
谢谢!
1 个回答
1
我想你的服务器支持范围请求。你可以通过一个叫Range的请求头来告诉服务器你想要下载的文件的起始字节和结束字节:
import urllib2
req = urllib2.Request(url)
req.headers['Range'] = 'bytes=%s-%s' % (startByte, endByte)
f = urllib2.urlopen(req)
f.read()
你可以实现一个文件对象,这样你就可以只从服务器下载需要的文件部分。几乎所有的库都能接受文件对象作为输入。
不过,这样可能会比较慢,因为网络延迟的原因。你可能需要下载更大一部分的文件,或者在一个单独的线程中预加载文件等等。换句话说,你需要自己实现流式客户端的逻辑。