有没有办法区分iOS 5上的iTunes Match和DRMed曲目?

时间:2012-06-28 19:58:35

标签: objective-c ios5 drm mpmediaitem avasset

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

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

VS

  • a DRMed track

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

1 个答案:

答案 0 :(得分:1)

据我了解,这取决于您使用的iOS版本。我认为在4.3之前,返回nil的资产只意味着该项目是DRMed而您无法访问它。但是,在当前版本(5)中,nil表示它只是iCloud。也许你有你认为只是DRMed但实际上是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];

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