如何提高 pyglet 媒体的加载速度
How to increase loading speed for pyglet media
我正在使用 python 和 pyglet 制作一个 MediaPlayer。目前我可以按预期加载任何音频文件。但是,我 运行 遇到了一个问题,即 pyglet 似乎只能以 2.4MBps 的速度加载文件。现在这适合播放 5 分钟的歌曲。但是我也希望能够将它用于有声读物。这些内容可能长达 10 多个小时,大小超过 500MB。
现在有两个问题。
- 加载需要很长时间(windows 已经将 window 标记为“无响应”)。它最终会加载并播放得很好,只是需要太长时间。
- 播放器本身开始消耗 RAM。加载 700MB 的有声读物导致应用程序使用将近 5GB 的 RAM。
有办法解决这些问题吗?
不确定我的代码是否有帮助,但我认为这些是最相关的行
import pyglet
self.media = pyglet.media.load(path, streaming=False)
self.player = pyglet.media.Player()
self.player.queue(self.media)
self.player.play()
文件路径(通常为 .m4a)由程序的其他部分提供
我才发现,在我的情况下,我只需设置streaming=True
,上面提到的问题似乎就解决了。
然而,如果有人有一个真正解决问题而不是仅仅规避问题的修复程序,那将仍然很有趣。
streaming = True
是您正在做的事情的解决方案。将流媒体设置为 False
会将其变为 StaticSource
。 StaticSource
将整个未压缩的文件完整地加载到内存中,这对于大文件来说是不可行的。流媒体一次只获取数据块,并在播放时对其进行解码。这使用更少的内存。
通常 StaticSource
用于经常播放或一次播放多次的小声音。如果您有多个球在周围弹跳并且希望在每次落地时播放弹跳声音,那么可以禁用流式传输。
如果您想加载多本有声读物并连续播放,那么您只需播放器排队更多媒体源即可。
我正在使用 python 和 pyglet 制作一个 MediaPlayer。目前我可以按预期加载任何音频文件。但是,我 运行 遇到了一个问题,即 pyglet 似乎只能以 2.4MBps 的速度加载文件。现在这适合播放 5 分钟的歌曲。但是我也希望能够将它用于有声读物。这些内容可能长达 10 多个小时,大小超过 500MB。
现在有两个问题。
- 加载需要很长时间(windows 已经将 window 标记为“无响应”)。它最终会加载并播放得很好,只是需要太长时间。
- 播放器本身开始消耗 RAM。加载 700MB 的有声读物导致应用程序使用将近 5GB 的 RAM。
有办法解决这些问题吗?
不确定我的代码是否有帮助,但我认为这些是最相关的行
import pyglet
self.media = pyglet.media.load(path, streaming=False)
self.player = pyglet.media.Player()
self.player.queue(self.media)
self.player.play()
文件路径(通常为 .m4a)由程序的其他部分提供
我才发现,在我的情况下,我只需设置streaming=True
,上面提到的问题似乎就解决了。
然而,如果有人有一个真正解决问题而不是仅仅规避问题的修复程序,那将仍然很有趣。
streaming = True
是您正在做的事情的解决方案。将流媒体设置为 False
会将其变为 StaticSource
。 StaticSource
将整个未压缩的文件完整地加载到内存中,这对于大文件来说是不可行的。流媒体一次只获取数据块,并在播放时对其进行解码。这使用更少的内存。
通常 StaticSource
用于经常播放或一次播放多次的小声音。如果您有多个球在周围弹跳并且希望在每次落地时播放弹跳声音,那么可以禁用流式传输。
如果您想加载多本有声读物并连续播放,那么您只需播放器排队更多媒体源即可。