Удивительно, в ударе, можно сделать
$ curl http://mp3.streampower.be/radio1-high.mp3 > test.mp3
с аудиопотоком и затем ^C, и у Вас будет работа mp3 файлом, ведя меня, чтобы полагать, что мне можно было автоматизировать это в Python, но я не могу найти как.
Если я просто делаю
file('python.mp3', 'w').write(urllib2.urlopen("http://mp3.streampower.be/radio1-high.mp3").read())
это даже не читает поток.
Есть ли что-то как BufferedInputReader от Java в Python, или кто-либо может дать мне некоторые подсказки относительно того, как я пошел бы о выполнении этого? Чтение аудиопотока и получение этого прекратить читать через некоторое время.
Спасибо
Возможно, вам лучше сохранить объект типа файла из urllib2.urlopen()
и затем использовать его метод read
в цикле с параметром размера:
#!/usr/bin/python
import urllib2
f=file('python.mp3', 'w')
url=urllib2.urlopen("http://mp3.streampower.be/radio1-high.mp3")
while True:
f.write(url.read(1024))
Ваш код вызывал read
без параметра размера - который пытается прочитать все содержимое. Это поток, так что это займет некоторое время. Если поток когда-нибудь закроется, тогда ваш вызов write
может продолжиться, и вы быстро перейдете от отсутствия файла к огромному файлу.
Мой пример кода здесь создаст вам mp3-файл быстро и медленно. Вам может понадобиться подстроить 1024
, если потоки передаются намного быстрее, чем типичный битрейт mp3, но это должно быть нормально. (Для потока 128 кбит/с потребуется 16 системных вызовов в секунду для write(2)
, что не должно вызывать никакого напряжения. Но при скорости 10 мбит и выше это будет больно, и вам следует использовать больший размер read
.)