AudioStreamer не показывает правильное время воспроизведения

#objective-c #ios #audiostreamer

#objective-c #iOS #audiostreamer

Вопрос:

у меня есть одно приложение для ios, которое воспроизводит музыку в потоковом режиме и использует библиотеку AudioStreamer mattgallagher, оно не показывает реальное время воспроизведения и никогда не останавливает воспроизведение на 0 секунд…

Кто-нибудь знает, почему это происходит??

Большое спасибо!

Ответ №1:

Я испытал нечто подобное. Посмотрите на метод выполнения в AudioStreamer.m

 - (double)progress
{
    @synchronized(self)
    {
        if (sampleRate > 0) amp;amp; ![self isFinishing])
        {
            if (state != AS_PLAYING amp;amp; state != AS_PAUSED amp;amp; state != AS_BUFFERING)
            {
                return lastProgress;
            }
    ...
        }
    }

    return lastProgress;
}
  

Теперь причина неправильного отображения прогресса заключается в двух операторах if. Когда ваш AudioStreamer файл почти завершен (возможно, когда все данные загружены), он isFinishing становится true, что заставляет его возвращать кэшированное значение для прогресса. Кроме того, состояние стримера становится AS_STOPPING , что заставляет второй оператор if возвращать lastProgress . Что вы действительно хотите, так это обновлять прогресс до тех пор, пока стример не остановится.

Моя следующая модификация кода делает это, и, похоже, работает нормально. ОДНАКО, учитывая общее качество AudioStreamer и тот факт, что он разработан Мэттом Галлахером, эти инструкции if могут быть такими, какие они есть, по определенной причине. До сих пор у меня не было никаких сбоев или подобных сбоев с моим измененным кодом, но вы должны тщательно протестировать его в своем приложении. Обратите внимание, что после завершения стримера я больше не запрашиваю прогресс. Если вы это сделаете, проверьте, работает ли это 🙂

 - (double)progress
{
    @synchronized(self)
    {
        if (sampleRate > 0))
        {
            if (state != AS_PLAYING amp;amp; state != AS_PAUSED amp;amp; state != AS_BUFFERING amp;amp; state != AS_STOPPING)
            {
                return lastProgress;
            }
    ...
        }
    }

    return lastProgress;
}
  

Комментарии:

1. привет, спасибо … я тестирую это решение, и оно работает лучше, чем после… но если я буду искать музыку в другое время, проблема повторится..

2. О, так у вас есть ползунок для изменения позиции в песне? Ну, да, у меня этого нет в моем приложении :/

3. Это решение лучше, но как только состояние переходит в AS_STOPPING состояние выполнения, обновление прекращается. Я хотел бы увидеть ответ, который исправил эту проблему.

Ответ №2:

Проблема устранена:

https://github.com/mattgallagher/AudioStreamer/issues/39