WPF 中使用VLC播放音频的,会被少播放最后的0.5秒内容,为什么

最后的风笛曲 2020-06-03 07:30:36
请教各位,我再WPF 程序中,用vlc 播放音频文件,播放的音频最后会少1秒左右,。是为什么?

例如我有2个音频AB,其中A音频的内容是“我有一只小毛驴”,
B音频的内容是“今天天气好晴朗,处处好风光。”

当我播放A音频时候,播放出来的内容是“我有一只小”,后面“毛驴”2个字就没有出来。
当我播放B音频的时候,播放出来的内容是“今天天气好晴朗,处处好”,“风光”又没有读出来。
其他更长的音频也是如此,反正是最后1秒左右的内容没有读出来,请问各位是为什么?

应该不是GC 的问题吧,如果是GC,那为什么每次音频都是最后0.5秒左右的内容没有,而不是我刚刚播放了,播放了几秒就被GC了?


<Window x:Class="WpfMusicText.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfMusicText"
xmlns:wpf="clr-namespace:Vlc.DotNet.Wpf;assembly=Vlc.DotNet.Wpf"
mc:Ignorable="d"
Title="Window1" Height="450" Width="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="100"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Button Content="播放" Width="120" Height="30" Click="ButtonBase_OnClick"></Button>
<wpf:VlcControl x:Name="vlcPlayer" Grid.Row="1" />
</Grid>
</Window>


    public partial class Window1 : Window
{

public Window1()
{
InitializeComponent();
}

private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
string currentDirectory = @"C:\Program Files (x86)\VideoLAN\VLC";
var vlcLibDirectory = new DirectoryInfo(currentDirectory);

var options = new string[]
{
//添加日志
};
//初始化播放器
this.vlcPlayer.SourceProvider.CreatePlayer(vlcLibDirectory, options);
this.vlcPlayer.SourceProvider.MediaPlayer.Play(new Uri(@"D:\443215.mp3"));//本地文件。
}
}
...全文
419 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
chaozn 2021-07-22
  • 打赏
  • 举报
回复

同学,这个问题最后怎么解决的,我也碰到了,全网也只搜到了这里,这个问题这么冷僻吗?

chaozn 2021-07-23
  • 举报
回复
@chaozn Meta.Vlc里有人说也存在这个bug,play之前stop一下就可以正常播放,确实如此,暂时这样处理了可能是vlc的bug,有大神知道原理的讲讲
JDD1997 2020-07-06
  • 打赏
  • 举报
回复
看错了,还以为你是要播放视频 如果是想播放音频的话 NAudio 是不错的选择
JDD1997 2020-07-06
  • 打赏
  • 举报
回复
vlc本身没什么问题,但劝你放弃Vlc.DotNet.Wpf,它是一个很烂的项目,即便你解决了上面的问题,后面也还有一堆坑等着你. 运行官方的demo,快速连续点击播放/停止,用不了几下就会卡死 搜索 Vlc.DotNet.Wpf stop Deadlock 会发现几年前就有很多人提出过该问题,github上的issue里面也有,但很早就被设为已解决并关闭了. 改用 unosquare/ffmediaelement 吧 不过也别指望会好到哪里去,同样是官方demo,同样的方法,快速连续点击播放/停止,用不了几下就会出问题,不过没Vlc.DotNet.Wpf那么致命 顺带提一句,github上关于WPF Video搜索到的前30页我全部看过了. 另外还有几个可以尝试: Mpv.NET-lib Meta.Vlc.DEMO
wq3002 2020-06-28
  • 打赏
  • 举报
回复
帮顶 同问,而且少于2秒的音频都播不出来。
OrdinaryCoder 2020-06-04
  • 打赏
  • 举报
回复
直接用VLC没问题 而代码有问题 有没有可能是你使用VLC库用的有问题 或者库版本不对 转成wav可以播放 给你提供了一个解决办法就是使用wav或者将其他格式音频转成wav
最后的风笛曲 2020-06-04
  • 打赏
  • 举报
回复
引用 2 楼 OrdinaryCoder 的回复:
遇到这种问题首先先测试一下: 1.使用VLC自带播放器播放音频文件 确认是否是代码引起的 2.使用其他播放器播放音频文件 确认是否是VLC自己的问题 3.转换成其他音频格式进行1 2步骤 确认是否是音频格式引起的
我刚刚试了,把MP3转换成wav。播放就没有问题。
最后的风笛曲 2020-06-04
  • 打赏
  • 举报
回复
引用 2 楼 OrdinaryCoder 的回复:
遇到这种问题首先先测试一下: 1.使用VLC自带播放器播放音频文件 确认是否是代码引起的 2.使用其他播放器播放音频文件 确认是否是VLC自己的问题 3.转换成其他音频格式进行1 2步骤 确认是否是音频格式引起的
用系统自带的播放器,或者直接用vlc播放器播放该音频,是正常播放的,但是用这个代码播放,就会出现这个问题
OrdinaryCoder 2020-06-04
  • 打赏
  • 举报
回复
遇到这种问题首先先测试一下: 1.使用VLC自带播放器播放音频文件 确认是否是代码引起的 2.使用其他播放器播放音频文件 确认是否是VLC自己的问题 3.转换成其他音频格式进行1 2步骤 确认是否是音频格式引起的
最后的风笛曲 2020-06-04
  • 打赏
  • 举报
回复
有人吗

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