AVPlayer不在文件目录iOS中播放MP3音频文件
我正在使用AVPlayer播放位于文档目录中的MP3(确认文件在那里) – 我加载AVPlayerItem
等待AVPlayerItemStatusReadyToPlay
然后用项目和播放实例化AVPlayer
。
AVPlayerItemStatusReadyToPlay
确实被调用,但实际上没有音频播放,任何人都知道为什么?
- (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"); } } } }
做这个:
- (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链接
在迅速
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 });
}