在Kivy中实现Android和iOS的音频(mp3)流媒体播放

2 投票
1 回答
2150 浏览
提问于 2025-04-21 04:26

我在Fedora 20上为Python 2.7安装了kivy版本1.8.1。

因为我对kivy还不太熟悉,我想知道能不能在安卓和iOS上用kivy进行音频流播放

我试了一个例子,但在我的电脑上根本没有播放出来。

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

我尝试了视频和视频播放器模块,这些只适合在电脑上进行流媒体播放,安卓上不行(我没有尝试iOS)。请告诉我是否可以使用其他格式(比如aac和ogg)。

1 个回答

2

这个问题发生的原因是,在桌面上你使用的是gstplayer,这是一个基于GStreamer的音频播放器,而在安卓上则使用pygame作为音频播放器。GStreamer可以支持网络音频流播放,但pygame不支持。

如果你在桌面上运行你的应用程序,应该能看到以下输出:

[INFO   ] [Audio       ] Providers: audio_gstplayer, audio_pygame (audio_ffpyplayer, audio_sdl ignored)

这意味着Kivy同时使用了gstplayer和pygame。如果gstplayer无法处理某种媒体类型,Kivy就会尝试使用pygame。但是gstplayer在安卓上是不可用的:

[INFO              ] [Audio       ] Providers: audio_pygame (audio_pygst, audio_sdl ignored)

在iOS上,使用的是SDL音频播放器,我认为它可能支持音频流播放,所以你在那边可能会更顺利。你也可以在github上提交一个问题,请求我们添加这个功能。

撰写回答