问题描述
我使用 LibVLCSharp.WPF
使用 VideoView
控件播放视频。我在 viewmodel
中绑定了 MediaPlayer 和 Visibility。我可以让它播放视频,而不是嵌入它创建的网格控件中,并打开一个新窗口并在那里播放视频。我已经搜索过,发现存在空域问题,但可能是我做错了什么来阻止视频在网格内播放,就像您将图像放入图像控件中一样。
播放器位于 MainWindow 内的 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(@"path\to\media\file"));
MyMediaPlayer.Play();
}
}
我可以像网格中的图像控件一样嵌入 VideoView
吗?
解决方法
请始终分享一个完整的最小样本。您的 Q 缺少大部分代码。
当提供的窗口(例如此处的 VideoView)未准备好或未完全初始化时,LibVLC 将创建一个新的窗口。
根据经验,始终从官方 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;
}