有没有办法通过Kivy播放实时音频流?

时间:2019-08-27 22:20:50

标签: python kivy audio-streaming internet-radio

我正在尝试创建一个应用,您可以在其中收听手机的广播流。 Kivy有可能吗?

我正在为我的高中广播电台构建此应用程序。我已经尝试过SoundLoader,但似乎没有用。

这是我播放直播的代码。

class ListenWindow(Screen):
    sound = SoundLoader.load('stream.mp3')
    sound.play()

这是我收到的输出。

[WARNING] Deprecated property "<AliasProperty name=filename>" of object "<kivy.core.audio.audio_gstplayer.SoundGstplayer object at 0x03DFE378>" was accessed, it will be removed in a future version
[WARNING] [AudioGstplayer] b"No decoder available for type 'text/uri-list'."
[ERROR  ] [AudioGstplayer] b'Your GStreamer installation is missing a plug-in.'
[INFO   ] [Window      ] Provider: sdl2
[ERROR  ] [AudioGstplayer] b'Internal data stream error.'

我试图通过pip更新GStreamer,但这不能解决问题。

1 个答案:

答案 0 :(得分:0)

Icecast / SHOUTcast流本质上是HTTP Progressive流,其中媒体数据被连续编码,流式传输到客户端并进行播放。当这种类型的流式传输开始时,Web浏览器无法播放该流。因此,如果直接链接到流,则浏览器将连续下载永无休止的“文件”。

要解决此问题,使用了M3U和PLS播放列表。这个想法是在浏览器中,您可以链接到一个播放列表,该播放列表已下载并随后在用户的媒体播放器中打开。媒体播放器读取播放列表,找到流的实际URL,然后向流提出自己的HTTP请求并播放它。

使用诸如Gstreamer之类的内容时,要播放流,您需要使用实际的流URL。也就是说,您需要自己解析M3U或PLS播放列表文件,找到流URL,然后将其打开。对于您的情况,由于您知道只使用一个电台,因此只需在文本编辑器中打开该播放列表即可找到流URL。