Это мое понимание, что это зависит от версии 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];
Это, кажется, работает хорошо для меня, но вы также предполагают, что вы возглавили вниз по тому же пути, уже, так что я не знаю, сколько помочь вам. Однако, удачи с вашим проектом, и я надеюсь, что вы найдете ответ, который вы ищете!
Я могу сказать, что на iOS 5 URL-адрес ресурса равен нулю в случаях iCloud и DRM. Поэтому ваше решение (и это то, что я пробовал) не решает эту проблему. – awolf
Я думаю, что у нас очень разные впечатления, использующие ОС. Позвольте мне знать, что вы нашли/нашли решение, я был бы благодарен, если бы услышал его. – btomw