private void MonitorPlugins() { lock (_registeredPlugins) { if (MaxAllowedBitrate == 0) { MaxAllowedBitrate = AvailableBitrates.DefaultIfEmpty().Min(); } else if (IsReadyForBitrateIncrease) { Debug.WriteLine("Ready For Bitrate Increase"); MaxAllowedBitrate = NextBitrate; } else if (IsProblematic) { Debug.WriteLine("Problematic Plugins Found"); var record = new ProblematicTransitionRecord { Bitrate = MaxAllowedBitrate, Time = DateTime.Now }; _problematicTransitions.Add(record); MaxAllowedBitrate = ActiveDownloadBitrates.DefaultIfEmpty() .Min(); } else { Debug.WriteLine("Stable"); _registeredPlugins.ForEach(i => i.BufferingTime = _stableBufferSize); } } }
private void OnAvailableBitratesChanged() { var minBitrate = AvailableBitrates.Any() ? AvailableBitrates.Min() : 0; var maxBitrate = AvailableBitrates.Any() ? AvailableBitrates.Max() : 0; if (_nowDownloadingSlider != null) { _nowDownloadingSlider.Minimum = 0; _nowDownloadingSlider.Maximum = maxBitrate / 1000.0; _nowDownloadingSlider.Value = 0; } if (_limitMaxBitrateSlider != null) { // Update the bitrate limiter slider _limitMaxBitrateSlider.Minimum = Math.Ceiling(minBitrate / 1000.0); // Round up otherwise we exclude bottom bitrate from eligibility _limitMaxBitrateSlider.Maximum = Math.Ceiling(maxBitrate / 1000.0); // Round up otherwise we exclude top bitrate from eligibility _limitMaxBitrateSlider.Value = _limitMaxBitrateSlider.Maximum; } }
public override void OnApplyTemplate() { base.OnApplyTemplate(); _bitrateGraphCanvas = GetTemplateChild(BitrateGraphCanvasName) as Canvas; isLoaded = true; if (AvailableBitrates.Any()) { OnAvailableBitratesChanged(); } }
private async Task InitializeStreamByChannelName(string channelName) { IsBarsOpen = false; if (MediaSource != null) { MediaSource = null; OnPropertyChanged("StopMedia"); } var streamResult = await _twitchRepository.FetchStreamHLS(channelName); if (streamResult == null) { App.Current.Exit(); return; } if (streamResult.Status == AdaptiveMediaSourceCreationStatus.Success) { MediaSource = streamResult.MediaSource; IsMediaPlaying = true; if (AvailableBitrates != null) { AvailableBitrates.Clear(); } else { AvailableBitrates = new ObservableCollection <BitrateModel>(); } for (int i = 0; i < MediaSource.AvailableBitrates.Count - 1; i++) // Load bitrates { AvailableBitrates.Add(new BitrateModel() { OriginalBitrate = MediaSource.AvailableBitrates[i], BitrateName = BitrateNames[i] }); } OnPropertyChanged("MediaSource"); OnPropertyChanged("AvailableBitrates"); } else { // TODO : Log exception. } }