2016-05-24 95 views
0

VLC 2.2.3,python-vlc 1.1.2。libVLC的Python绑定 - 无法更改音频输出设备

我有一个虚拟音频输出,并试图让libVLC输出它。到目前为止,我可以看到虚拟输出出现在libVLC中,但是选择它会使音频在默认输出(即扬声器)上播放。

这是我所拥有的相关部分:

self.Instance = vlc.Instance() 
self.player = self.Instance.media_player_new() 

devices = [] 
mods = self.player.audio_output_device_enum() 

if mods: 
    mod = mods 
    while mod: 
     mod = mod.contents 
     devices.append(mod.device) 
     mod = mod.next 

vlc.libvlc_audio_output_device_list_release(mods) 

# this is the part I change on each run of the code. 
self.player.audio_output_device_set(None, devices[0]) 

我已经多次运行代码,更改设备ID为每代码注释。但是,输出设备实际上并没有改变。这是一个头痛的原因有两个:

1)audio_output_device_set()不返回任何东西。当我运行这个函数时,我不知道我是否真的做了什么。 2)我甚至不能运行audio_output_device_get()来检查set函数是否在做任何事情,因为这只是针对libvlc 3.我更喜欢我的程序使用2.2.3。

所以,我接下来做的是安装VLC 3.0并运行上面的代码。现在,audio_output_device_get()可以工作,我可以看到set函数实际上将输出设备更改为虚拟输出。但声音仍然在扬声器上播放。

发生了什么事?我该如何解决?

我在VLC论坛问过,得到了一个奇怪无用的回复,告诉我'检查日志和文档'。而已。我已经超越了相当缺乏的文件来实现这一目标。尽管我怀疑它可以提供帮助,但我决定尝试记录。我认为这会像调用libvlc_log_set_file一样简单,但它需要一个libVLC文件指针,我不知道如何使用Python中的名称和模式创建一个指针。

tl; dr:

1)如何成功更换音频输出设备? 2)如何设置最大冗余日志记录?

回答

0

1)出于某种原因,我必须在VLC注册我的更改之前暂停并取消暂停。

此代码修复件事情:

[... rest of GUI class ...] 
self.p.play() 
self.root.after(350, self.DeviceSet) 

def DeviceSet(self): 
    self.p.audio_output_device_set(None, self.audiodevice) 
    self.p.pause() 
    self.root.after(10) 
    self.p.pause() 

2)初始化VLC如下:

self.instance = vlc.Instance('--verbose 9')