WPF中多VlcControl共存时,如何单独调整单个控件的音量?
问题:调整单个VlcControl音量时所有控件同步变化的解决办法
在WPF页面中使用WindowsFormsHost托管4个VlcControl,用于播放视频采集卡输入内容。调用代码调整其中一个控件音量时,4个控件的音量会同时变大/变小,如何仅调整单个VlcControl的音量?
用户原代码:
// Set options string[] options = new string[] { $":dshow-vdev={videoDeviceName}", $":dshow-adev={audioDeviceName}", ":dshow-size=1920x1080", ":dshow-aspect-ratio=16:9", ":dshow-fps=60", ":live-caching=0", ":width=960", ":height=540", ":transform-type=180", }; // Start to Play vlcControls[1].Play("dshow://", options); // Adjust the volume private void ChangeVolumn(object para2) { var volume = (double)para2; var player = vlcControls[1]; player.Audio.Volume = (int)volume; }
用户尝试过player.MediaPlayer.Audio.Volume = (int)volume;,效果相同。
原因分析
所有VlcControl默认共享同一个全局LibVLC实例,导致音频设置全局生效,调整任意一个控件的音量都会影响所有复用该实例的播放器。
解决办法
为每个VlcControl初始化独立的LibVLC实例,确保每个控件的音频设置相互隔离。
具体实现代码
- 初始化阶段为每个VlcControl创建独立的LibVLC实例并绑定:
// 为每个控件创建独立的LibVLC实例 var libVlc1 = new LibVLC(); var libVlc2 = new LibVLC(); var libVlc3 = new LibVLC(); var libVlc4 = new LibVLC(); // 将独立实例绑定到对应的VlcControl vlcControls[0].MediaPlayer = new MediaPlayer(libVlc1); vlcControls[1].MediaPlayer = new MediaPlayer(libVlc2); vlcControls[2].MediaPlayer = new MediaPlayer(libVlc3); vlcControls[3].MediaPlayer = new MediaPlayer(libVlc4);
- 播放和调整音量的代码保持不变,此时调整单个控件的音量只会影响自身:
private void ChangeVolumn(object para2) { var volume = (double)para2; var player = vlcControls[1]; player.Audio.Volume = (int)volume; }
补充说明
如果需要给LibVLC实例传递启动参数(如禁用默认音频),可在创建实例时传入:
var instanceOptions = new string[] { "--no-audio" }; var libVlcInstance = new LibVLC(instanceOptions);
内容的提问来源于stack exchange,提问作者Marvin Wilson
相关产品推荐
相关产品推荐

