1

对于代表 iOS5 用户音乐库中曲目的给定 MPMediaItem,我们如何确定曲目是否为:

  • 尚未从 iCloud 下载的 iTunes Match 曲目

对比

  • 一个 DRMed 轨道

?

在这两种情况下,MPMediaItemPropertyAssetURL 返回的 NSURL 都是 nil。因此,实例化一个 AVAsset 来检查可导出标志不是一个可行的解决方案。

4

1 回答 1

1

据我了解,这取决于您使用的 iOS 版本。我认为可能在 4.3 之前,资产退回nil仅意味着该项目已被 DRMed 并且您无权访问它。但是,在当前版本 (5) 中,nil 意味着它只是 iCloud。也许您有一些您认为只是 DRM 的曲目,但实际上是 iCloud 存储的歌曲。在我正在开发的当前应用程序中,我最初根本没有考虑 iCloud 轨道(因为我将应用程序定位为 iOS 的早期版本),所以根据我使用的设备,我遇到了崩溃。为了解决问题并测试 iCloud/DRM,我使用:

AVURLAsset* asset;
NSURL* realAssetUrl = [item valueForProperty:MPMediaItemPropertyAssetURL];
if(!realAssetUrl){
    //track is iCloud
}

asset = [[AVURLAsset alloc]initWithURL:realAssetUrl options:nil];
if(asset == nil || asset.hasProtectedContent){
    //asset is DRMed such that it cannot be played back.
            //most apps can stop here but I need to be able to export the song

}
if (!asset.exportable || !asset.readable){
    //the asset cannot be exported and thus cannot be cached to a file
            //the current app directory and cannot be transferred over network
            //if asset passed earlier check, can still be used for local playback
}
[asset release];

这对我来说似乎很好,但你也暗示你已经走上了同样的道路,所以我不确定这对你有多大帮助。然而,祝你的项目好运,我希望你能找到你正在寻找的答案!

于 2012-08-16T16:33:23.803 回答