MPMediaItemPropertyAssetURL返回nil

时间:2016-06-28 08:05:48

标签: ios iphone avplayer mpmediaitem

我正在开展一个项目,我需要在AVPlayer中播放iTunes资料库中的歌曲。为此,我正在从"ipod-library://item/item.mp3?id=1577682869916034242"图书馆获取所选歌曲的网址iTunes,并在AVPlayer中播放相同的歌曲。几乎所有歌曲都可以播放,但是少数歌曲MPMediaItemPropertyAssetURL会返回nil URL。还会收到以下错误

  

- [AVAssetReader initWithAsset:error:]无效参数不满足:asset!=((void *)0)

对此有何建议?为什么我从

获得零值
  

MPMediaItemPropertyAssetURL

还知道如何将DRM Protected Media跟踪流转换或转换为NSData吗? 请指教。

3 个答案:

答案 0 :(得分:1)

MPMediaItemPropertyAssetURL可能由于两个可能的原因而返回null。

  1. 音乐未下载到您的设备,但已添加到音乐中 仅库。
  2. 音乐已加载,但受DRM保护。

受DRM保护的资产无法使用AVPlayer播放,它只能使用MPMusicPlayer播放。因此,在继续使用AVPlayer之前,您必须检查两件事。

  1. MPMediaItemPropertyAssetURL为零吗?
  2. MPMediaItem是否受保护?

请参见下面的代码...。

MPMediaItem *theChosenSong = [[mediaItemCollection items] firstObject];
NSURL *assetURL = [theChosenSong valueForProperty:MPMediaItemPropertyAssetURL];
    if(assetURL) {
        BOOL bIsProtected = theChosenSong.protectedAsset;
        if(!bIsProtected) {
            // Do whatever you want to do
            NSLog(@"Its not protected");
       }
        else {
            NSLog(@"Its DRM protected");
        }
    }
    else {
            NSLog(@"DRM protected or not downloaded locally");
    }

答案 1 :(得分:0)

我发现问题是我试图获取MPMediaItemPropertyAssetURL属性的歌曲实际上不在我的设备上。它被列在媒体库中,但实际上仍然在iCloud中。一旦我将歌曲下载到我的设备,问题就解决了。

答案 2 :(得分:0)

把这个答案留给像我这样的人。

即使音乐是在设备上下载的,但如果音乐受DRM保护,则FOREIGN KEY将返回MPMediaItem.value(forProperty: MPMediaItemPropertyAssetURL),如评论中所述。

我的应用一直崩溃,我通过Beta测试仪确认了这一点。

nil似乎仍支持播放,因此根据this answer