2016-05-24 36 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を変更し、コードを複数回実行しました。ただし、出力デバイスは実際には変更されません。これは2つの理由による頭痛です:

1)audio_output_device_set()は何も返しません。私はこの機能を実行するときに何かを実際に達成しているかどうかはわかりません。 2)私はaudio_output_device_get()を実行して、設定された関数が何もしていないかどうかを調べることができません。これは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') 

このコードは、物事を修正します

関連する問題