commonMetadata数组为空,用于iPod库中的某些歌曲

时间:2013-03-29 12:06:17

标签: iphone avasset

我正在使用MPMediaPickerController使用户能够从设备的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上)一样显示歌曲标题(和专辑插图等)。

歌曲文件是从iTunes Store购买的Apple MPEG 4 Audio文件。

为什么即使有可用的元数据,asset.commonMetadata也会返回一个空数组?

2 个答案:

答案 0 :(得分:0)

我在下载的m4b音频文件时遇到了同样的问题。事实证明,AVURLAsset要求URL字符串以'.m4b'结尾(我怀疑其他音频扩展可以工作)。如果类似于http://source.com/download.php?id=12345,则无法使用该URL。否则,asset.commonMetaData只返回一个空数组。我不知道这是否是iTunes assetURL的问题,但它很容易检查。

答案 1 :(得分:0)

唯一对我有用的解决方案:

使用AudioToolbox.framework从这些文件中检索元数据,即使用AudioFileGetProperty函数。

AVFoundation ......

似乎是一个真正的错误