对于表示 iOS5 用户音乐库中曲目的给定 MPMediaItem,我们如何确定曲目是否为:
- 尚未從 iCloud 下載的 iTunes Match 曲目
与。
- 一个经过数字版权管理的曲目
?
在这两种情况下,MPMediaItemPropertyAssetURL 返回的 NSURL 均为 nil。因此,实例化 AVAsset 以检查可导出标志不是一个可行的解决方案。
据我了解,这取决于您使用的iOS版本。我认为在 4.3 之前,返回nil
的资产仅意味着该项目是 DRM 的,而您无权访问它。但是,在当前版本(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];
这对我来说似乎很好,但你也暗示你已经走上了同样的道路,所以我不确定这对你有多大帮助。但是,祝您的项目好运,我希望您找到所需的答案!