Басист ищет контент в определенной позиции - PullRequest
0 голосов
/ 27 февраля 2019

Я использую бас-плеер для воспроизведения аудио.

Как я его использую

Сначала я загружаю файл манифеста, чтобы получить список сегментированных аудиофайлов.За увиденным басом скачиваются аудиофайлы.Когда я ищу контент, я хочу повторно использовать выходящий поток.Как-то, как это работает в первый раз, потом после того, как это не сработает.

  while (!finishSeeking)
            {
                TimeSpan? currentStreamPosition = Wrapper.GetStreamPosition(streamId);

                if (!currentStreamPosition.HasValue)
                {

                    seekFailed = true;
                    break;
                }

                if (currentStreamPosition >= seekPosition)
                {
                    // reached the position we wanted
                    break;
                }

                if (previousStreamPosition < currentStreamPosition)
                {
                    lastAdvanceTime = DateTime.Now;
                    previousStreamPosition = currentStreamPosition.Value;
                }

                long seekPositionBytes = Wrapper.ConvertOffsetToNumberOfBytes(streamId, seekPosition);

                if (!Wrapper.SeekToPositionInBytes(streamId, seekPositionBytes))
                {

                    seekFailed = true;
                    break;
                }

                if (lastAdvanceTime - DateTime.Now >= SEEK_TIMEOUT)
                {

                    seekFailed = true;
                    break;
                }
            }

Функция для определения положения

public static TimeSpan? GetStreamPosition(int streamId)
        {
            long bytesOffset = GetStreamPositionInBytes(streamId);
            var secondsOffset = Bass.BASS_ChannelBytes2Seconds(streamId, bytesOffset);
            if (secondsOffset < 0)
            {
                return null;
            }
            return TimeSpan.FromSeconds(secondsOffset);
        }

И некоторые общие API басов

Bass.BASS_ChannelSeconds2Bytes(streamId, offset.TotalSeconds);

Я использую для поиска контента.После первого поиска

TimeSpan? currentStreamPosition = BassWrapper.GetStreamPosition(streamId);

никогда не дает мне времени больше, чем какое-то случайное число, иногда оно застревает на 9 с, иногда по 13 с.Из-за того, что мой цикл никогда не прерывается.

  1. Как правильно искать басиста?
  2. Как база решит загрузить следующий звук?
  3. Могу ли я сразу перейти к поиску позиции вместо выполнения длинной петли
...