AVPlayer no reproduce files de audio MP3 en el directory de documentos iOS

Estoy usando AVPlayer para reproducir un MP3 ubicado en el directory de documentos (se confirma que el file está allí) – AVPlayerItem el AVPlayerItem espera del AVPlayerItemStatusReadyToPlay y AVPlayer el AVPlayer con el elemento y reproducción.

Se AVPlayerItemStatusReadyToPlay , pero no se reproduce audio, ¿alguien tiene una idea de por qué?

 - (void)checkFileExists { if (![[NSFileManager defaultManager] fileExistsAtPath:[self.urlForEightBarAudioFile path]]) { [self beginEightBarDownload]; } else { // set up audio [self setupAudio]; //NSLog(@"file %@ already exists", [self.urlForEightBarAudioFile path]); } } - (void)setupAudio { AVAsset *eightBarAsset = [AVAsset assetWithURL:self.urlForEightBarAudioFile]; self.eightBarsPlayerItem = [[AVPlayerItem alloc] initWithAsset:eightBarAsset]; [self.eightBarsPlayerItem addObserver:self forKeyPath:@"status" options:0 context:nil]; } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if ([object isKindOfClass:[AVPlayerItem class]]) { AVPlayerItem *item = (AVPlayerItem *)object; if ([keyPath isEqualToString:@"status"]) { switch(item.status) { case AVPlayerItemStatusFailed: break; case AVPlayerItemStatusReadyToPlay: self.player = [[AVPlayer alloc] initWithPlayerItem:self.eightBarsPlayerItem]; [self.player play]; NSLog(@"player item status is ready to play"); break; case AVPlayerItemStatusUnknown: NSLog(@"player item status is unknown"); break; } } else if ([keyPath isEqualToString:@"playbackBufferEmpty"]) { if (item.playbackBufferEmpty) { NSLog(@"player item playback buffer is empty"); } } } } 

Hacer esto:

 - (void)setupAudio { if([NSFileManager defaultManager] fileExistsAtPath:[self.urlForEightBarAudioFile absoluteString]]) { AVAsset *eightBarAsset = [AVAsset assetWithURL:self.urlForEightBarAudioFile]; self.eightBarsPlayerItem = [[AVPlayerItem alloc] initWithAsset:eightBarAsset]; self.eightBarsPlayer = [AVPlayer playerWithPlayerItem:self.eightBarsPlayerItem]; //forgot this line [self.eightBarsPlayer addObserver:self forKeyPath:@"status" options:0 context:nil]; // add observer for player not item } } 

Consulte el enlace avplayer-and-local-files

en swift

 func setupAudio() { if NSFileManager.defaultManager().fileExistsAtPath(self.urlForEightBarAudioFile.absoluteString) { self.eightBarsPlayerItem = AVPlayerItem(asset: AVAsset(URL: self.urlForEightBarAudioFile)) self.eightBarsPlayer = AVPlayer(playerItem: self.eightBarsPlayerItem) } } 
 - (void)setupAudio { dispatch_async(dispatch_get_main_queue(), ^{ AVAsset *eightBarAsset = [AVAsset assetWithURL:self.urlForEightBarAudioFile]; self.eightBarsPlayerItem = [[AVPlayerItem alloc] initWithAsset:eightBarAsset]; self.eightBarsPlayer = [AVPlayer playerWithPlayerItem:self.eightBarsPlayerItem]; //forgot this line [self.eightBarsPlayer addObserver:self forKeyPath:@"status" options:0 context:nil]; // add observer for player not item }); 

}