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 и т. Д., Поэтому он может быть слишком сложным, но он прекрасно выполняет многодорожечное воспроизведение без потери одного сэмпла.