提交 801f41cb 编写于 作者: R Rafael Rosa

chore: update for unified the player state

上级 84facf30
......@@ -20,7 +20,6 @@ internal partial class HtmlMediaPlayer : Border
{
private HtmlVideo _htmlVideo = new HtmlVideo();
private HtmlAudio _htmlAudio = new HtmlAudio();
private bool _isPlaying;
private readonly ImmutableArray<string> audioTagAllowedFormats =
ImmutableArray.Create(new string[] { ".MP3", ".WAV" });
......@@ -28,7 +27,7 @@ internal partial class HtmlMediaPlayer : Border
ImmutableArray.Create(new string[] { ".MP4", ".WEBM", ".OGG" });
private UIElement _activeElement;
private string _activeElementName;
public bool IsPause;
public HtmlMediaPlayerState PlayerState;
public event EventHandler<object> OnSourceLoaded;
public event EventHandler<object> OnStatusChanged;
......@@ -45,6 +44,7 @@ internal partial class HtmlMediaPlayer : Border
}
_htmlVideo.SetCssStyle("visibility", "hidden");
_htmlAudio.SetCssStyle("visibility", "hidden");
PlayerState = HtmlMediaPlayerState.None;
AddChild(_htmlVideo);
AddChild(_htmlAudio);
......@@ -326,7 +326,7 @@ internal partial class HtmlMediaPlayer : Border
{
this.Log().Debug($"Media ended [{Source}]");
}
_isPlaying = false;
PlayerState = HtmlMediaPlayerState.None;
OnSourceEnded?.Invoke(this, EventArgs.Empty);
}
......@@ -336,6 +336,7 @@ internal partial class HtmlMediaPlayer : Border
{
Duration = NativeMethods.GetDuration(_activeElement.HtmlId);
}
PlayerState = HtmlMediaPlayerState.Opening;
OnMetadataLoaded?.Invoke(this, Duration);
}
......@@ -350,10 +351,10 @@ internal partial class HtmlMediaPlayer : Border
_activeElementName = IsVideo ? "Video" : IsAudio ? "Audio" : "";
if (_activeElement != null)
{
PlayerState = NativeMethods.GetPaused(_activeElement.HtmlId) ? HtmlMediaPlayerState.Paused : HtmlMediaPlayerState.Playing;
_activeElement.SetCssStyle("visibility", "visible");
IsPause = NativeMethods.GetPaused(_activeElement.HtmlId);
}
_isPlaying = !IsPause;
OnStatusChanged?.Invoke(this, EventArgs.Empty);
}
......@@ -384,9 +385,8 @@ internal partial class HtmlMediaPlayer : Border
if (_activeElement != null)
{
IsPause = NativeMethods.GetPaused(_activeElement.HtmlId);
PlayerState = NativeMethods.GetPaused(_activeElement.HtmlId) ? HtmlMediaPlayerState.Paused : HtmlMediaPlayerState.Playing;
}
_isPlaying = !IsPause;
OnStatusChanged?.Invoke(this, EventArgs.Empty);
}
......@@ -396,7 +396,7 @@ internal partial class HtmlMediaPlayer : Border
{
this.Log().Debug($"Media Changed Status Play [{Source}]");
}
IsPause = false;
PlayerState = HtmlMediaPlayerState.Playing;
OnStatusChanged?.Invoke(this, EventArgs.Empty);
}
......@@ -406,8 +406,7 @@ internal partial class HtmlMediaPlayer : Border
{
this.Log().Debug($"Media Changed Status Pause [{Source}]");
}
IsPause = true;
PlayerState = HtmlMediaPlayerState.Paused;
OnStatusChanged?.Invoke(this, EventArgs.Empty);
}
......@@ -422,7 +421,7 @@ internal partial class HtmlMediaPlayer : Border
{
this.Log().Error($"{_activeElementName} source failed: [{Source}]");
}
IsPause = true;
PlayerState = HtmlMediaPlayerState.None;
OnSourceFailed?.Invoke(this, e.Detail);
}
......@@ -457,6 +456,7 @@ internal partial class HtmlMediaPlayer : Border
player._activeElement.SetHtmlAttribute("src", encodedSource);
player._activeElement.SetCssStyle("visibility", "visible");
player.PlayerState = HtmlMediaPlayerState.Opening;
if (player.Log().IsEnabled(LogLevel.Debug))
{
player.Log().Debug($"{player._activeElementName} source changed: [{player.Source}]");
......@@ -616,10 +616,9 @@ internal partial class HtmlMediaPlayer : Border
{
this.Log().Debug($"Play()");
}
if (_activeElement != null && !_isPlaying)
if (_activeElement != null && PlayerState != HtmlMediaPlayerState.Playing)
{
IsPause = false;
_isPlaying = true;
PlayerState = HtmlMediaPlayerState.Playing;
NativeMethods.Play(_activeElement.HtmlId);
}
}
......@@ -631,10 +630,9 @@ internal partial class HtmlMediaPlayer : Border
{
this.Log().Debug($"Pause()");
}
if (_activeElement != null && _isPlaying)
if (_activeElement != null && PlayerState == HtmlMediaPlayerState.Playing)
{
_isPlaying = false;
IsPause = true;
PlayerState = HtmlMediaPlayerState.Paused;
NativeMethods.Pause(_activeElement.HtmlId);
}
}
......@@ -649,8 +647,7 @@ internal partial class HtmlMediaPlayer : Border
if (_activeElement != null)
{
NativeMethods.Stop(_activeElement.HtmlId);
_isPlaying = false;
IsPause = true;
PlayerState = HtmlMediaPlayerState.None;
}
}
......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Uno.UI.Media;
public enum HtmlMediaPlayerState
{
None = 0,
Opening = 1,
Playing = 3,
Paused = 4,
}
......@@ -235,14 +235,14 @@ public partial class MediaPlayerExtension : IMediaPlayerExtension
{
if (this.Log().IsEnabled(LogLevel.Debug))
{
this.Log().Debug($"MediaPlayerExtension.OnStatusMediaChanged Paused ({_player?.IsPause.ToString()})");
this.Log().Debug($"MediaPlayerExtension.OnStatusMediaChanged to state {_player?.PlayerState.ToString()}");
}
if (_player?.IsPause == true && _owner.PlaybackSession.PlaybackState == MediaPlaybackState.Playing)
if (_player?.PlayerState == HtmlMediaPlayerState.Paused && _owner.PlaybackSession.PlaybackState == MediaPlaybackState.Playing)
{
_owner.PlaybackSession.PlaybackState = MediaPlaybackState.Paused;
}
else if (_player?.IsPause == false && _owner.PlaybackSession.PlaybackState == MediaPlaybackState.Paused)
else if (_player?.PlayerState == HtmlMediaPlayerState.Playing && _owner.PlaybackSession.PlaybackState == MediaPlaybackState.Paused)
{
_owner.PlaybackSession.PlaybackState = MediaPlaybackState.Playing;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册