Skip to content

Commit 63b8f4f

Browse files
authored
修复媒体信息更新问题 (#271)
1 parent 41860d0 commit 63b8f4f

19 files changed

+26
-27
lines changed

src/ViewModels/Components/FlyleafPlayerViewModel/FlyleafPlayerViewModel.Methods.cs

+4-3
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,13 @@ public sealed partial class FlyleafPlayerViewModel
3232
/// <returns><see cref="MediaStats"/>.</returns>
3333
public MediaStats GetMediaInformation()
3434
{
35-
if (Player == null || !((Player)Player).CanPlay)
35+
if (Player is not Player player || !player.CanPlay)
3636
{
3737
return null;
3838
}
3939

40-
var video = ((Player)Player).Video;
41-
var audio = ((Player)Player).Audio;
40+
var video = player.Video;
41+
var audio = player.Audio;
4242
var fps = video?.FPS ?? -1;
4343
var width = video.Width;
4444
var height = video.Height;
@@ -66,6 +66,7 @@ public MediaStats GetMediaInformation()
6666
AudioChannels = channels,
6767
};
6868

69+
IsStatsUpdated = true;
6970
return mediaInfo;
7071
}
7172

src/ViewModels/Components/FlyleafPlayerViewModel/FlyleafPlayerViewModel.Properties.cs

+3
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,7 @@ public sealed partial class FlyleafPlayerViewModel
7878

7979
/// <inheritdoc/>
8080
public bool IsMediaStatsSupported => true;
81+
82+
/// <inheritdoc/>
83+
public bool IsStatsUpdated { get; set; }
8184
}

src/ViewModels/Components/FlyleafPlayerViewModel/FlyleafPlayerViewModel.cs

+5-5
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public void Initialize()
4646
LogLevel = LogLevel.Debug,
4747
LogOutput = ":debug",
4848
#endif
49-
UIRefresh = false,
49+
UIRefresh = true,
5050
UICurTimePerSecond = true,
5151
};
5252
Engine.Start(engineConfig);
@@ -57,15 +57,15 @@ public void Initialize()
5757
var config = new Config();
5858
config.Subtitles.Enabled = true;
5959
config.Player.SeekAccurate = true;
60-
config.Decoder.ZeroCopy = ZeroCopy.Auto;
6160
config.Video.VideoProcessor = SettingsToolkit.ReadLocalSetting(SettingNames.VideoProcessor, VideoProcessors.D3D11);
6261
config.Video.VideoAcceleration = SettingsToolkit.ReadLocalSetting(SettingNames.VideoAcceleration, true);
6362
config.Video.SwsForce = SettingsToolkit.ReadLocalSetting(SettingNames.DecodeType, DecodeType.HardwareDecode) == DecodeType.SoftwareDecode;
6463
config.Video.SwsHighQuality = true;
65-
config.Video.VSync = 1;
64+
config.Video.VSync = 0;
6665
config.Video.ClearScreenOnOpen = true;
6766
config.Video.Swap10Bit = true;
68-
config.Player.MinBufferDuration = TimeSpan.FromSeconds(5).Ticks;
67+
config.Player.MinBufferDuration = TimeSpan.FromSeconds(10).Ticks;
68+
config.Decoder.LowDelay = true;
6969

7070
var player = new Player(config);
7171
player.PropertyChanged += OnPlayerPropertyChanged;
@@ -150,7 +150,7 @@ public void Play()
150150
public void SeekTo(TimeSpan time)
151151
{
152152
if (time.TotalMilliseconds >= Duration.TotalMilliseconds
153-
|| Math.Abs(time.TotalSeconds - Position.TotalSeconds) < 1)
153+
|| Math.Abs(time.TotalSeconds - Position.TotalSeconds) < 2)
154154
{
155155
return;
156156
}

src/ViewModels/Components/NativePlayerViewModel/NativePlayerViewModel.Properties.cs

+3
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,7 @@ public sealed partial class NativePlayerViewModel
7777

7878
/// <inheritdoc/>
7979
public bool IsMediaStatsSupported => false;
80+
81+
/// <inheritdoc/>
82+
public bool IsStatsUpdated { get; set; }
8083
}

src/ViewModels/Components/PlayerDetailViewModel/PlayerDetailViewModel.cs

