对于代表 iOS5 用户音乐库中曲目的给定 MPMediaItem,我们如何确定曲目是否为:
- 尚未从 iCloud 下载的 iTunes Match 曲目
对比
- 一个 DRMed 轨道
?
在这两种情况下,MPMediaItemPropertyAssetURL 返回的 NSURL 都是 nil。因此,实例化一个 AVAsset 来检查可导出标志不是一个可行的解决方案。
对于代表 iOS5 用户音乐库中曲目的给定 MPMediaItem,我们如何确定曲目是否为:
对比
?
在这两种情况下,MPMediaItemPropertyAssetURL 返回的 NSURL 都是 nil。因此,实例化一个 AVAsset 来检查可导出标志不是一个可行的解决方案。
据我了解,这取决于您使用的 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];
这对我来说似乎很好,但你也暗示你已经走上了同样的道路,所以我不确定这对你有多大帮助。然而,祝你的项目好运,我希望你能找到你正在寻找的答案!