如何在不使用 pyglet 将其保存到文件中的情况下播放音频流?



现在我有这些库:requests,pyglet,pyaudio

例如,如何使用来自此站点的音频流播放音频流,而无需将其保存到文件中(使用缓冲(?

此库的文档中有一个关于 StreamingSource 类的令人困惑的信息

当我在 StreamingSource 对象(source.get_audio_data(DATA(( 中推送以字节为单位的信息,然后将此信息推送到 Player(pyglet.media.Player((( 中时,它会抛出一个异常,表明 StreamingSource 没有属性持续时间

法典:

import pyglet, requests
req = requests.get('http://ic7.101.ru:8000/c15_3', stream=True)
player = pyglet.media.Player()
source = pyglet.media.StreamingSource()
CHUNK = 1024
for num, chunk in enumerate(req.iter_content(CHUNK)):
if num == 1000:
break
source.get_audio_data(chunk)
if num == 100:
player.queue(source)
player.play()
pyglet.app.run()
pyglet.clock.schedule_once(lambda dt: pyglet.app.exit(), source.duration)

追踪:

Traceback (most recent call last):
File "/home/user/.PyCharmCE2017.1/config/scratches/scratch.py", line 16, in <module>
player.queue(source)
File "/usr/local/lib/python3.5/dist-packages/pyglet/media/__init__.py", line 978, in queue
group.queue(source)
File "/usr/local/lib/python3.5/dist-packages/pyglet/media/__init__.py", line 698, in queue
self.duration += source.duration
TypeError: unsupported operand type(s) for +=: 'float' and 'NoneType'

如果您只想播放URL中的文件(音频/视频(而不保存,则可以使用如下所示的vlc
有关vlc的详细信息,请点击此处

您可以将vlc(在Windows上(安装为:

pip install python-vlc

源代码

import vlc
url = 'http://ic7.101.ru:8000/c15_3'
#define VLC instance
instance = vlc.Instance('--input-repeat=-1', '--fullscreen')
#Define VLC player
player=instance.media_player_new()
#Define VLC media
media=instance.media_new(url)
#Set player media
player.set_media(media)
#Play the media
player.play()

相关内容

最新更新