Python VLC player.next() 控件

如何解决Python VLC player.next() 控件

我正在编写一个 JukeBox 程序,它根据组合键(A1、B2、C3 等)播放媒体。除了“media_player.next()”命令外,一切都按我期望的方式工作。

假设您要排队 3 首歌曲。如果你按下“y”键,它会像我期望的那样跳过这首歌。我的问题是,一旦播放到第 3 首歌曲,如果您再次点击“y”,它会回到第一首歌曲。我不想要那个。我希望“y”键带您在媒体列表中前进...如果这是媒体列表中的最后一首歌曲,请不要转到下一首歌曲。我怎么知道这是否是媒体列表中的最后一首歌曲,或者如何阻止 VLC 回到开头?

~/.local/lib/python3.5/site_packages/__pycache__

解决方法

正如我在评论中提到的,MediaListEndReached 似乎对我没有任何作用,因此运行 list 是解决问题的最简单方法,以下代码测试正在播放的项目的 list 位置并退出,如果 nextprevious 命令试图越过列表的末尾。
您只需跟踪索引变量即可获得相同的结果。
您可能需要调整 mrl 的拆分以匹配列表中的条目。

import vlc
import time

## pinched from vlc for keyboard input
import termios
import tty
import sys

mymedia = ["vp.mp3","vp1.mp3","happy.mp3"]

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
## end pinched code

def jukebox():
    player.play_item_at_index(0)    
    m = player.get_media_player()
    print("Playing - ",m.get_media().get_mrl()) 
    while True:
        k = getch()

        if k == "n": #Next
            media = m.get_media()
            if media.get_mrl().rsplit("/",1)[1] == mymedia[-1]: #Next requested but already at the end
                break 
            player.next()
        if k == "p": #Previous
            media = m.get_media()
            if media.get_mrl().rsplit("/",1)[1] == mymedia[0]: #Previous requested but already at the beginning
                break 
            player.previous()
        if k == " ": #Pause
            player.pause()
        if k == "q": #Quit
            player.stop()
            return True
        time.sleep(0.1)
        state = player.get_state()
        print(state,m.get_media().get_mrl()) 

    print("End of list")

vlc_instance = vlc.Instance('--no-xlib --quiet ') # no-xlib for linux and quiet don't complain
player = vlc_instance.media_list_player_new()
Media = vlc_instance.media_list_new(mymedia)
player.set_media_list(Media)
print("Welcome to Jukebox")
print("Options - space = Play/Pause,n = Next,p = Previous,q = Quit")
print("Media",mymedia)

jukebox()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?