Есть ли способ разграничить треки iTunes Match и DRMed на iOS 5?
Для определенного MPMediaItem, представляющего дорожку в музыкальной библиотеке пользователя iOS5, как мы можем определить, является ли дорожка:
- трек iTunes Match, который не был загружен с iCloud
против
- DRMed трек
?
В обоих случаях NSURL, возвращаемый MPMediaItemPropertyAssetURL, равен нулю. Поэтому создание экземпляра AVAsset для проверки экспортируемого флага не является жизнеспособным решением.
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];
Кажется, это хорошо работает для меня, но вы также подразумеваете, что уже направлялись по тому же пути, так что я не уверен, насколько это вам поможет. Однако, удачи в вашем проекте, и я надеюсь, что вы найдете ответ, который ищете!