Я использую Visual Studio 2022, C#, WPF, NET8.0 для создания приложения. Я хочу включить видеоплеер, который сможет воспроизводить видео, сохраненные в AWS.
Я написал проигрыватель с помощью Media Element, но он не интуитивно понятен и не обеспечивает ни регулировки громкости, ни полноэкранного режима. Может кто-нибудь помочь мне, предложив или предоставив код для плеера, в котором будет все?
Ссылка на образец AWS: https://englishlanvideos.s3.ap-south-1.amazonaws.com/Trading+View.mp4
Медиа-элемент по умолчанию сложно заставить работать, и он непостоянен, даже если он работает. Я настоятельно рекомендую спеть что-нибудь вроде LibVLCSharp.
Как вы думаете, разработка в UWP будет лучше для видеоплеера?





Ниже приведен пример создания более интуитивно понятного видеоплеера в WPF с регулировкой громкости и полноэкранными возможностями. Вы могли бы сослаться на это.
<Window x:Class = "WpfApp1.MainWindow"
...
x:Name = "win" MouseMove = "Window_MouseMove"
Height = "450" Width = "800">
<Grid x:Name = "LayoutRoot">
<MediaElement x:Name = "mediaElement" LoadedBehavior = "Manual" Width = "{Binding ElementName=win,Path=ActualWidth,UpdateSourceTrigger=PropertyChanged}"
Height = "{Binding ElementName=win,Path=ActualHeight,UpdateSourceTrigger=PropertyChanged}"
UnloadedBehavior = "Stop" />
<StackPanel Orientation = "Horizontal" x:Name = "controlsPanel" VerticalAlignment = "Bottom" Background = "#80000000" >
<Button Content = "Play" Click = "PlayButton_Click" Width = "75" Margin = "5"/>
<Button Content = "Pause" Click = "PauseButton_Click" Width = "75" Margin = "5"/>
<Button Content = "Fullscreen" Click = "FullscreenButton_Click" Width = "100" Margin = "5"/>
<Slider x:Name = "VolumeSlider" Width = "150" Margin = "5" Minimum = "0" Maximum = "1" Value = "0.5" ValueChanged = "VolumeSlider_ValueChanged"/>
</StackPanel>
</Grid>
</Window>
public partial class MainWindow : Window
{
private string awsVideoUrl = " https://englishlanvideos.s3.ap-south-1.amazonaws.com/Trading+View.mp4";
private WindowState previousWindowState;
private WindowStyle previousWindowStyle;
private bool isFullscreen = false;
private DispatcherTimer hideTimer;
public MainWindow()
{
InitializeComponent();
DataContext = this;
mediaElement.Source = new Uri(awsVideoUrl);
mediaElement.MediaEnded += MediaElement_MediaEnded;
InitializeHideTimer();
}
private void PlayButton_Click(object sender, RoutedEventArgs e)
{
mediaElement.Play();
}
private void PauseButton_Click(object sender, RoutedEventArgs e)
{
mediaElement.Pause();
}
private void FullscreenButton_Click(object sender, RoutedEventArgs e)
{
if (isFullscreen)
{
ExitFullscreen();
}
else
{
EnterFullscreen();
}
}
private void EnterFullscreen()
{
previousWindowState = WindowState;
previousWindowStyle = WindowStyle;
WindowStyle = WindowStyle.None;
WindowState = WindowState.Maximized;
Top = 0;
Left = 0;
Width = SystemParameters.PrimaryScreenWidth;
Height = SystemParameters.PrimaryScreenHeight;
mediaElement.Width = Width;
mediaElement.Height = Height;
isFullscreen = true;
}
private void ExitFullscreen()
{
WindowStyle = previousWindowStyle;
WindowState = previousWindowState;
mediaElement.Width = ActualWidth;
mediaElement.Height = ActualHeight;
isFullscreen = false;
}
private void VolumeSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
mediaElement.Volume = VolumeSlider.Value;
}
private void MediaElement_MediaEnded(object sender, RoutedEventArgs e)
{
// Optionally handle media end event
}
private void InitializeHideTimer()
{
hideTimer = new DispatcherTimer();
hideTimer.Interval = TimeSpan.FromSeconds(3);
hideTimer.Tick += HideTimer_Tick;
}
private void Window_MouseMove(object sender, MouseEventArgs e)
{
controlsPanel.Visibility = Visibility.Visible;
hideTimer.Stop();
hideTimer.Start();
}
private void HideTimer_Tick(object sender, EventArgs e)
{
controlsPanel.Visibility = Visibility.Collapsed;
hideTimer.Stop();
}
private void ResetHideTimer()
{
controlsPanel.Visibility = Visibility.Visible;
hideTimer.Stop();
hideTimer.Start();
}
}
Спасибо, Хуэй. Это решает все мои проблемы.
Тот факт, что ваше видео размещено на AWS, не имеет значения — настоящая проблема заключается в том, чтобы попытаться создать полноценный плеер из недоделанных медиа-компонентов в WPF.