我如何停止VideoView控件内的网格控件从打开一个新的窗口使用LibVLCSharp库?



我使用LibVLCSharp.WPF使用VideoView控制播放视频。我已经在我的ViewModel中绑定了MediaPlayer和Visibility。我可以让它播放视频,而不是嵌入在网格控件中,它创建并打开一个新窗口,并在那里播放视频。我已经搜索并看到有一个空域问题,但也许有一些我做错了,以保持视频从网格内播放,就像当你把一个图像在图像控件。

播放器位于主窗口内的UserControl中。

XAML

<Grid>    
<media:VideoView x:Name="MediaPlayer"
VerticalAlignment="Center"
HorizontalAlignment="Center"
MediaPlayer="{Binding MyMediaPlayer}"
Visibility="{Binding IsMediaPlayerVisible, Converter={StaticResource VisConverter}}"/>
</Grid>

视图模型

void StartVideo()
{
IsMediaPlayerVisible = true;
Core.Initialize();
using (_libVLC = new LibVLC())
{
MyMediaPlayer = new MediaPlayer(_libVLC);
MyMediaPlayer.Media = new Media(_libVLC, new Uri(@"pathtomediafile"));
MyMediaPlayer.Play();
}
}

我可以嵌入VideoView像一个图像控制网格内?

请始终共享一个完整的最小示例。你的Q丢失了大部分代码。

LibVLC将创建一个新的窗口,当提供的窗口(如VideoView这里)没有准备好或完全初始化。

根据经验,总是从官方libvlcsharp示例开始。https://code.videolan.org/videolan/LibVLCSharp/-/blob/3.x/samples/LibVLCSharp.WPF.Sample/Controls.xaml.cs

public Controls(Example1 Parent)
{
parent = Parent;
InitializeComponent();
// we need the VideoView to be fully loaded before setting a MediaPlayer on it.
parent.VideoView.Loaded += VideoView_Loaded;
PlayButton.Click += PlayButton_Click;
StopButton.Click += StopButton_Click;
Unloaded += Controls_Unloaded;
}
private void VideoView_Loaded(object sender, RoutedEventArgs e)
{
_libVLC = new LibVLC(enableDebugLogs: true);
_mediaPlayer = new MediaPlayer(_libVLC);
parent.VideoView.MediaPlayer = _mediaPlayer;
}

最新更新