如何解决清除 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 举报,一经查实,本站将立刻删除。