3

我正在尝试编写一个反复动态播放单个电影文件的小应用程序。我用 Python 编写的,使用这些VLC-Python 绑定

我会说这不会那么难,即使文档非常稀疏,我也可以在屏幕上没有任何其他内容的情况下获得一部电影全屏,甚至可以更改我想要播放的文件。我不能简单地让一部电影重复

我使用以下代码:

self.media = []

一个 --repeat-tag 这里:

self.vlc_inst = vlc.Instance('--mouse-hide-timeout=0', '--fullscreen', '--repeat')

还有一个'--repeat'标签:
self.media = self.vlc_inst.media_new(NEW_VIDEO_NAME + str(currentVideoN) + VIDEO_EXTENSION, '--repeat')

    self.player = self.vlc_inst.media_player_new()                  
    self.player.set_fullscreen(True)    
    self.player.set_media(self.media[currentVideoN])
    self.player.play()

这些重复标签似乎没有任何作用。Instance类确实有一个函数vlm_set_loop(self, psz_name, b_loop)但我不知道mrl应该是什么。在原始代码中,我发现它应该是一个字符数组(字符串),但我不知道这应该是什么类型的字符串。

谁有线索?

4

3 回答 3

5

好吧,这个问题已经很老了,但无论如何......我认为你可以使用一些东西,而不是使用'--repeat'(它只适用于媒体列表而不是单个媒体文件 afaik),就像它不是一个真正的循环一样,但尽可能接近它得到(再次:afaik ;-))vlc.Instance'--input-repeat=999999'

于 2012-11-09T09:49:58.437 回答
1

我能够通过将媒体设置为当前媒体并调用播放来重播媒体。代码是垃圾吗?是的,它是:该back函数可能不会在onEnd函数内部调用,否则由于某种原因我不会完全填充。它有效吗?是的

import vlc


doTrashCode = False
player = vlc.MediaPlayer("C:/Users/benj5/Videos/2019-04-29 22-14-55_Trim.mp4")


def start():
    player.set_fullscreen(True)
    em = player.event_manager()
    em.event_attach(vlc.EventType.MediaPlayerEndReached, onEnd)
    player.play()


def onEnd(event):
    global doTrashCode
    if event.type == vlc.EventType.MediaPlayerEndReached:
        doTrashCode = True


def back():
    player.set_media(player.get_media())
    player.play()


start()

while True:
    if doTrashCode:
        back()
        doTrashCode = False
于 2020-03-31T19:10:48.950 回答
0

你可以使用子进程

p = subprocess.Popen('cvlc', 'fullscreen', 'home/pi/demo.mp4', '--loop')

我之前使用 VLC 而不是 CVLC,但对我来说效果不佳,循环结束时它正在重新加载 VLC 播放器并调整其大小

于 2019-09-21T10:41:41.367 回答