我试图建立一个系统,在这里,我的启动屏幕视频循环,直到2个按钮中的一个被按下(GPIO按钮)。
然后,播放更改为有字幕的视频或无字幕的视频.一旦它完成了它的播放,它会返回到溅屏视频。
我在这里有更多的代码,只是为了计算分析的每天播放次数。我的测试设备也只有一个按钮连接,这就是为什么从未使用GPIO 18。实现将与GPIO 17相同,因此一旦其中一个开始工作,另一个就不难匹配了。
问题
当我启动脚本时,媒体播放的并不总是splash。脚本还在播放结束时关闭窗口,并打开一个新窗口来播放媒体。我相信这可能是因为没有建立xwindow (对于raspberry pi)。
有什么建议吗?
#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()发布于 2021-12-21 18:50:39
所以我想出了解决办法,但不是问题的根源。
# 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函数从play_item_at_index(int)切换到play_item(media)
但还是不知道为什么是随机的。我的猜测是,这改变了媒体在名单中的地位,根据播放。
我的下一步将是调整这一点,使其不再使用media_player,并将回放嵌入到tkinter窗口中。
https://stackoverflow.com/questions/70398501
复制相似问题