我正在开展一个项目,我需要在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?请指教。
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");
}
我发现问题是我试图获取MPMediaItemPropertyAssetURL属性的歌实际上不在我的设备上。它被列在媒体库中,但实际上仍然在iCloud中。一旦我将歌曲下载到我的设备,问题就解决了。
给我这样的其他人留下这个答案。
即使音乐已在设备上下载,如果受DRM保护,MPMediaItem.value(forProperty: MPMediaItemPropertyAssetURL)
将返回评论中提到的nil
。
我的应用程序一直崩溃,我用我的beta测试员证实了这一点。
根据MPMusicPlayerController
,似乎this answer仍支持播放。