2016-05-24 112 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') 
相關問題