Я использую бас-плеер для воспроизведения аудио.
Как я его использую
Сначала я загружаю файл манифеста, чтобы получить список сегментированных аудиофайлов.За увиденным басом скачиваются аудиофайлы.Когда я ищу контент, я хочу повторно использовать выходящий поток.Как-то, как это работает в первый раз, потом после того, как это не сработает.
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 с.Из-за того, что мой цикл никогда не прерывается.
- Как правильно искать басиста?
- Как база решит загрузить следующий звук?
- Могу ли я сразу перейти к поиску позиции вместо выполнения длинной петли