SPPlaybackManager - задержка и загрузка

Я использую SPPlaybackManager для воспроизведения треков, но мне трудно с некоторыми небольшими, но важными аспектами воспроизведения. Треки загружаются и передаются в потоковом режиме, но часто начинают воспроизводиться через.25 - 1.25 секунды после вызова функции обратного вызова SPAsyncLoading. Я попробовал несколько методов, чтобы увидеть, когда трек действительно начинает воспроизводиться, но все, кажется, указывают на то, что воспроизведение инициировалось в момент вызова обратного вызова SPAsyncLoading (включая воспроизведение Manager.isPlaying, воспроизведение Manager.currentTrack и т. Д.). Я определил, что воспроизведение на самом деле начинается после упомянутой ранее краткой задержки, установив NSTimer для запуска в течение 10 секунд после обратного вызова SPAsyncLoading, получая воспроизведение Manager.trackPosition через 10 секунд и найдя разницу. TL;DR - воспроизведение фактически не начинается, когда CocoaLibSpotify сообщает, что оно начинается.

Из-за этого возникает несколько проблем: во-первых, и самое главное, песня в конце прерывается тем, что изначально было между смещением и воспроизведением. Во-вторых, с точки зрения UX, я должен иметь возможность указать своим пользователям, что они находятся в "мертвом пространстве" между обратным вызовом SPAsyncLoading и фактическим воспроизведением (то есть, что трек готовится к воспроизведению, но еще не воспроизводится). Любые рекомендации по способам обойти или решить эти проблемы высоко ценится!

1 ответ

Решение

Во-первых, не используйте SPAsyncLoading для вещей, связанных с воспроизведением - это не то, для чего это, и SPPlaybackManager не подтверждает <SPAsyncLoading> тем не мение.

isPlaying недвижимость переворачивается на YES После того, как библиотека приняла дорожку для воспроизведения, вы должны основывать свой интерфейс воспроизведения / паузы на этом свойстве. Из-за задержек, кеширования и тому подобного, звук может занять некоторое время, как вы уже видели.

trackPosition свойство, однако, обновляется как прямой результат передачи звука в колонки. Использование таймера для наблюдения за этим является излишним - просто используйте KVO для наблюдения значения, и вы всегда будете синхронизированы.

Быть в курсе, что SPPlaybackManager это очень простой класс, предназначенный для воспроизведения одного трека. Для более продвинутого воспроизведения я рекомендую посмотреть код SPPlaybackManager и использовать его для базы своего собственного класса, который использует методы воспроизведения SPSession а также SPCoreAudioController напрямую - вы получите намного лучший контроль над воспроизведением. Единственный пример Objective-C, о котором я знаю, это проект Viva, а именно: VivaPlaybackManager класс закончился на GitHub. Этот класс поддерживает воспроизведение в случайном порядке, воспроизведение локальных файлов, Last.fm и т. Д., Поэтому он может быть слишком сложным, но он прекрасно выполняет многодорожечное воспроизведение без потери одного сэмпла.

Другие вопросы по тегам