MPMediaItemPropertyAssetURL返回nil

问题描述 投票:4回答:3

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

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

有什么建议吗?为什么我从中得到零值

MPMediaItemPropertyAssetURL

还有任何想法如何流式传输或转换DRM Protected Media轨道到NSData?请指教。

ios iphone avplayer mpmediaitem
3个回答
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");
    }

0
投票

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


0
投票

给我这样的其他人留下这个答案。

即使音乐已在设备上下载,如果受DRM保护,MPMediaItem.value(forProperty: MPMediaItemPropertyAssetURL)将返回评论中提到的nil

我的应用程序一直崩溃,我用我的beta测试员证实了这一点。

根据MPMusicPlayerController,似乎this answer仍支持播放。

© www.soinside.com 2019 - 2024. All rights reserved.