首页 > 解决方案 > 如何提高 pyglet 媒体的加载速度

问题描述

我正在使用 python 和 pyglet 制作一个 MediaPlayer。目前我可以按预期加载任何音频文件。但是我遇到了一个问题,pyglet 似乎只能以 2.4MBps 的速度加载文件。现在这适用于 5 分钟的歌曲。但是,我也希望能够将它用于有声读物。这些可能长达 10 多个小时,大小超过 500MB。

现在有两个问题。

  1. 加载需要很长时间(Windows 已经将窗口标记为“无响应”)。它最终会加载并播放得很好,只是时间太长了。
  2. 播放器本身开始消耗 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)由程序的其他部分提供

标签: pythonloadingpyglet

解决方案


streaming = True是您正在做的事情的解决方案。将流设置为False将其转换为StaticSource. AStaticSource将整个未压缩文件完整地加载到内存中,这对于大文件是不可行的。流式传输一次只获取数据块,并在播放时对其进行解码。这使用更少的内存。

通常,aStaticSource用于频繁播放或一次播放多次的小声音。如果您有多个球在四处弹跳,并且每次它们落地时都想播放弹跳声音,那么是的,您将禁用流式传输。

如果您想加载多个有声读物并连续播放它们,那么您只需播放器排队更多的媒体源。


推荐阅读