0

我正在使用 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。

谢谢

4

1 回答 1

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;
    }
  }
于 2020-05-28T14:13:12.590 回答