我有iOS6及以上版本的音乐播放器应用程序。我的音乐播放器工作正常,它可以在线播放音乐(流媒体)和离线播放(本地mp3文件)。
当我连接到我的设备(iPad或iPhone)蓝牙耳机时出现问题,如果设备解锁则工作正常但是当设备锁定时,音乐会持续到歌曲结束,然后再尝试播放这首歌没有播放。 经过一些调试后,我意识到问题只是本地文件而且看起来文件不是“可玩”的,但实际上是因为设备解锁后工作正常。
我的代码:
NSURL *URL = [[NSURL alloc] initFileURLWithPath:path];
AVAsset *asset = [AVURLAsset URLAssetWithURL:URL options:nil];
if(asset.isPlayable) {
AVPlayerItem *anItem = [AVPlayerItem playerItemWithAsset:asset];
_player = [AVPlayer playerWithPlayerItem:anItem];
if(![self isPlaying]) {
[self play];
}
}
“if(asset.isPlayable){”中的代码永远不会被执行。
更新
我已经使用@ MDB983建议更改了我的代码,但无论如何它都无法正常工作。
NSURL *URL = [[NSURL alloc] initFileURLWithPath:path];
AVPlayerItem *anItem = [AVPlayerItem playerItemWithURL:URL];
if(_player == nil) {
_player = [AVPlayer playerWithPlayerItem:anItem];
} else {
[_player replaceCurrentItemWithPlayerItem:anItem];
}
if(![self isPlaying]) {
[self play];
}
有什么想法吗?
答案 0 :(得分:1)
您是否正在设置MPNowPlayingInfoCenter现在正在发布信息' ?
通过AVPlayer播放流媒体文件时发现了同样的问题。文件一完成,就会在显示锁定屏幕时播放下一个文件。解决方案是填充MPNowPlayingInfoCenter的nowPlayingInfo;尝试在播放新曲目之前添加类似的内容进行设置;
UIImage *artworkImage = [UIImage imageWithName:@"artworkImage.jpg"];
MPMediaItemArtwork *artwork = [[MPMediaItemArtwork alloc]initWithImage:artworkImage];
[MPNowPlayingInfoCenter defaultCenter].nowPlayingInfo = [NSDictionary dictionaryWithObjectsAndKeys:@"My Song Title", MPMediaItemPropertyTitle,
@"Artist Name", MPMediaItemPropertyArtist,
artwork, MPMediaItemPropertyArtwork,
1.0f, MPNowPlayingInfoPropertyPlaybackRate, nil];
我遇到的另一个问题是,AVPlayer必须在显示锁定屏幕之前进行实例化,因此您应该修改方法并将AVPlayer创建为属性,并在每次更改歌曲时设置新的AVPlayerItem,如下所示;
AVPlayerItem *anItem = [AVPlayerItem playerItemWithAsset:asset];
[self.player replaceCurrentItemWithPlayerItem:anItem];
答案 1 :(得分:0)
我终于解决了我的问题。
关键在于AVPlayer,它是文件存储。在本地存储我的文件之前,我加密文件然后播放它我解密它。
问题是我正在保存这样的文件:
BOOL success = [encryptedResult writeToFile:path options:NSDataWritingFileProtectionComplete error:&error];
因此,当设备被锁定时,我无法正确读取文件,如Apple's documentation中所述。
我到处改变了:
BOOL success = [encryptedResult writeToFile:path options:NSDataWritingFileProtectionNone error:&error];
它就像一个魅力。