python-vlc 在启动之间切换播放媒体
Posted
技术标签:
【中文标题】python-vlc 在启动之间切换播放媒体【英文标题】:python-vlc switching playback media between launches 【发布时间】:2022-01-20 16:39:23 【问题描述】:我正在尝试设置一个系统,让我的开始屏幕视频循环播放,直到按下 2 个按钮中的 1 个(GPIO 按钮)。
然后,播放变为有字幕或无字幕的视频。 播放完成后,它会恢复为初始屏幕视频。
我在这里有额外的代码,只是为了计算每天的播放次数以进行分析。我的测试设备也只连接了 1 个按钮,这就是从未使用 GPIO 18 的原因。实现将与 GPIO 17 相同,因此一旦其中一个工作,另一个将不难匹配。
问题
当我启动脚本时,播放的媒体并不总是 splash。该脚本还会在播放结束时关闭窗口,并打开一个新窗口来播放媒体。我相信这可能是由于没有建立 xwindow(用于树莓派)。
有什么建议吗?
#Vars
GPIO.setmode(GPIO.BCM)
GPIO.setup(17,GPIO.IN)
GPIO.setup(18,GPIO.IN)
update = True #Update to false to exit
def Main():
# Setup logs
print(date.today())
# Media Paths
path = "/home/pi/Videos/"
nosubs = path+"Content-NoSubs.mp4"
subs = path+"Content-Subtitles.mp4"
splash = path+"StartScreen.mp4"
Instance = vlc.Instance("-f")
playlist = set([splash,subs,nosubs])
url = [str(splash),str(subs),str(nosubs)] #Yes, this looks pretty redundant. Hopefully it's not.
#Setup the player
player = Instance.media_list_player_new()
Media = Instance.media_new(url[1])
Media_list = Instance.media_list_new(playlist)
Media.get_mrl()
player.set_media_list(Media_list)
playerState = 'State.NothingSpecial',
'State.Opening',
'State.Buffering',
'State.Playing',
'State.Paused',
'State.Stopped',
'State.Ended',
'State.Error'
subsPlayed = 0
nosubsPlayed = 0
active = 0
playingMedia = 0
while update:
input = GPIO.input(17)
state = str(player.get_state())
if(state == playerState[0]):
player.play_item_at_index(0)
player.set_playback_mode(2)
if(state == playerState[7]):
player.play_item_at_index(0)
playingMedia = 0
if input == 1 and playingMedia == 0:
playingMedia = 1
player.play_item_at_index(1)
active +=1
nosubsPlayed +=1
print(playingMedia)
with open(str(date.today()))+'.txt','w' as file:
file.write("Active Views: " + active)
file.write("SubsPlayed: " + subsPlayed)
file.write("No Subs Played: " + nosubsPlayed)
Main()
【问题讨论】:
【参考方案1】:所以我找到了解决方案,但没有找到问题的根源。
# Make my media paths into vlc.Media Objects
nosubs = vlc.Media(path+"Content-NoSubs.mp4")
subs = vlc.Media(path+"Content-Subtitles.mp4")
splash = vlc.Media(path+"SplashScreen.mp4")
#Setup the player
player = Instance.media_list_player_new()
Media_list = Instance.media_list_new()
Media_list.add_media(splash)
Media_list.add_media(subs)
Media_list.add_media(nosubs)
player.set_media_list(Media_list)
Media_list.lock()
通过将播放功能从play_item_at_index(int)
切换到play_item(media)
,在我的列表中按名称设置每个媒体会有所帮助
仍然不确定为什么这是一种随机化。我的猜测是它根据播放改变了媒体在列表中的位置。
我的下一步是调整它以关闭 media_player 并将播放嵌入到 tkinter 窗口中。
【讨论】:
以上是关于python-vlc 在启动之间切换播放媒体的主要内容,如果未能解决你的问题,请参考以下文章
H.265流媒体播放器EasyPlayer切换播放协议时,快照无法消失如何处理?
Plyr 媒体播放器不显示 Vimeo,也不切换 Youtube 隐藏式字幕