/// <summary> /// Starts tracking buffering progress. /// </summary> /// <param name="cancellationToken">Cancellation handling token.</param> private void StartBuferingHandle(CancellationToken cancellationToken) { Task.Run(() => { ConnectionState = ConnectionState.Buffering; while (Bass.BASS_ChannelIsActive(handle) != BASSActive.BASS_ACTIVE_PLAYING && !cancellationToken.IsCancellationRequested) { Int64 filePosition = Bass.BASS_StreamGetFilePosition(handle, BASSStreamFilePosition.BASS_FILEPOS_BUFFERING); Int64 bufferingPercentage = 100 - filePosition; BufferingProgressChanged?.Invoke(bufferingPercentage); if (bufferingPercentage < 0 || bufferingPercentage >= 100) { ConnectionState = ConnectionState.None; return; } Thread.Sleep(50); } ConnectionState = ConnectionState.None; }); }
private void RegisterBufferingCallback() { _bufferingProgressCallback = (percent, _) => { Log.Debug(PlayerLog.Tag, $"Buffering callback with percent { percent }"); BufferingProgressChanged?.Invoke(this, new BufferingProgressChangedEventArgs(percent)); }; NativePlayer.SetBufferingCb(Handle, _bufferingProgressCallback). ThrowIfFailed("Failed to set BufferingProgress"); }
private void MediaElement_BufferingProgressChanged(object sender, RoutedEventArgs e) { BufferingProgressChanged.IfNotNull(i => i(this, MediaElement.BufferingProgress)); }