2012-07-11 177 views
2

當試圖通過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

回答

3

這是因爲您提供的鏈接不是視頻的鏈接。 VLC媒體播放器可以獲得到YouTube視頻的實際鏈接,但libVLC不會這樣做。

1

我最近有同樣的問題,但是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)