Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

188
Views
Reorganizar la cola de música de MediaPlayer [iOS]

Realmente estoy luchando por resolver algo y he buscado en Internet y no puedo encontrar una respuesta. Como sabe, las aplicaciones de música como Spotify y Apple Music le permiten al usuario reorganizar la siguiente cola incluso mientras escucha una canción. No he sido capaz de averiguar cómo hacer lo mismo. Quiero poder reorganizar completamente la cola, lo que incluye agregar, eliminar y mover canciones en la siguiente cola. He intentado varias formas de hacerlo, como

 musicPlayer.setQueue([queue])

pero esto me obligaría a llamar a musicPlayer.prepareToPlay() después de actualizar la cola, lo que terminaría con la canción actual e iniciaría la nueva cola.

También he intentado usar

 musicPlayer.perform(queueTransaction: { (currentQueue) in let oldItems = currentQueue.items var currentItem: MPMediaItem? = nil for (i, item) in oldItems.enumerated() { if i == musicPlayer.indexOfNowPlayingItem { currentItem = item continue } currentQueue.remove(item) } currentQueue.insert(queue, after: currentItem) }, completionHandler: { (newQueue, error) in if let error = error { print("there was an error updating the queue", error) return } print("=== NEW QUEUE ===") //insert does not work for item in newQueue.items { print(" -", item.title ?? "[No Title]") } })

pero como sabrá por esta pregunta: MPMusicPlayerControllerMutableQueue inserta una canción de Apple Music que no funciona

la función de inserción después del elemento de una cola no parece funcionar (y también he intentado configurar el elemento en cero, lo que a veces elimina el elemento actual y establece la cola en nada). También sé sobre musicPlayer.prepend([queue]) que agregará la nueva cola después del elemento que se está reproduciendo actualmente, pero también tendría que eliminar la cola anterior de la memoria para que la siguiente cola no tenga más de 300 canciones. . También intenté usar la función prepend dentro de la transacción de la cola, pero a veces la canción se detenía en el medio y el reproductor de música configuraba nowPlayingItem en cero. Realmente espero que alguien sepa la respuesta a esto porque he tenido este problema durante más de 4 días y parece que no puedo encontrar una solución que funcione el 100% del tiempo.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

MPMusicPlayerController (y sus subclases relacionadas) hace que sea muy difícil administrar una cola como esta sin problemas. Si no recuerdo mal, ni siquiera puede agregar objetos MPMediaItem duplicados a la cola, y al tocar los medios de reproducción desde el Centro de control, en realidad se iniciará la aplicación Música en lugar de la suya. Esencialmente, su aplicación solo puede actuar como un caparazón para la experiencia de reproducción de música, y la aplicación Música está haciendo todo el trabajo pesado.

Dependiendo de sus requisitos, puede tener otra opción, aunque con algunos compromisos. El marco de trabajo de AVFoundation proporcionaAVPlayer y AVQueuePlayer , que facilitan la administración de una cola y brindan opciones de reproducción más avanzadas. Sin embargo, está limitado a reproducir solo contenido descargado y sin DRM (es decir, las canciones de Apple Music no funcionarán).

Configura tu reproductor:

 let audioPlayer = AVQueuePlayer() // Play next song in queue. NotificationCenter.default.addObserver(self, selector: #selector(didPlayToEndTime), name: .AVPlayerItemDidPlayToEndTime, object: nil) // Recover from failed playback. NotificationCenter.default.addObserver(self, selector: #selector(failedToPlayToEndTime(_:)), name: .AVPlayerItemFailedToPlayToEndTime, object: nil) // Resume music after interruptions. NotificationCenter.default.addObserver(self, selector: #selector(handleAudioSessionInterruption(_:)), name: .AVAudioSessionInterruption, object: AVAudioSession.sharedInstance())

Insertar nuevos elementos en la cola:

 let media = MPMediaQuery.songs() let mediaItem: MPMediaItem = media.items.first! // MPMediaItem objects stored in iCloud or from Apple Music // will not have a URL, therefore, they cannot be played. guard let assetURL: URL = mediaItem.assetURL else { return } let playerItem = AVPlayerItem(url: assetURL) playerItem.seek(to: kCMTimeZero) audioPlayer.insert(playerItem, after: nil)

En mi aplicación de reproductor de música, mantengo una Array de medios para que sea realmente sencillo reordenar, insertar y eliminar medios, y un índice para realizar un seguimiento de la pista que se está reproduciendo actualmente. Luego paso los medios a AVQueuePlayer uno o dos a la vez, de modo que no tengo que jugar con sus API para insertar/eliminar medios.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!