c# - Vlc.DotNet - 在播放音频之前无法设置音量

标签 c# winforms vlc libvlc

我从 Github 下载了 Vlc.DotNet 项目,并一直在为其示例表单应用程序添加更多功能。一切都很好,除了一件事:我注意到每次我启动应用程序并播放音频时,音频听起来像是它的音量是 100%(或大约 100%)——即使在我将它设置为较低的值之后也是如此。

我尝试在播放音频之前设置音量,但没有用。 如果我调试代码,我会看到音量始终设置为 -1。

比如我执行下面几行代码,设置音量为40后,调试时,音量还是-1:

myVlcControl.Play(new FileInfo(FileName));
myVlcControl.Audio.Volume = 40; 

改变上面几行的顺序也不起作用。

有趣的是,当音频已经在播放并且我改变音量时,它成功地改变为 NumericUpDown 上的选择值。下面的代码是发生这种情况的事件:

private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
    myVlcControl.Audio.Volume = (int)numericUpDown1.Value;
}

这两天我一直在尝试解决这个问题。不幸的是,我的编码技能甚至不及这个项目背后的人。我已经在他们的 Github 问题页面上发布了这个问题,但是由于自 11 月以来有问题没有回复,我决定尝试使用 StackOverflow。希望这里有人使用 Vlc.DotNet 并为我的问题提供解决方案。

话虽这么说:

  • 有没有人遇到同样的问题?
  • 有人知道怎么解决吗?
  • 有什么建议吗?

谢谢!

[编辑于 2016 年 1 月 8 日上午 11:50 GMT-2]

Github 上的用户 higankanshi 回答了我如下:

I have found the problem. You should use LibVlc 2.2.0(or later). Vlc.DotNet is using LibVlc 2.1.5

然后,我进行了一些测试,得出以下结论:

你是对的。使用 LibVlc 2.2.0,我可以在播放前设置音量。

不幸的是,出于某种原因,在播放音频之前设置音量仅在应用程序首次打开时有效。停止音频,改变音量,再次播放后,音量不再改变——只在播放时改变。

以下是带结果的步骤:

  1. 执行申请;
  2. 在播放音频文件之前在运行时更改音量;
  3. 播放音频文件;
    • 结果:音频以指定的音量播放,成功! =)
  4. 按停止键;
  5. 再次更改音量;
  6. 再次按下播放键(此时,播放方法内部的实现应该会得到新的音量信息);
    • 结果:音频再次以之前播放的相同音量播放。设置音量不再起作用。

我正在对 Vlc.DotNet.Forms.Samples - CLR 4 - .Net 4.5 项目进行测试。我对项目所做的更改是:

  • 添加了 NumericUpDown 控件,以便我可以在运行时更改音量;
  • 将 ValueChanged 事件关联到 NumericUpDown 控件,以便每次更改值时,新值都会传递给 VlcControl;
  • 创建了一个 Play() 函数,它总是在播放音频之前获取最后一个音量值;

我的代码如下:

private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
    myVlcControl.Audio.Volume = (int)numericUpDown1.Value;
}

private void Play()
{
    myVlcControl.Audio.Volume = (int)numericUpDown1.Value;
    myVlcControl.Play(new FileInfo(FileName));
}

private void OnButtonPlayClicked(object sender, EventArgs e)
{
    Play();
}

private void OnButtonStopClicked(object sender, EventArgs e)
{
    myVlcControl.Stop();
}

private void OnButtonPauseClicked(object sender, EventArgs e)
{
    myVlcControl.Pause();
}

有什么想法吗?

最佳答案

我找到了可行的解决方案:

int volume { get; set; }

public Constructor(){
    InitializeComponent();
    myVlcControl.VideoOutChanged += myVlcControl_VideoOutChanged;
}

private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
    this.volume = (int)numericUpDown1.Value;
    myVlcControl.Audio.Volume = volume;
}

void vlcPlayer_VideoOutChanged(object sender, VlcMediaPlayerVideoOutChangedEventArgs e)
{
    myVlcControl.Audio.Volume = volume;
}

这似乎对文件和流都有效。

关于c# - Vlc.DotNet - 在播放音频之前无法设置音量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34661777/

相关文章:

macos - VLC:如何创建正版MP4(不是M4V)文件?

video - 在两个单独的接收器上同步视频流

c# - 将方法转换为 Linq 表达式以供查询

c# - 单例不应该总是被销毁吗?

c# - WinForms:检测光标何时进入/离开表单或其控件

c# - WebBrowser.Navigate();如何传递 ntlm 凭据

c# - 为提取的方法添加单元测试

c# - 将日期时间与未指定和 UTC 类型进行比较

c# - ComboBox SelectedValue 属性不起作用

android - 使用 RTP 从 Android 到 PC 的相机流式传输