private void PauseAll() { HeuristicManager.StopMonitoring(); foreach (SlaveMediaElement slave in SubMediaElements) { if (slave.MediaElement != MainMedia) { if (slave.MediaElement.CurrentState != SmoothStreamingMediaElementState.Paused && slave.MediaElement.CurrentState != SmoothStreamingMediaElementState.Closed) { try { slave.MediaElement.Pause(); } catch (InvalidOperationException) { } } } } }
public void RegisterMaster(SmoothStreamingMediaElement media, TimeSpan position) { UnhookEvents(); //MainMedia is for syncing //HeuristicsMasterMedia is used for Heuristics MainMedia = media; //MainMedia.Position = position; HookEvents(); //UpdateSlaves(); if (media == HeuristicMasterMedia) { HeuristicManager.StartMonitoring(); } else { HeuristicManager.StopMonitoring(); } }
//Assuming Master is ready //Assuming Slaves are in a heuristic loadable state public void ResetHeuristics() { if (ResettingHeuristics != null) { ResettingHeuristics(this, null); } HeuristicManager.StopMonitoring(); HeuristicManager.Clear(); if (HeuristicMasterMedia != null) { HeuristicManager.AddSmoothStreamingMediaElement(HeuristicMasterMedia, HeuristicSettings.PrimaryMinBitRate, HeuristicSettings.PrimaryMinFrameRate); // TODO: determin min values depending on size of master foreach (SlaveMediaElement slave in SubMediaElements) { if (slave.MediaElement != HeuristicMasterMedia) { // reset current heuristic enabled flag slave.IsPhysicalSyncEnabled = false; //if (slave.IsLogicalSyncEnabled) // does it logically needed to be playing, if so, add it to HM //{ if (slave.MediaElement != null) { HeuristicManager.AddSmoothStreamingMediaElement(slave.MediaElement, HeuristicSettings.SecondaryMinBitRate, HeuristicSettings.SecondaryMinFrameRate); } } } HeuristicManager.StartMonitoring(); } }