首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python在启动之间切换播放媒体

python在启动之间切换播放媒体
EN

Stack Overflow用户
提问于 2021-12-17 20:21:10
回答 1查看 336关注 0票数 0

我试图建立一个系统,在这里,我的启动屏幕视频循环,直到2个按钮中的一个被按下(GPIO按钮)。

然后,播放更改为有字幕的视频或无字幕的视频.一旦它完成了它的播放,它会返回到溅屏视频。

我在这里有更多的代码,只是为了计算分析的每天播放次数。我的测试设备也只有一个按钮连接,这就是为什么从未使用GPIO 18。实现将与GPIO 17相同,因此一旦其中一个开始工作,另一个就不难匹配了。

问题

当我启动脚本时,媒体播放的并不总是splash。脚本还在播放结束时关闭窗口,并打开一个新窗口来播放媒体。我相信这可能是因为没有建立xwindow (对于raspberry pi)。

有什么建议吗?

代码语言:javascript
复制
#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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-21 18:50:39

所以我想出了解决办法,但不是问题的根源。

代码语言:javascript
复制
    # 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窗口中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70398501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档