C# .NET 媒体播放器的最简单的 XAML 窗口

问题描述 投票:0回答:1

我在尝试使用 Windows 窗体 C# 应用程序中的

Windows.Media.Playback
功能播放简单的 mp4 视频文件时遇到问题。根据文档上的示例,这应该非常简单:https://learn.microsoft.com/en-us/windows/uwp/audio-video-camera/play-audio-and-video-with-mediaplayer

我有简单的 Windows 窗体应用程序,可以启动播放器并在消息框中显示播放器的状态和可能的错误。

MessageBox
上的消息显示正在播放状态,没有任何显示,但可以听到视频的声音。我认为这与未为
MediaPlayer
配置 ui 组件有关。页面上有一些
Use MediaPlayerElement to render video in XAML
xaml 示例,尽管(据我了解)应该为媒体播放器创建一个窗口,但我不知道如何将此类 xaml 放入这个简约的 C# Forms 应用程序中。我需要让视频图像也显示在一个简单的窗口上(启动一个新窗口)。除了 Windows 窗体之外,我对任何其他 Windows ui 相关内容没有 0 经验,而且我对此很困惑,因为我找不到任何关于如何在 Visual 中将 XAML 窗口添加到此类 C# Windows 窗体应用程序的简单示例工作室。

using Windows.Media.Core;
using Windows.Media.Playback;

public partial class Form1 : Form
{
    MediaPlayer p;
    
    public Form1()
    {
        p = new MediaPlayer();
        p.MediaFailed += failure;
        InitializeComponent();
    }

    static void failure(MediaPlayer p, MediaPlayerFailedEventArgs a) {
        
        MessageBox.Show(a.ErrorMessage, "Error");
    
    }
    private void button1_Click(object sender, EventArgs e)
    {
       
        p.Source = MediaSource.CreateFromUri(new Uri("C:/sfc.mp4"));
        
        p.Play();//Start the media player

        MessageBox.Show(p.CurrentState.ToString(), "Player state");//Says "Opening"
        //Wait for few seconds
        MessageBox.Show(p.CurrentState.ToString(), "Player state");//Says "Playing" and we get sound output

    }
}
c# winforms user-interface media-player
1个回答
0
投票

它实际上在 WPF 中简化了很多

首先,只需使用 MediaElement

 <StackPanel Orientation="Horizontal" Name="topPanel">            
        <Button Name="browseMediaButton" Click="browseMediaButton_Click" Margin="5,0" Padding="3,1" MinWidth="50">Select Video File</Button>
        <Label Name="messageLabel" Foreground="Red" FontSize="16"></Label>
    </StackPanel>
    <Grid Name="videoGrid" Grid.Row="1">
        <MediaElement x:Name="mediaVideo" Source="" LoadedBehavior="Manual"  UnloadedBehavior="Stop" />
    </Grid>

然后在您的代码中,打开文件后,播放它

private void browseMediaButton_Click(object sender, RoutedEventArgs e)
        {
            Microsoft.Win32.OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog();
            ofd.CheckPathExists = true;
            ofd.Multiselect = true;
            bool? result = ofd.ShowDialog();
            if (result == true)
            {
                messageLabel.Content = "";
                mediaVideo.Source = new Uri(ofd.FileName);
                mediaVideo.Play();
            }
        }
© www.soinside.com 2019 - 2024. All rights reserved.