在使用 Kivy 进行音频流媒体播放时,可能遇到以下错误:
[WARNING ] [Audio ] Unable to find a loader for <http://194.106.198.57:8090/club_low.mp3>
Traceback (most recent call last):
File "/home/work/python/pama_radio/andriod_app/main.py", line 11, in <module>
TestApp().run()
File "/usr/lib/python2.7/site-packages/kivy/app.py", line 766, in run
root = self.build()
File "/home/work/python/pama_radio/andriod_app/main.py", line 9, in build
print("Sound is %.3f seconds" % sound.length)
AttributeError: 'NoneType' object has no attribute 'length'

Process finished with exit code 1
- 解决方案
此错误的发生原因是 Kivy 在不同的平台上使用不同的音频提供程序,这些提供程序对流媒体音频的支持不同。
- 在桌面上,Kivy 使用 gstplayer(基于 Gstreamer 的音频提供程序),但它不支持在 Android 上使用。
- 在 Android 上,Kivy 使用 pygame,它也不支持流媒体音频。
- 在 iOS 上,Kivy 使用 SDL,它可能支持流媒体音频,但需要进一步测试。
为了解决此问题,可以
- 在桌面上使用支持流媒体音频的音频提供程序,例如 gstplayer。
- 在 Android 上使用支持流媒体音频的音频提供程序,例如 exoplayer。
- 在 iOS 上使用 SDL,如果它支持流媒体音频,那就直接使用它,否则,需要使用其他音频提供程序。
下面示例展示了可在桌面上使用的加载远程音频的方法:
from kivy.app import App
from kivy.core.audio import SoundLoader
class TestApp(App):
def build(self):
sound = SoundLoader.load('http://194.106.198.57:8090/club_low.mp3')
if sound:
print("Sound found at %s" % sound.source)
print("Sound is %.3f seconds" % sound.length)
sound.play()
TestApp().run()
运行程序会打印:
[INFO ] Kivy v1.8.0
[INFO ] [Logger ] Record log in /home/mohammad/.kivy/logs/kivy_14-09-11_13.txt
[INFO ] [Factory ] 157 symbols loaded
[DEBUG ] [Cache ] register <kv.lang> with limit=None, timeout=Nones
[DEBUG ] [Cache ] register <kv.image> with limit=None, timeout=60s
[DEBUG ] [Cache ] register <kv.atlas> with limit=None, timeout=Nones
[INFO ] [Image ] Providers: img_tex, img_dds, img_pygame, img_gif (img_pil ignored)
[DEBUG ] [Cache ] register <kv.texture> with limit=1000, timeout=60s
[DEBUG ] [Cache ] register <kv.shader> with limit=1000, timeout=3600s
[DEBUG ] [Audio ] register SoundPygame
[INFO ] [Audio ] Providers: audio_pygame (audio_pygst, audio_sdl ignored)
[DEBUG ] [App ] Loading kv </home/work/python/pama_radio/andriod_app/test.kv>
[DEBUG ] [App ] kv </home/work/python/pama_radio/andriod_app/test.kv> not found
[WARNING ] [Audio ] Unable to find a loader for <http://194.106.198.57:8090/club_low.mp3>
Traceback (most recent call last):
File "/home/work/python/pama_radio/andriod_app/main.py", line 11, in <module>
TestApp().run()
File "/usr/lib/python2.7/site-packages/kivy/app.py", line 766, in run
root = self.build()
File "/home/work/python/pama_radio/andriod_app/main.py", line 9, in build
print("Sound is %.3f seconds" % sound.length)
AttributeError: 'NoneType' object has no attribute 'length'
Process finished with exit code 1