Как я могу реализовать надежные переходы фоновых песен с помощью Spotify SDK?IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу реализовать надежные переходы фоновых песен с помощью Spotify SDK?

Сообщение Anonymous »

Я создаю приложение для потоковой передачи музыки, которое интегрируется со Spotify, и столкнулся с проблемами при реализации фоновых переходов песен для настраиваемого плейлиста. Каждая песня в плейлисте имеет сохраненную начальную секунду и определенную продолжительность, и приложение должно переходить к следующей песне, когда текущая достигает настроенной продолжительности.
Проблема
На переднем плане переходы работают идеально — каждая песня начинается с настроенной секунды и переходит после определенной продолжительности.
На заднем плане песни продолжают воспроизводиться до полной продолжительности, поскольку выбран метод перехода (например, «Запланировать следующую песню») не звонят.
Что Я пробовал
использовать DispatchQueue:
Я пробовал планировать переходы в DispatchQueue.main и DispatchQueue.global() с отложенным выполнением, но ни один из подходов не работает стабильно в фоновом режиме. .
Вопросы для обсуждения
Как я могу надежно планировать и выполнять переходы песен в фоновом режиме во время потоковой передачи с помощью Spotify SDK?
Существуют ли более эффективные подходы к выполнению запланированных задач в iOS, которые стабильно работают в фоновом режиме?
private func scheduleNextSong(remindDuration: TimeInterval? = nil) async {
let nextIndex = currentQueueIndex + 1
let songQueueItem = songQueue[currentQueueIndex]
let duration = remindDuration ?? TimeInterval(songQueueItem.songDuration)

guard nextIndex < songQueue.count else {
playNextSongWorkItem?.cancel()
playNextSongWorkItem = DispatchWorkItem {
self.sendToFlutterLastSong() // Notify Flutter that the last song has played
}
if let playNextSongWorkItem = playNextSongWorkItem {
DispatchQueue.global().asyncAfter(deadline: .now() + duration, execute: playNextSongWorkItem)
}
return
}

// Cancel any existing work items to prevent overlapping
playNextSongWorkItem?.cancel()
playNextSongWorkItem = DispatchWorkItem {
self.currentQueueIndex += 1
Task { await self.playCurrentSongQueue() }
}

if let playNextSongWorkItem = playNextSongWorkItem {
DispatchQueue.global().asyncAfter(deadline: .now() + duration, execute: playNextSongWorkItem)
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... potify-sdk
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»