AVPlayer not playing MP3 audio file in documents directory iOS
我正在使用AVPlayer播放位于文档目录中的MP3(已确认文件位于其中)-我加载
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | - (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"); } } } } |
执行此操作:
1 2 3 4 5 6 7 8 9 10 | - (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 } } |
引用avplayer-and-local-files链接
1 2 3 4 5 6 7 8 | - (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 }); |
} ??
迅速
1 2 3 4 5 6 | func setupAudio() { if NSFileManager.defaultManager().fileExistsAtPath(self.urlForEightBarAudioFile.absoluteString) { self.eightBarsPlayerItem = AVPlayerItem(asset: AVAsset(URL: self.urlForEightBarAudioFile)) self.eightBarsPlayer = AVPlayer(playerItem: self.eightBarsPlayerItem) } } |