JYe*_*Yeh 7 video ios avasset phasset phlivephoto
有没有人想出如何从Live Photo中提取视频部分?我正在开发一个应用程序,将Live Photos转换为GIF,第一步是从Live Photo获取视频文件.它似乎应该是可能的,因为如果你将手机插入Mac,你可以看到单独的图像和视频文件.我在提取过程中碰到了一堵砖墙,我尝试了许多方法,但都失败了.
我做的第一件事是通过执行以下操作获取PHAsset,我认为它是Live Photo的视频部分:
if let livePhoto = info["UIImagePickerControllerLivePhoto"] as? PHLivePhoto {
let assetResources = PHAssetResource.assetResourcesForLivePhoto(livePhoto)
for assetRes in assetResources {
if (assetRes.type == .PairedVideo) {
let assets = PHAsset.fetchAssetsWithLocalIdentifiers([assetRes.assetLocalIdentifier], options: nil)
if let asset = assets.firstObject as? PHAsset {
Run Code Online (Sandbox Code Playgroud)
要将PHAsset转换为AVAsset,我尝试过:
asset.requestContentEditingInputWithOptions(nil, completionHandler: { (contentEditingInput, info) -> Void in
if let url = contentEditingInput?.fullSizeImageURL {
let movieUrl = url.absoluteString + ".mov"
let avAsset = AVURLAsset(URL: NSURL(fileURLWithPath: movieUrl), options: nil)
debugPrint(avAsset)
debugPrint(avAsset.duration.value)
}
})
Run Code Online (Sandbox Code Playgroud)
我不认为这个有效,因为带有duration.value的调试打印给出了0.我也试过没有添加".mov",但它仍然不起作用.
我也尝试过:
PHImageManager.defaultManager().requestAVAssetForVideo(asset, options: nil, resultHandler: { (avAsset, audioMix, info) -> Void in
debugPrint(avAsset)
})
Run Code Online (Sandbox Code Playgroud)
并且debugPrint(avAsset)打印nil,因此它不起作用.
我有点害怕他们可能无法做到,似乎我已经进入了圈子,因为看起来我得到的PHAsset仍然是Live Photo而不是视频.
Hen*_*rik 15
使用PHAssetResourceManager
从中获取视频文件PHAssetResource
.
PHAssetResourceManager.defaultManager().writeDataForAssetResource(assetRes,
toFile: fileURL, options: nil, completionHandler:
{
// Video file has been written to path specified via fileURL
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5343 次 |
最近记录: |