Я создаю приложение для потоковой передачи музыки, которое интегрируется со 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
Как я могу реализовать надежные переходы фоновых песен с помощью Spotify SDK? ⇐ IOS
Программируем под IOS
1735510951
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)
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79316451/how-can-i-implement-reliable-background-song-transitions-using-spotify-sdk[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия