使用 localIdentifier 访问视频,swift
Access video using localIdentifier, swift
我想打开一个视频,我有本地标识符。我知道我可以像这样创建一个 AVPlayer,
let player = AVPlayer(URL: NSURL(fileURLWithPath: path))
是否可以通过提供本地标识符来打开视频?
我将视频用作 PHAsset 来获取其本地标识符。可以使用 PHFetchOptions 和 fetchAssetCollectionsWithLocalIdentifiers,但是,它就像一个查询。如果我有 localIdentifier,是否有更直接的方法来访问视频或图像?
如果您要在 AVPlayer
中展示视频资产,最好请求照片向玩家提供 AVPlayerItem
。假设您在照片库中有视频资产的 localIdentifier
,您需要首先找到代表该资产的 PHAsset
:
let assets = PHAsset.fetchAssetsWithLocalIdentifiers([identifier], options: nil)
guard let asset = assets.firstObject as? PHAsset
else { fatalError("no asset") }
获得 PHAsset
后,您可以使用 PHImageManager
获取资产的视频内容(以 AVPlayerItem
的形式):
let options = PHVideoRequestOptions()
options.networkAccessAllowed = true
let requestID = PHImageManager.defaultManager().requestPlayerItemForVideo(asset,
options: options,
resultHandler: { playerItem, info in
guard let item = playerItem
else { fatalError("can't get player item: \(info)") }
// send the item to whatever you're playing AV content with, e.g.
myAVPlayerViewController.player = AVPlayer(playerItem: item)
}
)
我想打开一个视频,我有本地标识符。我知道我可以像这样创建一个 AVPlayer,
let player = AVPlayer(URL: NSURL(fileURLWithPath: path))
是否可以通过提供本地标识符来打开视频?
我将视频用作 PHAsset 来获取其本地标识符。可以使用 PHFetchOptions 和 fetchAssetCollectionsWithLocalIdentifiers,但是,它就像一个查询。如果我有 localIdentifier,是否有更直接的方法来访问视频或图像?
如果您要在 AVPlayer
中展示视频资产,最好请求照片向玩家提供 AVPlayerItem
。假设您在照片库中有视频资产的 localIdentifier
,您需要首先找到代表该资产的 PHAsset
:
let assets = PHAsset.fetchAssetsWithLocalIdentifiers([identifier], options: nil)
guard let asset = assets.firstObject as? PHAsset
else { fatalError("no asset") }
获得 PHAsset
后,您可以使用 PHImageManager
获取资产的视频内容(以 AVPlayerItem
的形式):
let options = PHVideoRequestOptions()
options.networkAccessAllowed = true
let requestID = PHImageManager.defaultManager().requestPlayerItemForVideo(asset,
options: options,
resultHandler: { playerItem, info in
guard let item = playerItem
else { fatalError("can't get player item: \(info)") }
// send the item to whatever you're playing AV content with, e.g.
myAVPlayerViewController.player = AVPlayer(playerItem: item)
}
)