VLC Python不播放YouTube视频

问题描述:

当试图通过Python绑定播放VLC media player的YouTube网址时,视频实际上并未播放。VLC Python不播放YouTube视频

这里是我的代码不会播放:

def play(self, mrl): 

    self.instance = vlc.Instance() 

    try: 
     self.media = self.instance.media_new_location(mrl) 
    except NameError: 
     print('NameError: %s (%s vs LibVLC %s)' % (sys.exc_info()[1], 
                vlc.__version__, 
                vlc.libvlc_get_version())) 

    self.player = self.instance.media_player_new() 
    self.player.set_media(self.media) 

    event_manager = self.player.event_manager() 
    event_manager.event_attach(vlc.EventType.MediaPlayerEndReached, self.end_callback) 

    self.player.play() 

    while self.stillPlaying: 
     #do nothing 
     pass 

我这样称呼它:

play("http://www.youtube.com/watch?v=2hP-UGqA1Ek") 

如果你使用VLC媒体播放器播放此类型的链接,它会'找到'视频并播放它。但是,我的代码发生的所有事情都是针对该页面的标准HTTP GET,并且是从YouTube返回页面内容,但没有视频。

+0

我认为问题在于VLC播放器使用youtube.lua脚本来查找视频的真实位置,然后将其传递给播放器。我只是需要自己做点什么。 – kobyashi 2012-07-12 15:54:23

+0

这里是[固定VLC youtube.lua分析器](https://gist.github.com/boyvanamstel/3729932)在Github。 – Nawaz 2013-07-07 18:25:35

这是因为您提供的链接不是视频的链接。 VLC媒体播放器可以获得到YouTube视频的实际链接,但libVLC不会这样做。

我最近有同样的问题,但是youtube.lua文件似乎已经被修复了很久。

感谢a tip from Rémi Denis-Courmont,其中一位VLC开发人员,我通过创建MediaListPlayer然后将媒体(本地文件或YouTube URL)添加到MediaList然后将其关联到播放器来解决此问题。我不知道为什么需要这样一种复杂的方法,但至少它对我有用。

#movie is the YouTube or a local URL 
    media = instance.media_new(movie) 
    media_list = instance.media_list_new([movie]) #A list of one movie 

    player = instance.media_player_new() 
    player.set_media(media) 

    #Create a new MediaListPlayer instance and associate the player and playlist with it 

    list_player = instance.media_list_player_new() 
    list_player.set_media_player(player) 
    list_player.set_media_list(media_list)