Python VLC Script错误:AttributeError:'NoneType'对象没有属性'media_player_new'

问题描述 投票:1回答:3

我正在尝试制作一个简单的脚本,它将在python中播放视频(.mp4)。我不想播放你的视频或任何在线视频,只是我电脑上的视频。

这是我的代码:

import vlc
Instance = vlc.Instance()
player = Instance.media_player_new()
Media = Instance.media_new('test.mp4')
Media.get_mrl()
player.set_media(Media)
player.play()

当我运行它时,我一直收到这个错误(谈论第3行):

AttributeError:'NoneType'对象没有属性'media_player_new'

我在macOS Sierra的IDLE中使用python 3.5.4。

python vlc
3个回答
1
投票

我通过在vlc.py中注释掉find_lib()解决了这个问题。

p = os.getcwd()
os.chdir(os.path.join(p, 'sdk'))
dll = ctypes.CDLL("libvlc.dll")
plugin_path = os.path.join(os.getcwd(), r'sdk\plugins')

0
投票

您没有打开实例

import vlc
Instance = vlc.Instance()
player = Instance.media_player_new()
Media = Instance.media_new('2005.mp3')
Media.get_mrl()
player.set_media(Media)
player.play()
while player.get_state() !=6:
    continue

应该工作还是 试试这个:

import vlc
import time
import sys

def progressbar(progress,guage_length=50):
    div = 100 / float(guage_length)
    prog = int(progress / div) # ensure progress fits in guage
    text = "\rPlaying: {0}{1}{2} [{3}%]".format(">"*prog,"|","-"*(guage_length - prog),format(progress,'.2f'))
    sys.stdout.write(text)
    sys.stdout.flush()

instance = vlc.Instance()
player = instance.media_player_new()
player.set_mrl("V2.mp4")
player.play()
playing = set([1,2,3,4])
play=True
guage_length=30
while play == True:
    time.sleep(0.5)
    play_state = player.get_state()
    if play_state in playing:
        length = player.get_length()
        ptime = player.get_time()
        progress = ptime/float(length)*100
        progressbar(progress,guage_length)
        continue
    else:
        progressbar(100,guage_length)
        play = False
print ("\nPlay terminated")

注意#State 0:None,1 Opening,2 Buffering,3 Playing,4 Paused,5 Stopped,6 End,7 Error

警告:仅在Linux上测试过


0
投票

您可以简单地简化代码

import vlc
p = vlc.MediaPlayer('2005.mp3')
p.play()

但这不会解决你的问题。显然,未正确创建vlc实例。这可能是由各种问题引起的。使用

i = vlc.Instance('--verbose 3')

查看可能的错误消息。

© www.soinside.com 2019 - 2024. All rights reserved.