2

我看到对于 PHContentEditingInput ( https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHContentEditingInput_Class/index.html#//apple_ref/occ/instp/PHContentEditingInput/avAsset ),视频资产东西已被弃用。

如果我需要处理视频,我应该使用什么来代替?

(特别是来自 PHAsset 的 NSURL,他们在这里使用了不推荐使用的功能。还有什么我可以使用的未被弃用但可以获得 NSURL 的东西吗?)

编辑:所以......在我阅读了一些关于 AVFoundation 框架之后......我们如何在不使用不推荐使用的方法的情况下将我们的 PHAsset 转换为 AVURLAsset?

4

4 回答 4

2

该文档尚未针对 iOS 9 进行更新(我认为)。但是,如果您查看PHContentEditingInput.hXcode 中的标头(或生成的 Swift 接口),您会发现它只是重命名 -avAsset不推荐使用audiovisualAsset. 它仍然返回一个AVAsset对象,然后您可以使用 AVFoundation 对其进行处理。

于 2015-06-16T17:35:47.470 回答
0

如果我需要处理视频,我应该使用什么来代替

我想这取决于你所说的“过程”是什么意思,但一般来说你应该使用 AVFoundation。

于 2015-06-15T23:56:32.540 回答
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

我相信不止这两个,但从这里开始。

于 2016-04-16T08:28:36.720 回答
0

对于斯威夫特 2.0

导入文件

import AVKit

来自 PHAsset

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()
                }
            })
        })
    }
于 2016-09-22T05:34:32.300 回答