python-vlc 运行 播放多首歌曲后内存不足

python-vlc running out of memory after playing multiple songs

我正在编写一个 python 程序,运行 在 raspberry pi (PI 3 A+) 上,每 10 分钟播放一首歌曲。我正在使用 python-vlc 通过 pi 的耳机插孔播放歌曲。

PlaySong() 是一个函数,每 10 分钟调用一次(成功)。

import vlc

def PlaySong():
    p = vlc.MediaPlayer("file:///home/pi/music.mp3")
    p.play()

这在前 6 次按预期工作。 6次之后,它不再播放了,而是抛出这个错误:

mmap() failed: cannot allocate memory

即使我将它从每 10 分钟更改为每 2 分钟也会发生这种情况,因此它与时间长短无关。

任务管理器显示 pi 本身仍有大量可用内存。

有什么建议吗?

由于媒体播放器未发布,运行内存不足。解决方法是在p.release().

之前加上<a href="http://www.olivieraubert.net/vlc/python-ctypes/doc/vlc.MediaPlayer-class.html#release" rel="nofollow noreferrer">p.release()</a> after playing the song. This will stop the song immediately, so we will want to add in <a href="https://docs.python.org/3/library/time.html?#time.sleep" rel="nofollow noreferrer">time.sleep()</a>

最终代码如下所示:

import time
import vlc
def PlaySong():
    p = vlc.MediaPlayer("file:///home/pi/music.mp3")
    p.play()
    time.sleep(5) #play for 5 seconds
    p.release()

如果你想让 mp3 在歌曲的整个持续时间内播放,你可以,像这样:

import time
import vlc
def PlaySong():
    p = vlc.MediaPlayer("file:///home/pi/music.mp3")
    p.play()
    time.sleep(1) #this is necessary because is_playing() returns false if called right away
    while p.is_playing():
        time.sleep(1)
    p.release()