我正在使用libvclsharp包装器组装一个winforms应用程序。 这是一个基本应用,可承载4个VideoView窗口并播放4个不同的mp4视频。
它可以正常运行,并且似乎大多数情况下都很稳定,但是lib有点奇怪的怪癖,我似乎找不到答案
我需要单击表单上的一个按钮,并将所有视频发送到特定时间,目前它们的长度都相同
使用
_mediaPlayer1 = new MediaPlayer(_libVLC1);
_mediaPlayer2 = new MediaPlayer(_libVLC1);
_mediaPlayer3 = new MediaPlayer(_libVLC1);
_mediaPlayer4 = new MediaPlayer(_libVLC1);
media1 = new Media(_libVLC1, @"D:Video.mp4", FromType.FromPath);
media2 = new Media(_libVLC1, @"D:Video2.mp4", FromType.FromPath);
media3 = new Media(_libVLC1, @"D:Video3.mp4", FromType.FromPath);
media4 = new Media(_libVLC1, @"D:Video4.mp4", FromType.FromPath);
_mediaPlayer1.Media = media1;
_mediaPlayer2.Media = media2;
_mediaPlayer3.Media = media3;
_mediaPlayer4.Media = media4;
videoView1.MediaPlayer = _mediaPlayer1;
videoView2.MediaPlayer = _mediaPlayer2;
videoView3.MediaPlayer = _mediaPlayer3;
videoView4.MediaPlayer = _mediaPlayer4;
so to send all 4 to same time i use
foreach (var player in _PlayersCollection)
{
player.Time = 12000);
}
问题是,如果单击按钮,则如果正在播放视频,则视频会直接移到新的时间位置。
如果视频暂停了,就像它们只是在移动一帧一样,它们会抽搐,那么如果再次单击,它们会跳到正确的时间位置。
这很烦人,我看不出原因。
我在网上看到了一条提示,建议将lib的输出渲染器设置为D3d9而不是D3d11,但我找不到如何更改此lib的任何示例。
熟悉Winforms上的lib的人有什么建议吗?
谢谢
答案 0 :(得分:0)
我也在vlc.dotnet中注意到了这个问题
看起来播放器不喜欢将时间更改为快速。 我的解决方案是限制跟踪器的更新速度。 类似的事情可能对您有用。
long lngLastScrollTimeStamp=0;
private void trkVideo_Scroll(object sender, EventArgs e)
{
if (((Stopwatch.GetTimestamp() / TimeSpan.TicksPerMillisecond) - lngLastScrollTimeStamp) > 250)
{
vlcControl1.Time = trkVideo.Value;
lngLastScrollTimeStamp = Stopwatch.GetTimestamp() / TimeSpan.TicksPerMillisecond;
}
}