我正在处理查看用户视频的代码,并通过带有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库中的媒体。
答案 0 :(得分:0)
MPMediaItemPropertyAssetURL / MPMediaItem assetURL为null / nil有两个原因。
受DRM保护的资产无法使用AVPlayer播放,它只能使用MPMusicPlayer播放。因此,在继续使用AVPlayer之前,您必须检查两件事。
请参见下面的代码...。
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
}