如何检测MPMediaItem是否代表iOS上受DRM保护的音轨

Cha*_*ock 19 iphone drm mpmediaitem

我想知道代表音乐曲目的MPMediaItem是否适用于受Fairplay/DRM保护的项目.有什么办法吗?

Jus*_*ent 10

我是这样做的:

MPMediaItem* item;

NSURL* assetURL = [item valueForProperty:MPMediaItemPropertyAssetURL];
NSString *title=[item valueForProperty:MPMediaItemPropertyTitle];

if (!assetURL) {
    /*
     * !!!: When MPMediaItemPropertyAssetURL is nil, it typically means the file
     * in question is protected by DRM. (old m4p files)
     */
    NSLog(@"%@ has DRM",title);
}
Run Code Online (Sandbox Code Playgroud)


voi*_*ern 6

从iOS 4.2开始,有一种方法.这里的示例可能有一个更有效的方法(但对于我的应用程序,我还需要创建AVPlayerItems).

MPMediaItem item;
NSURL *assetURL = [item valueForProperty:MPMediaItemPropertyAssetURL];
AVPlayerItem *avItem = [[AVPlayerItem alloc] initWithURL:assetURL];
BOOL fairplayed = avItem.asset.hasProtectedContent;
Run Code Online (Sandbox Code Playgroud)

  • 目前无法播放的未受保护的物品也将返回零.最常见的iTunes Match中的项目不是设备本地的. (5认同)
  • 由于[item valueForProperty:MPMediaItemPropertyAssetURL]为DRM返回nil,因此您的AVPlayerItem将以nil创建? (2认同)

Jos*_* B. 5

从iOS 4.2开始,AVAsset该类有一个属性,hasProtectedContent因此您可以检查:

NSURL *assetURL = [item valueForProperty:MPMediaItemPropertyAssetURL];
AVAsset *asset = [AVAsset assetWithURL:assetURL];

if ([asset hasProtectedContent] == NO) {..do your stuff..}
Run Code Online (Sandbox Code Playgroud)

  • 注意,这个hasProtectedContent调用相对较慢; 在大约100首非DRMed歌曲上调用它在iPhone 4S上大约需要4秒钟. (3认同)