MPNowPlayingInfoPropertyElapsedPlaybackTime no se establece correctamente

Estoy intentando establecer correctamente el time de reproducción transcurrido. Cuando se llama a la function player.seek o la pista está en pausa, el time transcurrido ahora playinginfocenter no se actualiza. Inicío nowplayinginfocenter con setNowPlaying () y luego llamo setNowPlayingCurrentTime cuando se busca la pista para actualizarla en el centro de información.

Sin embargo, cuando esto se llama, el time transcurrido se restablece a 0.

Cualquier consejo sería muy útil por favor.

private func setNowPlaying(track: Track) { //set now playing info center if NSClassFromString("MPNowPlayingInfoCenter") != nil { //artwork var url = NSURL(string: track.artworkUrl!) var data = NSData(contentsOfURL: url!) var image = UIImage(data: data!) var albumArt = MPMediaItemArtwork(image: image) var songInfo: NSMutableDictionary = [ MPMediaItemPropertyTitle: track.title!, MPMediaItemPropertyArtwork: albumArt, MPMediaItemPropertyArtist: track.userName!, MPMediaItemPropertyPlaybackDuration: track.duration!, MPNowPlayingInfoPropertyPlaybackRate: 0 ] MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = songInfo as NSObject as! [NSObject : AnyObject] } if (AVAudioSession.shanetworkingInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)) { println("Receiving remote control events") UIApplication.shanetworkingApplication().beginReceivingRemoteControlEvents() } else { println("Audio Session error.") } } private func setNowPlayingCurrentTime(track: Track, time: Float64) { var songInfo: NSDictionary = MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo songInfo.mutableCopy().setValue(Double(time), forKey: MPNowPlayingInfoPropertyElapsedPlaybackTime) println("test") println(songInfo.mutableCopy().valueForKey(MPNowPlayingInfoPropertyElapsedPlaybackTime)) MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = songInfo.mutableCopy() as! NSObject as! [NSObject : AnyObject] } 

Lo hice de la siguiente manera (Swift 2): la key estaba configurando correctamente los attributes en reproducción / pausa.

  func play() { if self.player.currentItem != nil { player.play() //mpnowplaying info center MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo![MPNowPlayingInfoPropertyElapsedPlaybackTime] = CMTimeGetSeconds(player.currentTime()) MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo![MPNowPlayingInfoPropertyPlaybackRate] = 1 } else { loadTrackToPlayer() player.play() //mpnowplaying info center MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo![MPNowPlayingInfoPropertyElapsedPlaybackTime] = CMTimeGetSeconds(player.currentTime()) MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo![MPNowPlayingInfoPropertyPlaybackRate] = 1 } } func pause() { if self.player.currentItem != nil { player.pause() MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo![MPNowPlayingInfoPropertyPlaybackRate] = 0 MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo![MPNowPlayingInfoPropertyElapsedPlaybackTime] = CMTimeGetSeconds(player.currentTime()) } } 

Swift 3

  if player.currentItem != nil { MPNowPlayingInfoCenter.default().nowPlayingInfo![MPNowPlayingInfoPropertyElapsedPlaybackTime] = CMTimeGetSeconds(player.currentTime()) MPNowPlayingInfoCenter.default().nowPlayingInfo![MPNowPlayingInfoPropertyPlaybackRate] = 1 } 

Debería disparar esto en pausa, salto, cambios de velocidad, etc.

Ejemplo de pausa.

  if player.currentItem != nil { MPNowPlayingInfoCenter.default().nowPlayingInfo![MPNowPlayingInfoPropertyElapsedPlaybackTime] = CMTimeGetSeconds(player.currentTime()) MPNowPlayingInfoCenter.default().nowPlayingInfo![MPNowPlayingInfoPropertyPlaybackRate] = 0 } 

No necesita actualizar el movimiento del depurador, la pantalla de locking calculará los times para usted siempre que haya configurado la duración de la reproducción en nowPlayingInfo.