我正在研究查看用户视频的代码,并通过带有URL的AVPlayerItem将它们传递给AVPlayer.
要获取iOS设备上的所有视频,您可以执行以下操作:
let videoNumber = MPMediaType.anyVideo.rawValue let predicate = MPMediaPropertyPredicate.init(value: videoNumber,forProperty: MPMediaItemPropertyMediaType) let query = MPMediaQuery.init() query.addFilterPredicate(predicate) if let items = query.items { mediaCollection = MPMediaItemCollection(items: items) // -1 would indicate an error condition print("number of items in collection is \(mediaCollection?.count ?? -1)") }
当您从items数组中选择要使用的MPMediaItem时,应该有一个assetURL.
麻烦的是,在我的设备上,我的所有assetURL属性都是NULL.巧合的是,虽然每个这些项的hasProtectedAsset都是false,但每个项的isCloudItem都是true.
我怎样才能提出一个有效的assetURL,我可以传递给任何媒体播放器?开发人员无法获得适当的参考资料并且感觉有点虚假.访问用户iPod库中的媒体.
解决方法
由于两个原因,MPMediaItemPropertyAssetURL / MPMediaItem assetURL为null / nil.
>音乐不会下载到您的设备,而是添加到音乐中
仅限图书馆.
>音乐已加载但受DRM保护.
受DRM保护的资产无法使用AVPlayer播放,它只能使用MPMusicPlayer播放.因此,在继续使用AVPlayer之前,您必须先检查两件事.
> MPMediaItemPropertyAssetURL是零?
> MPMediaItem受到保护?
请看下面的代码……
let itemUrl = targetMPMediaItem?.value(forProperty: MPMediaItemPropertyAssetURL) as? URL if itemUrl != nil { let theAsset = AVAsset(url: itemUrl!) if theAsset.hasProtectedContent { // Its DRM protected } else { // Do whatever you anat to do } } else { //probably the asset is not downloaded to this device }