清除 vlc media_list_player 的媒体列表将不允许重新启动媒体播放器

问题描述

我正在研究 RaspBerry Pi 4B,我正在创建一个音乐播放器来替换自动点唱机的内部。我正在尝试使用组合键将音乐提供给 VLC。在这种情况下,选择“A1”将转到作为“/media/usb1”安装的 USB 记忆棒到“A1”文件夹,将找到的任何媒体添加到由 media_list_player 播放的播放列表中。这按设计工作。

当我试图清除媒体列表以重新开始时,我的问题就出现了。我需要使用相同的 media_list_player 名称,但是一旦我创建了一个新的媒体列表,我就无法重新启动播放器。

这是我的代码片段:

#!/usr/bin/env python3
#
import os,sys,csv,vlc,time,serial,configparser,termios,tty,subprocess
#
# Get Defaults
#
SoundBeforeSong = None
SoundAfterSong = None
TrackDelay = None
PlayHistory = None
USBDrive =  "/media/usb1/"
#
# Get keyboard input
#
def getch():  # getchar(),getc(stdin)  #PYCHOK flake
    fd = sys.stdin.fileno()
    old = termios.tcgetattr(fd)
    try:
        tty.setraw(fd)
        ch = sys.stdin.read(1)
    finally:
        termios.tcsetattr(fd,termios.TCSADRAIN,old)
    return ch
#
# Adding to playlist - Returns directory contents and adds to playlist
#
def addplaylist(track):
    list = None
    if os.path.isdir(os.path.join(USBDrive,track)):
        files = [f for f in os.listdir(os.path.join(USBDrive,track)) if os.path.isfile(os.path.join(USBDrive,track,f))]
        for f in files:
            if list is None:
                if SoundBeforeSong:
                    list = SoundBeforeSong + ";" + os.path.join(USBDrive,f)
                else:
                    list = os.path.join(USBDrive,f)
                if SoundAfterSong:
                    list = list + ";" + SoundAfterSong  
            else:
                if SoundBeforeSong:
                    list = list + ";" + SoundBeforeSong + ";" + os.path.join(USBDrive,f)
                else:
                    list = list + ";" + os.path.join(USBDrive,f)
                if SoundAfterSong:
                    list = list + ";" + SoundAfterSong
    else:
        print ("Error(3) - Selection folder not present")
    if list is None:
        print ("Error(4) - Selection has no media")
    else:
        if ";" in list:
            list = list.split(";")
            for song in list:
                media_list.add_media(song)
        else:
            media_list.add_media(list)
        print("add media play")
        if not media_player.is_playing():
            media_player.play() 
    return
#
# Define keyboard actions
#
def JukeBox():
    global Action,Bluetooth
    Sel_char = None
    while True:
        key = getch()
        try:
            Sel_char = int(key)
        except:
            try:
                Sel_char = key.upper()
            except:
                Sel_char = None
        if Sel_char == "Z":
            return False
        elif Sel_char == "W":
            if not media_player.is_playing():
                media_player.play()
            if media_player.is_playing():   
                media_player.stop()
                media_list = player.media_list_new()  # creating a new media list
                media_player.set_media_list(media_list)  # setting media list to the media player
        elif type(Sel_char) == str:
            Action = Sel_char
        elif type(Sel_char) == int:
            Action = Action + str(Sel_char)
            addplaylist(Action)
        else:
            pass
#
# Setting Up Media Player
#
# creating Instance class object
player = vlc.Instance('--no-xlib --quiet ') # no-xlib for linux and quiet don't complain
media_player = vlc.MediaListPlayer()  # creating a media player object
media_list = player.media_list_new()  # creating a new media list
media_player.set_media_list(media_list)  # setting media list to the media player
new = player.media_player_new()  # new media player instance
media_player.set_media_player(new)  # setting media player to it
media_events = new.event_manager()  # setting event handler
#
# Read keyboard input
#
print("Ready...")
JukeBox()
#
# Program is shutting down
#
sys.exit()

对我来说,我点击了“A1”,音乐按预期开始。我点击了“W”,它按预期停止了。在幕后,我还通过创建一个新的空白列表来清除媒体列表。当我清除列表时再次点击“W”没有任何作用,所以这是有道理的。我点击了“A1”并希望再次听到音乐,但我没有。我看到“添加媒体播放”,但没有声音。如何重新启动媒体列表播放器?或者可能更合适的问题是,我如何清除媒体列表(通过创建新媒体或从列表中删除媒体)并允许使用相同的引用来使用媒体播放器?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...