我看到PHContentEditingInput(https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHContentEditingInput_Class/index.html#//apple_ref/occ/instp/PHContentEditingInput/avAsset),视频资产的内容已被弃用。
如果我需要处理视频,我应该使用什么呢?
(特别是NSURL from PHAsset,他们在这里使用了这个已弃用的函数。还有其他我可以使用的东西不被弃用但可以获得NSURL吗?)
编辑:所以......在我读了一下AVFoundation框架后......我们究竟如何在不使用弃用方法的情况下将PHAsset转换为AVURLAsset?
答案 0 :(得分:2)
iOS 9尚未更新文档(但我已假设)。但是,如果您查看Xcode中的PHContentEditingInput.h
标题(或生成的Swift界面),您会发现它只是重命名 - avAsset
已弃用,而不是audiovisualAsset
。它仍然返回一个AVAsset
对象,然后您可以使用AVFoundation进行处理。
答案 1 :(得分:0)
如果我需要处理视频,我应该使用什么
这取决于你的意思"进程",我想,但一般来说你应该使用AVFoundation。
答案 2 :(得分:0)
您从AVURLAsset对象中寻找什么类型的URL?有两种变体,区别总是相关的(例如,使用UIImagePickerController生成的URL与AVAssetReader / Writer使用的URL)。他们在这里:
[[PHImageManager defaultManager] requestAVAssetForVideo:phAsset options:nil resultHandler:^(AVAsset *avAsset, AVAudioMix *audioMix, NSDictionary *info) {
NSURL *url = (NSURL *)[[(AVURLAsset *)avAsset URL] fileReferenceURL];
NSLog(@"url = %@", [url absoluteString]);
NSLog(@"url = %@", [url relativePath]);
}];
虽然phAsset是PHAsset对象,而avAsset是由PHImageManager生成的结果AVAsset对象,但从上面的代码输出到控制台将产生,例如:
2016-04-16 01:15:40.155 ChromaEpsilon[3423:933358] url = file:///.file/id=16777218.8262005
2016-04-16 01:15:40.155 ChromaEpsilon[3423:933358] url = /private/var/mobile/Media/DCIM/108APPLE/IMG_8421.MOV
我相信,不仅仅是这两个,而是从这里开始。
答案 3 :(得分:0)
Swift 2.0
import AVKit
static func playVideo (view:UIViewController, asset:PHAsset) {
guard (asset.mediaType == PHAssetMediaType.Video)
else {
print("Not a valid video media type")
return
}
PHCachingImageManager().requestAVAssetForVideo(asset, options: nil, resultHandler: {(asset: AVAsset?, audioMix: AVAudioMix?, info: [NSObject : AnyObject]?) in
let asset = asset as! AVURLAsset // you are looking for
dispatch_async(dispatch_get_main_queue(), {
let player = AVPlayer(URL: asset.URL)
let playerViewController = AVPlayerViewController()
playerViewController.player = player
view.presentViewController(playerViewController, animated: true) {
playerViewController.player!.play()
}
})
})
}