You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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实例,确保每个控件的音频设置相互隔离。

具体实现代码

  1. 初始化阶段为每个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);
  1. 播放和调整音量的代码保持不变,此时调整单个控件的音量只会影响自身:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 23:42:40