我正在开展一个项目,我需要在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吗? 请指教。
答案 0 :(得分:1)
MPMediaItemPropertyAssetURL可能由于两个可能的原因而返回null。
受DRM保护的资产无法使用AVPlayer播放,它只能使用MPMusicPlayer播放。因此,在继续使用AVPlayer之前,您必须检查两件事。
请参见下面的代码...。
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。