使用Python流式音频(不使用GStreamer)

4 投票
1 回答
1026 浏览
提问于 2025-04-17 12:12

我正在做一个项目,需要从我的网络服务器上播放 .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()

你可以实现一个文件对象,这样你就可以只从服务器下载需要的文件部分。几乎所有的库都能接受文件对象作为输入。

不过,这样可能会比较慢,因为网络延迟的原因。你可能需要下载更大一部分的文件,或者在一个单独的线程中预加载文件等等。换句话说,你需要自己实现流式客户端的逻辑。

撰写回答