对于表示iOS5用户音乐库中曲目的给定MPMediaItem,我们如何确定曲目是否为:
VS
在这两种情况下,MPMediaItemPropertyAssetURL返回的NSURL都是零。因此,实例化AVAsset以检查可导出标志不是一个可行的解决方案。
答案 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];
这似乎对我来说很好,但你也暗示你已经走了同样的道路,所以我不确定那对你有多大的帮助。但是,祝你的项目好运,我希望你能找到你想要的答案!