我正在使用 aMPMediaPickerController
使用户能够从设备的 iPod 库中挑选歌曲。然后我将这些歌曲放入一个数组(在这种情况下playerQueue
)并使用一个AVPlayer
实例来播放一首又一首的歌曲:
- (void)setQueueWithItemCollection:(MPMediaItemCollection *)theCollection {
for (MPMediaItem *theMediaItem in theCollection.items) {
NSURL *mediaURL = [theMediaItem valueForProperty:MPMediaItemPropertyAssetURL];
AVPlayerItem *thePlayerItem = [AVPlayerItem playerItemWithURL:mediaURL];
// Don't add protected tracks to queue as they cannot be played
if (!thePlayerItem.asset.hasProtectedContent && thePlayerItem.asset.isPlayable) [self.playerQueue addObject:thePlayerItem];
// Further implementation
}
}
现在我使用这个代码片段(带AVPlayer *musicPlayer
)获得歌曲标题:
AVPlayerItem *currentItem = self.musicPlayer.currentItem;
AVAsset *asset = currentItem.asset;
// Further implementation
NSLog(@"DEBUG: Meta data: %@", asset.commonMetadata);
NSArray *titles = [AVMetadataItem metadataItemsFromArray:asset.commonMetadata withKey:AVMetadataCommonKeyTitle keySpace:AVMetadataKeySpaceCommon];
大多数情况下,这没有任何问题。但也有asset.commonMetadata
返回空数组的歌曲。但是,我 iPhone 上的音乐应用程序能够像 iTunes(在 Mac 上)一样显示歌曲标题(和专辑封面等)。
歌曲文件是Apple MPEG 4 Audio
从 iTunes Store 购买的文件。
asset.commonMetadata
即使有可用的元数据,为什么返回一个空数组?