private void OnSessionsChanged(GlobalSystemMediaTransportControlsSessionManager sender, SessionsChangedEventArgs args = null) { DisableUpdates = true; SimpleLogger.DefaultLog("MediaSessionManager::OnSessionsChanged - Clearing old sessions..."); foreach (var entry in CurrentSessions) { entry.Key.MediaPropertiesChanged -= OnMediaPropertiesChanged; entry.Key.PlaybackInfoChanged -= OnPlaybackInfoChanged; } CurrentSessions.Clear(); SimpleLogger.DefaultLog("MediaSessionManager::OnSessionsChanged - Clearing old sessions DONE"); SimpleLogger.DefaultLog("MediaSessionManager::OnSessionsChanged - Adding new sessions..."); var sessions = sender.GetSessions(); foreach (var session in sessions) { CurrentSessions[session] = new PlaybackData { IsPlaying = false, Artist = "", Title = "", }; OnMediaPropertiesChanged(session); OnPlaybackInfoChanged(session); session.MediaPropertiesChanged += OnMediaPropertiesChanged; session.PlaybackInfoChanged += OnPlaybackInfoChanged; SimpleLogger.DefaultLog($" {session.SourceAppUserModelId}"); } SimpleLogger.DefaultLog("MediaSessionManager::OnSessionsChanged - Adding new sessions DONE"); DisableUpdates = false; UpdateCurrentSong(); }
private static void CmdCapture(string filename) { Player player = Engine.Scene.Tracker.GetEntity <Player>(); if (player != null) { PlaybackData.Export(player.ChaserStates, Path.Combine(Everest.Content.PathContentOrig, "Tutorials", filename + ".bin")); } }
public void StopRecording() { _isRecording = false; DirectoryInfo exportDirectory = new DirectoryInfo(Path.Combine(Everest.Content.PathContentOrig, "Tutorials/CustomPlaybacks")); if (!exportDirectory.Exists) { exportDirectory.Create(); } PlaybackData.Export(_states, Path.Combine(Everest.Content.PathContentOrig, "Tutorials/CustomPlaybacks", Filename + ".bin")); }
public override async Task <bool> PrepareData(PlaybackData data, bool isPlaying) { playbackData = data; stateObserver?.Dispose(); stateObserver = null; CurrentSongId = data.SongId; AVPlayerItem playerItem = null; var songPlaybackData = data.SongPlaybackData; if (songPlaybackData.IsLocal || songPlaybackData.CurrentTrack.ServiceType == MusicPlayer.Api.ServiceType.iPod) { if (songPlaybackData.Uri == null) { return(false); } var url = string.IsNullOrWhiteSpace(songPlaybackData?.CurrentTrack?.FileLocation) ? new NSUrl(songPlaybackData.Uri.AbsoluteUri) : NSUrl.FromFilename(songPlaybackData.CurrentTrack.FileLocation); playerItem = AVPlayerItem.FromUrl(url); await playerItem.WaitStatus(); } else { #if HttpPlayback var urlEndodedSongId = HttpUtility.UrlEncode(data.SongId); var url = $"http://localhost:{LocalWebServer.Shared.Port}/api/GetMediaStream/Playback?SongId={urlEndodedSongId}"; playerItem = AVPlayerItem.FromUrl(new NSUrl(url)); #else NSUrlComponents comp = new NSUrlComponents( NSUrl.FromString( $"http://localhost/{songPlaybackData.CurrentTrack.Id}.{data.SongPlaybackData.CurrentTrack.FileExtension}"), false); comp.Scheme = "streaming"; if (comp.Url != null) { var asset = new AVUrlAsset(comp.Url, new NSDictionary()); asset.ResourceLoader.SetDelegate(resourceDelegate, DispatchQueue.MainQueue); playerItem = new AVPlayerItem(asset, (NSString)"duration"); stateObserver = playerItem.AddObserver("status", NSKeyValueObservingOptions.New, (obj) => { if (shouldBePlaying) { player.Play(); } Console.WriteLine($"Player Status {playerItem.Status}"); }); } #endif } player.ReplaceCurrentItemWithPlayerItem(playerItem); IsPrepared = true; return(true); }
internal PlaybackData GetPlaybackData(string id, bool create = true) { lock (CurrentData) { PlaybackData data; if (!CurrentData.TryGetValue(id, out data) && create) { CurrentData[id] = data = new PlaybackData { SongId = id, } } ; return(data); } }
public override async Task <bool> PrepareData(PlaybackData data, bool isPlaying) { CurrentSongId = data.SongId; AVPlayerItem playerItem = null; var playbackData = data.SongPlaybackData; if (playbackData.IsLocal || playbackData.CurrentTrack.ServiceType == MusicPlayer.Api.ServiceType.iPod) { if (playbackData.Uri == null) { return(false); } var url = string.IsNullOrWhiteSpace(playbackData?.CurrentTrack?.FileLocation) ? new NSUrl(playbackData.Uri.AbsoluteUri) : NSUrl.FromFilename(playbackData.CurrentTrack.FileLocation); playerItem = AVPlayerItem.FromUrl(url); await playerItem.WaitStatus(); } else { #if HttpPlayback var urlEndodedSongId = HttpUtility.UrlEncode(data.SongId); var url = $"http://localhost:{LocalWebServer.Shared.Port}/api/GetMediaStream/Playback?SongId={urlEndodedSongId}"; playerItem = AVPlayerItem.FromUrl(new NSUrl(url)); #else NSUrlComponents comp = new NSUrlComponents( NSUrl.FromString( $"http://localhost/{playbackData.CurrentTrack.Id}.{data.SongPlaybackData.CurrentTrack.FileExtension}"), false); comp.Scheme = "streaming"; if (comp.Url != null) { var asset = new AVUrlAsset(comp.Url, new NSDictionary()); asset.ResourceLoader.SetDelegate(NativeAudioPlayer.LoaderDelegate, DispatchQueue.MainQueue); playerItem = new AVPlayerItem(asset); } #endif } player.ReplaceCurrentItemWithPlayerItem(playerItem); IsPrepared = true; return(true); }
public static extern void UpdatePlaybackControls(PlaybackData playbackData);