令人惊讶的是,在 bash 中,您可以做到
$ 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())
它甚至不读取流。
在 python 中是否有来自 java 的 BufferedInputReader 之类的东西,或者任何人都可以给我一些关于我将如何去做的指示吗?读取音频流并让它在一段时间后停止读取。
谢谢
最佳答案
您最好从 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
时没有使用 size 参数——它会尝试读取整个内容。这是一个流,所以这将是一段时间。如果流关闭,然后您对 write
的调用可以继续,并且您会立即从没有文件变成一个巨大的文件。
我在此处的示例代码将为您构建一个又好又慢的 mp3 文件。如果流的发送速度比典型的 mp3 比特率快得多,您可能需要调整 1024
,但这应该没问题。 (一个 128kbps 的流每秒需要对 write(2)
进行 16 次系统调用,这根本不会有任何压力。但是在 10mbit 或更高的速度下,它会受到伤害,你应该使用更大的 read
大小。)
关于python - 在 python 中读取音频流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3245253/