我正在尝试编写一个小应用程序,动态播放单个电影文件反复。我用Python写的,使用这些VLC-Python绑定
我想说这不会很难,即使非常稀疏的文档,我可以得到一个电影全屏没有任何其他屏幕上,甚至改变我想要播放的文件。我不能简单地让一部电影重复。
我使用以下代码:
self.media = []
——repeat-tag here:
self.vlc_inst = vlc.Instance('--mouse-hide-timeout=0', '--fullscreen', '--repeat')
和这里的"——repeat"标签:
自我。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应该是什么。在原始代码中,我发现它应该是一个字符数组(字符串),但我不知道这应该是什么样的字符串。
有谁知道吗?
好吧,这个问题很老了,但无论如何…我认为,而不是使用'--repeat'
(它只适用于一个medialist而不是一个mediafile afaik)在你的vlc.Instance
你可以使用像'--input-repeat=999999'
这样的东西,它不是一个真正的循环,但尽可能接近(再次:afaik;-))
我可以通过将媒体设置为当前媒体并调用play来回放媒体。代码是垃圾吗?是的,它是: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
可以使用subprocess
p = subprocess.Popen('cvlc', 'fullscreen', 'home/pi/demo.mp4', '--loop')
我使用VLC而不是早先的CVLC,但它不适合我,它是重新加载和调整VLC播放器时,循环结束
查看源代码,我发现这是一个有效的解决方案。
定义媒体列表后,将媒体列表添加到media_list_player中,可以在播放器上设置播放模式。在文档中,这是一个枚举。
class PlaybackMode(_Enum):
'''Defines playback modes for playlist.
'''
_enum_names_ = {
0: 'default',
1: 'loop',
2: 'repeat',
}
PlaybackMode.default = PlaybackMode(0)
PlaybackMode.loop = PlaybackMode(1)
PlaybackMode.repeat = PlaybackMode(2)
你所需要做的就是在列表播放器中设置模式:
listPlayer.set_playback_mode()
变为listPlayer.set_playback_mode(vlc.PlaybackMode(1))
或listPlayer.set_playback_mode(vlc.PlaybackMode().loop)
import vlc
from pathlib import Path
import time
import os
class Player:
def __init__(self):
self.player = vlc.Instance()
def addPlayList(self, localPath):
self.mediaList = self.player.media_list_new()
path = os.path.join(os.getcwd(), localPath)
self.mediaList.add_media(path)
self.listPlayer = self.player.media_list_player_new()
self.listPlayer.set_media_list(self.mediaList)
self.listPlayer.set_playback_mode(vlc.PlaybackMode(1))
def play(self):
self.listPlayer.play()
def stop(self):
self.listPlayer.stop()
play = Player()
play.addPlayList("test.mp4")
play.play()
while True:
time.sleep(4)