示例#1
0
        /// <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;
            });
        }
示例#2
0
        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));
 }