2012-02-02 100 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始終從服務器下載文件的只是一個需要的塊。幾乎每個庫都接受一個文件對象作爲輸入。

由於網絡延遲,它可能會很慢。您需要下載更大的文件塊,在單獨的線程中預載文件等。換句話說,您需要自己實現流客戶端邏輯。