public GalleryCompactView(IEventAggregator aggregator, ViewLifetimeControl lifetime, MediaPlayer player, RemoteFileStream fileStream) { _aggregator = aggregator; _lifetime = lifetime; _mediaPlayer = player; _fileStream = fileStream; _aggregator.Subscribe(this); RequestedTheme = ElementTheme.Dark; TransportControls = new MediaTransportControls { IsCompact = true, IsCompactOverlayButtonVisible = false, IsFastForwardButtonVisible = false, IsFastRewindButtonVisible = false, IsFullWindowButtonVisible = false, IsNextTrackButtonVisible = false, IsPlaybackRateButtonVisible = false, IsPreviousTrackButtonVisible = false, IsRepeatButtonVisible = false, IsSkipBackwardButtonVisible = false, IsSkipForwardButtonVisible = false, IsVolumeButtonVisible = false, IsStopButtonVisible = false, IsZoomButtonVisible = false, }; AreTransportControlsEnabled = true; SetMediaPlayer(player); lifetime.Closed += OnReleased; lifetime.Released += OnReleased; }
private void Play(Grid parent, GalleryContent item, File file) { if (_unloaded) { return; } try { if (!file.Local.IsDownloadingCompleted && !SettingsService.Current.IsStreamingEnabled) { return; } if (_surface != null && _mediaPlayerElement != null) { _surface.Children.Remove(_mediaPlayerElement); _surface = null; } if (_mediaPlayer == null) { _mediaPlayer = Task.Run(() => new MediaPlayer()).Result; _mediaPlayer.VolumeChanged += OnVolumeChanged; _mediaPlayer.SourceChanged += OnSourceChanged; _mediaPlayer.MediaOpened += OnMediaOpened; _mediaPlayer.PlaybackSession.PlaybackStateChanged += OnPlaybackStateChanged; _mediaPlayerElement.SetMediaPlayer(_mediaPlayer); } var dpi = DisplayInformation.GetForCurrentView().LogicalDpi / 96.0f; _mediaPlayer.SetSurfaceSize(new Size(parent.ActualWidth * dpi, parent.ActualHeight * dpi)); _surface = parent; _surface.Children.Add(_mediaPlayerElement); //Transport.DownloadMaximum = file.Size; //Transport.DownloadValue = file.Local.DownloadOffset + file.Local.DownloadedPrefixSize; var streamable = SettingsService.Current.IsStreamingEnabled && item.IsStreamable /*&& !file.Local.IsDownloadingCompleted*/; if (streamable) { _fileStream = new RemoteFileStream(item.ProtoService, file, item.Duration); _mediaPlayer.Source = MediaSource.CreateFromStream(_fileStream, item.MimeType); //Transport.DownloadMaximum = file.Size; //Transport.DownloadValue = file.Local.DownloadOffset + file.Local.DownloadedPrefixSize; } else { _mediaPlayer.Source = MediaSource.CreateFromUri(UriEx.ToLocal(file.Local.Path)); } _mediaPlayer.IsLoopingEnabled = item.IsLoop; _mediaPlayer.Play(); } catch { } }
private async void Play(Grid parent, GalleryContent item, File file) { try { if (!file.Local.IsDownloadingCompleted && !SettingsService.Current.IsStreamingEnabled) { return; } if (_surface != null && _mediaPlayerElement != null) { _surface.Children.Remove(_mediaPlayerElement); _surface = null; } if (_mediaPlayer == null) { _mediaPlayer = Task.Run(() => new MediaPlayer()).Result; _mediaPlayer.VolumeChanged += OnVolumeChanged; _mediaPlayer.SourceChanged += OnSourceChanged; _mediaPlayer.MediaOpened += OnMediaOpened; _mediaPlayer.PlaybackSession.PlaybackStateChanged += OnPlaybackStateChanged; _mediaPlayerElement.SetMediaPlayer(_mediaPlayer); } var dpi = DisplayInformation.GetForCurrentView().LogicalDpi / 96.0f; _mediaPlayer.SetSurfaceSize(new Size(parent.ActualWidth * dpi, parent.ActualHeight * dpi)); _surface = parent; _surface.Children.Add(_mediaPlayerElement); if (ApiInformation.IsPropertyPresent("Windows.UI.Xaml.Controls.MediaTransportControls", "ShowAndHideAutomatically")) { Transport.ShowAndHideAutomatically = true; } Transport.DownloadMaximum = file.Size; Transport.DownloadValue = file.Local.DownloadOffset + file.Local.DownloadedPrefixSize; var streamable = SettingsService.Current.IsStreamingEnabled && item.IsStreamable /*&& !file.Local.IsDownloadingCompleted*/; if (streamable) { _streamingInterop = new RemoteFileStream(item.ProtoService, file, TimeSpan.FromSeconds(item.Duration)); _mediaPlayer.Source = MediaSource.CreateFromStream(_streamingInterop, item.MimeType); Transport.DownloadMaximum = file.Size; Transport.DownloadValue = file.Local.DownloadOffset + file.Local.DownloadedPrefixSize; } else { _mediaPlayer.Source = MediaSource.CreateFromUri(new Uri("file:///" + file.Local.Path)); } _mediaPlayer.IsLoopingEnabled = item.IsLoop; _mediaPlayer.Play(); } catch { } }
public void Update(MediaPlayer player, RemoteFileStream fileStream) { Dispose(); _mediaPlayer = player; _fileStream = fileStream; SetMediaPlayer(player); }
private void Dispose() { Element2.Reset(); Element0.Reset(); Element1.Reset(); if (_surface != null) { _surface.Children.Remove(_mediaPlayerElement); _surface = null; } if (_streamingInterop != null) { var interop = _streamingInterop; _streamingInterop = null; Task.Run(() => interop?.Dispose()); } if (_mediaPlayer != null) { _mediaPlayer.VolumeChanged -= OnVolumeChanged; _mediaPlayer.SourceChanged -= OnSourceChanged; _mediaPlayer.MediaOpened -= OnMediaOpened; _mediaPlayer.PlaybackSession.PlaybackStateChanged -= OnPlaybackStateChanged; _mediaPlayerElement.SetMediaPlayer(null); //_mediaPlayerElement.AreTransportControlsEnabled = false; //_mediaPlayerElement.TransportControls = null; //_mediaPlayerElement = null; if (_compactLifetime == null) { _mediaPlayer.Dispose(); _mediaPlayer = null; } OnSourceChanged(); } if (_request != null) { _request.RequestRelease(); _request = null; } if (ApiInformation.IsPropertyPresent("Windows.UI.Xaml.Controls.MediaTransportControls", "ShowAndHideAutomatically")) { Transport.ShowAndHideAutomatically = false; } }
private void Dispose() { Element2.Reset(); Element0.Reset(); Element1.Reset(); if (_surface != null) { _surface.Children.Remove(_mediaPlayerElement); _surface = null; } if (_fileStream != null) { if (_compactLifetime == null) { _fileStream.Dispose(); } _fileStream = null; } if (_mediaPlayer != null) { _mediaPlayer.VolumeChanged -= OnVolumeChanged; _mediaPlayer.SourceChanged -= OnSourceChanged; _mediaPlayer.MediaOpened -= OnMediaOpened; _mediaPlayer.PlaybackSession.PlaybackStateChanged -= OnPlaybackStateChanged; _mediaPlayerElement.SetMediaPlayer(null); //_mediaPlayerElement.AreTransportControlsEnabled = false; //_mediaPlayerElement.TransportControls = null; //_mediaPlayerElement = null; if (_compactLifetime == null) { _mediaPlayer.Dispose(); } _mediaPlayer = null; OnSourceChanged(); } if (_request != null) { _request.RequestRelease(); _request = null; } }
private void Dispose() { if (_mediaPlayer != null) { _mediaPlayer.Source = null; //_mediaPlayer.Dispose(); _mediaPlayer = null; } if (_fileStream != null) { _fileStream.Dispose(); _fileStream = null; } }
private void OnReleased(object sender, EventArgs e) { _aggregator.Unsubscribe(this); if (_mediaPlayer != null) { _mediaPlayer.Source = null; //_mediaPlayer.Dispose(); _mediaPlayer = null; } if (_fileStream != null) { _fileStream.Dispose(); _fileStream = null; } }
private PlaybackItem GetPlaybackItem(Message message) { var token = $"{message.ChatId}_{message.Id}"; var file = GetFile(message); var mime = GetMimeType(message); var duration = GetDuration(message); var stream = new RemoteFileStream(_protoService, file, TimeSpan.FromSeconds(duration)); var source = MediaSource.CreateFromStream(stream, mime); var item = new PlaybackItem(source); _streams[file.Id].Add(stream); source.CustomProperties["file"] = file.Id; source.CustomProperties["message"] = message.Id; source.CustomProperties["chat"] = message.ChatId; source.CustomProperties["token"] = token; item.File = file; item.Message = message; item.Token = token; if (message.Content is MessageAudio audio) { var performer = string.IsNullOrEmpty(audio.Audio.Performer) ? null : audio.Audio.Performer; var title = string.IsNullOrEmpty(audio.Audio.Title) ? null : audio.Audio.Title; if (performer == null && title == null) { item.Title = audio.Audio.FileName; item.Artist = string.Empty; } else { item.Title = string.IsNullOrEmpty(audio.Audio.Title) ? Strings.Resources.AudioUnknownTitle : audio.Audio.Title; item.Artist = string.IsNullOrEmpty(audio.Audio.Performer) ? Strings.Resources.AudioUnknownArtist : audio.Audio.Performer; } } _mapping[token] = item; return(item); }