提交 b620157f 编写于 作者: R Rafael Rosa

chore: control status on PIP

上级 2f9e0a52
......@@ -11,6 +11,7 @@ using Windows.UI.Xaml;
using System.Globalization;
using Windows.UI.Xaml.Controls.Maps;
using Windows.UI.Xaml.Media;
using Windows.UI.Notifications;
namespace Uno.UI.Media;
......@@ -26,8 +27,10 @@ internal partial class HtmlMediaPlayer : Border
ImmutableArray.Create(new string[] { ".MP4", ".WEBM", ".OGG" });
private UIElement _activeElement;
private string _activeElementName;
public bool IsPause;
public event EventHandler<object> OnSourceLoaded;
public event EventHandler<object> OnStatusChanged;
public event EventHandler<object> OnSourceFailed;
public event EventHandler<object> OnSourceEnded;
public event EventHandler<object> OnMetadataLoaded;
......@@ -62,6 +65,8 @@ internal partial class HtmlMediaPlayer : Border
_activeElement = IsVideo ? _htmlVideo : IsAudio ? _htmlAudio : default;
_activeElementName = IsVideo ? "Video" : IsAudio ? "Audio" : "";
SourceLoaded += OnHtmlSourceLoaded;
StatusPlayChanged += OnHtmlStatusPlayChanged;
StatusPauseChanged += OnHtmlStatusPauseChanged;
SourceFailed += OnHtmlSourceFailed;
SourceEnded += OnHtmlSourceEnded;
MetadataLoaded += OnHtmlMetadataLoaded;
......@@ -76,6 +81,8 @@ internal partial class HtmlMediaPlayer : Border
}
SourceLoaded -= OnHtmlSourceLoaded;
StatusPlayChanged -= OnHtmlStatusPlayChanged;
StatusPauseChanged -= OnHtmlStatusPauseChanged;
SourceFailed -= OnHtmlSourceFailed;
SourceEnded -= OnHtmlSourceEnded;
MetadataLoaded -= OnHtmlMetadataLoaded;
......@@ -240,6 +247,48 @@ internal partial class HtmlMediaPlayer : Border
}
}
/// <summary>
/// Occurs when the video source change the status
/// </summary>
event EventHandler StatusPauseChanged
{
add
{
_htmlVideo.RegisterHtmlEventHandler("pause", value);
_htmlAudio.RegisterHtmlEventHandler("pause", value);
//_htmlVideo.RegisterHtmlEventHandler("playing", value);
//_htmlAudio.RegisterHtmlEventHandler("playing", value);
}
remove
{
_htmlVideo.UnregisterHtmlEventHandler("pause", value);
_htmlAudio.UnregisterHtmlEventHandler("pause", value);
//_htmlVideo.UnregisterHtmlEventHandler("pause", value);
//_htmlAudio.UnregisterHtmlEventHandler("pause", value);
//_htmlVideo.UnregisterHtmlEventHandler("playing", value);
//_htmlAudio.UnregisterHtmlEventHandler("playing", value);
}
}
/// <summary>
/// Occurs when the video source change the status
/// </summary>
event EventHandler StatusPlayChanged
{
add
{
_htmlVideo.RegisterHtmlEventHandler("play", value);
_htmlAudio.RegisterHtmlEventHandler("play", value);
}
remove
{
_htmlVideo.UnregisterHtmlEventHandler("play", value);
_htmlAudio.UnregisterHtmlEventHandler("play", value);
}
}
/// <summary>
/// Occurs when there is an error associated with video retrieval or format.
/// </summary>
......@@ -307,6 +356,27 @@ internal partial class HtmlMediaPlayer : Border
OnSourceLoaded?.Invoke(this, EventArgs.Empty);
}
private void OnHtmlStatusPlayChanged(object sender, EventArgs e)
{
if (this.Log().IsEnabled(Uno.Foundation.Logging.LogLevel.Debug))
{
this.Log().Debug($"Media Changed Status Play [{Source}]");
}
IsPause = false;
OnStatusChanged?.Invoke(this, EventArgs.Empty);
}
private void OnHtmlStatusPauseChanged(object sender, EventArgs e)
{
if (this.Log().IsEnabled(Uno.Foundation.Logging.LogLevel.Debug))
{
this.Log().Debug($"Media Changed Status Pause [{Source}]");
}
IsPause = true;
OnStatusChanged?.Invoke(this, EventArgs.Empty);
}
private void OnHtmlSourceFailed(object sender, HtmlCustomEventArgs e)
{
TimeUpdated += OnHtmlTimeUpdated;
......
#nullable enable
using System;
using Uno.Media.Playback;
using Windows.Media.Core;
using Uno.Extensions;
using System.IO;
using Uno.Foundation.Logging;
using System.Collections.Generic;
using Uno;
using Uno.Helpers;
using System.Linq;
using System.Threading.Tasks;
using Uno.Foundation.Extensibility;
using Uno.Foundation.Logging;
using Uno.Media.Playback;
using Windows.Foundation;
using Windows.Media.Core;
using Windows.Media.Playback;
using Windows.Storage;
using Windows.Storage.Streams;
using Windows.Foundation;
using Windows.UI.Xaml.Controls;
using System.Diagnostics.CodeAnalysis;
using Windows.ApplicationModel.Background;
using Uno.Foundation.Extensibility;
using Windows.UI.Xaml.Controls.Maps;
using System.Numerics;
[assembly: ApiExtension(typeof(IMediaPlayerExtension), typeof(Uno.UI.Media.MediaPlayerExtension))]
......@@ -231,6 +221,8 @@ public partial class MediaPlayerExtension : IMediaPlayerExtension
_player.OnSourceEnded += OnCompletion;
_player.OnTimeUpdate += OnTimeUpdate;
_player.OnStatusChanged += OnStatusMediaChanged;
_owner.PlaybackSession.PlaybackStateChanged -= OnStatusChanged;
_owner.PlaybackSession.PlaybackStateChanged += OnStatusChanged;
......@@ -238,6 +230,36 @@ public partial class MediaPlayerExtension : IMediaPlayerExtension
ApplyVideoSource();
}
private void OnStatusMediaChanged(object? sender, object e)
{
if (this.Log().IsEnabled(LogLevel.Debug))
{
this.Log().Debug($"MediaPlayerExtension.OnStatusMediaChanged Paused ({_player?.IsPause.ToString()})");
}
switch (_owner.PlaybackSession.PlaybackState)
{
case MediaPlaybackState.None:
break;
case MediaPlaybackState.Opening:
break;
case MediaPlaybackState.Buffering:
break;
case MediaPlaybackState.Playing:
if (_player?.IsPause == true)
{
_owner.PlaybackSession.MediaPlayer.Pause();
}
break;
case MediaPlaybackState.Paused:
if (_player?.IsPause == false)
{
_owner.PlaybackSession.MediaPlayer.Play();
}
break;
}
}
private void SetPlaylistItems(MediaPlaybackList playlist)
{
_playlistItems = playlist.Items
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册