在AVPlayer中播放慢速AVAsset的问题

use*_*946 3 avfoundation ios avplayer photokit

我正在尝试播放慢动作视频(由用户的iPhone拍摄)AVPlayer.

我正在检索AVAsset一个PHAsset来自选择器的请求:

   [manager requestAVAssetForVideo:PHAsset
                           options:videoRequestOptions
                     resultHandler:^(AVAsset * avasset, AVAudioMix * audioMix, NSDictionary * info) {}];
Run Code Online (Sandbox Code Playgroud)

问题是一旦它播放,我得到这个错误:

 -[AVComposition URL]: unrecognized selector sent to instance 0x138d17f40
Run Code Online (Sandbox Code Playgroud)

但是,如果我在管理器请求中设置此选项,它将以120/240fps的正常速度视频播放,并且不会崩溃:

  videoRequestOptions.version = PHVideoRequestOptionsVersionOriginal;
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?默认version属性PHVideoRequestOptionsVersionCurrent包含慢动作,用户编辑和修剪等.

我想播放那个视频版本.谢谢

use*_*946 7

事实证明,慢动作视频传递为AVComposition.

您可以将其导出到视频文件/ URL中,然后像处理任何其他视频一样处理它.

解决方案:https://overflow.buffer.com/2016/02/29/slow-motion-video-ios/

//Output URL
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = paths.firstObject;
NSString *myPathDocs =  [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"mergeSlowMoVideo-%d.mov",arc4random() % 1000]];
NSURL *url = [NSURL fileURLWithPath:myPathDocs];

//Begin slow mo video export
AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetHighestQuality];
exporter.outputURL = url;
exporter.outputFileType = AVFileTypeQuickTimeMovie;
exporter.shouldOptimizeForNetworkUse = YES;

[exporter exportAsynchronouslyWithCompletionHandler:^{
    dispatch_async(dispatch_get_main_queue(), ^{
        if (exporter.status == AVAssetExportSessionStatusCompleted) {
            NSURL *URL = exporter.outputURL;
            NSData *videoData = [NSData dataWithContentsOfURL:URL];

             // Upload
             [self uploadSelectedVideo:video data:videoData];
         }
    });
}];
Run Code Online (Sandbox Code Playgroud)