+1
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,7 @@ private async Task ChangeFormatAsync(FormatInformation information)
247247
}
248248

249249
Player.Stop();
250+
Player.IsStatsUpdated = false;
250251
if (_videoType is VideoType.Video
251252
or VideoType.Pgc)
252253
{

src/ViewModels/IPlayerViewModel.cs

+5
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,11 @@ public interface IPlayerViewModel : INotifyPropertyChanged, IDisposable
126126
/// </summary>
127127
bool IsMediaStatsSupported { get; }
128128

129+
/// <summary>
130+
/// 是否已经更新媒体信息.
131+
/// </summary>
132+
bool IsStatsUpdated { get; set; }
133+
129134
/// <summary>
130135
/// 初始化.
131136
/// </summary>

src/ViewModels/Views/LivePlayerPageViewModel/LivePlayerPageViewModel.Methods.cs

+1-2
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,8 @@ private void OnPlayerDetailPropertyChanged(object sender, PropertyChangedEventAr
108108
{
109109
if (e.PropertyName.Equals(nameof(PlayerDetail.Status))
110110
&& PlayerDetail.Status == PlayerStatus.Playing
111-
&& !_isStatsUpdated
112111
&& PlayerDetail.Player != null
112+
&& !PlayerDetail.Player.IsStatsUpdated
113113
&& PlayerDetail.Player.IsMediaStatsSupported)
114114
{
115115
UpdateLiveMediaInformation();
@@ -129,6 +129,5 @@ private void UpdateLiveMediaInformation()
129129
PlayUrl = PlayerDetail.GetLivePlayUrl(),
130130
};
131131
Stats = media;
132-
_isStatsUpdated = true;
133132
}
134133
}

src/ViewModels/Views/LivePlayerPageViewModel/LivePlayerPageViewModel.Properties.cs

-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ public sealed partial class LivePlayerPageViewModel
2020
private DispatcherTimer _heartBeatTimer;
2121
private string _presetRoomId;
2222
private Window _attachedWindow;
23-
private bool _isStatsUpdated;
2423

2524
[ObservableProperty]
2625
private LivePlayerView _view;

src/ViewModels/Views/LivePlayerPageViewModel/LivePlayerPageViewModel.cs

-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@ public void Dispose()
8686
private void Reset()
8787
{
8888
View = null;
89-
_isStatsUpdated = false;
9089
ResetTimers();
9190
ResetPublisher();
9291
ResetOverview();

src/ViewModels/Views/PgcPlayerPageViewModel/PgcPlayerPageViewModel.Methods.cs

+1-3
Original file line numberDiff line numberDiff line change
@@ -252,8 +252,8 @@ private void OnPlayerDetailPropertyChanged(object sender, PropertyChangedEventAr
252252
{
253253
if (e.PropertyName == nameof(PlayerDetail.Status)
254254
&& PlayerDetail.Status == PlayerStatus.Playing
255-
&& !_isStatsUpdated
256255
&& PlayerDetail.Player != null
256+
&& !PlayerDetail.Player.IsStatsUpdated
257257
&& PlayerDetail.Player.IsMediaStatsSupported)
258258
{
259259
var info = PlayerDetail.Player.GetMediaInformation();
@@ -268,8 +268,6 @@ private void OnPlayerDetailPropertyChanged(object sender, PropertyChangedEventAr
268268
AudioUrl = PlayerDetail.GetAudioPlayUrl(),
269269
};
270270
Stats = media;
271-
272-
_isStatsUpdated = true;
273271
}
274272
}
275273
}

src/ViewModels/Views/PgcPlayerPageViewModel/PgcPlayerPageViewModel.Properties.cs

-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ public sealed partial class PgcPlayerPageViewModel
2121
private Action _playNextEpisodeAction;
2222
private Action _playPreviousEpisodeAction;
2323
private Window _attachedWindow;
24-
private bool _isStatsUpdated;
2524

2625
[ObservableProperty]
2726
private bool _isReloading;

src/ViewModels/Views/PgcPlayerPageViewModel/PgcPlayerPageViewModel.cs

-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ public void Dispose()
8484
private void Clear()
8585
{
8686
View = null;
87-
_isStatsUpdated = false;
8887
ResetOverview();
8988
ResetOperation();
9089
ResetCommunityInformation();

src/ViewModels/Views/SettingsPageViewModel/SettingsPageViewModel.cs

+1
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public void InitializeSettings()
5959
IsNotificationEnabled = ReadSetting(SettingNames.IsNotifyEnabled, true);
6060
IsVideoDynamicNotificationEnabled = ReadSetting(SettingNames.DynamicNotificationEnabled, true);
6161
VideoProcessor = ReadSetting(SettingNames.VideoProcessor, VideoProcessors.D3D11);
62+
IsVideoNativePlayer = PlayerType == PlayerType.Native;
6263
WebPlayerInit();
6364
PreferCodecInit();
6465
DecodeInit();

src/ViewModels/Views/VideoPlayerPageViewModel/VideoPlayerPageViewModel.Methods.cs

+1-3
Original file line numberDiff line numberDiff line change
@@ -327,8 +327,8 @@ private void OnPlayerDetailPropertyChanged(object sender, PropertyChangedEventAr
327327
{
328328
if (e.PropertyName == nameof(PlayerDetail.Status)
329329
&& PlayerDetail.Status == PlayerStatus.Playing
330-
&& !_isStatsUpdated
331330
&& PlayerDetail.Player != null
331+
&& !PlayerDetail.Player.IsStatsUpdated
332332
&& PlayerDetail.Player.IsMediaStatsSupported)
333333
{
334334
var info = PlayerDetail.Player.GetMediaInformation();
@@ -343,8 +343,6 @@ private void OnPlayerDetailPropertyChanged(object sender, PropertyChangedEventAr
343343
AudioUrl = PlayerDetail.GetAudioPlayUrl(),
344344
};
345345
Stats = media;
346-
347-
_isStatsUpdated = true;
348346
}
349347
}
350348
}

src/ViewModels/Views/VideoPlayerPageViewModel/VideoPlayerPageViewModel.Properties.cs

-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ public sealed partial class VideoPlayerPageViewModel
2323
private Action _playPreviousVideoAction;
2424
private bool _isInPrivate;
2525
private Window _attachedWindow;
26-
private bool _isStatsUpdated;
2726

2827
[ObservableProperty]
2928
private VideoPlayerView _view;

src/ViewModels/Views/VideoPlayerPageViewModel/VideoPlayerPageViewModel.cs

-1
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,6 @@ public void Dispose()
106106
private void Reset()
107107
{
108108
View = null;
109-
_isStatsUpdated = false;
110109
ResetPublisher();
111110
ResetOverview();
112111
ResetOperation();

src/ViewModels/Views/WebDavPlayerPageViewModel/WebDavPlayerPageViewModel.Methods.cs

+1-3
Original file line numberDiff line numberDiff line change
@@ -198,8 +198,8 @@ private void OnPlayerDetailPropertyChanged(object sender, PropertyChangedEventAr
198198
{
199199
if (e.PropertyName == nameof(PlayerDetail.Status)
200200
&& PlayerDetail.Status == PlayerStatus.Playing
201-
&& !_isStatsUpdated
202201
&& PlayerDetail.Player != null
202+
&& !PlayerDetail.Player.IsStatsUpdated
203203
&& PlayerDetail.Player.IsMediaStatsSupported)
204204
{
205205
var info = PlayerDetail.Player.GetMediaInformation();
@@ -210,8 +210,6 @@ private void OnPlayerDetailPropertyChanged(object sender, PropertyChangedEventAr
210210

211211
var media = new VideoMediaStats(info);
212212
Stats = media;
213-
214-
_isStatsUpdated = true;
215213
}
216214
}
217215
}

src/ViewModels/Views/WebDavPlayerPageViewModel/WebDavPlayerPageViewModel.Properties.cs

-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ public sealed partial class WebDavPlayerPageViewModel
2020
private WebDavConfig _config;
2121
private Action _playNextVideoAction;
2222
private Action _playPreviousVideoAction;
23-
private bool _isStatsUpdated;
2423
private Window _attachedWindow;
2524

2625
[ObservableProperty]

src/ViewModels/Views/WebDavPlayerPageViewModel/WebDavPlayerPageViewModel.cs

-1
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,6 @@ private void Reset()
9898
{
9999
Playlist.Clear();
100100
ResetInfo();
101-
_isStatsUpdated = false;
102101
}
103102

104103
[RelayCommand]

0 commit comments

Comments
 (0)