在AVPlayer中播放慢动作AVAset时出现问题 [英] Issue playing slow-mo AVAsset in AVPlayer

查看:307
本文介绍了在AVPlayer中播放慢动作AVAset时出现问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm trying to play an slow motion video (filmed by the user's iPhone) in an AVPlayer.

我正在从选择器中请求PHAsset来检索AVAsset:

I am retrieving the AVAsset with a request on a PHAsset from a picker:

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

问题是一旦播放,我会收到此错误:

The problem is once it plays, I get this error:

 -[AVComposition URL]: unrecognized selector sent to instance 0x138d17f40

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

However, if I set this option on the manager request, it will play as normal speed video at 120/240fps and no crashes:

  videoRequestOptions.version = PHVideoRequestOptionsVersionOriginal;

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

Whats going on? The default version property is PHVideoRequestOptionsVersionCurrent which incorporates slow motion, user edits and trims, etc.

我想播放该视频版本.谢谢

I would like to play that video version. Thanks

推荐答案

因此,慢动作视频以AVComposition的形式传递.

So it turns out that slow motion videos are passed as AVComposition.

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

You can export that into a video file / URL, and then handle it like any other video.

此处的解决方案: 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];
         }
    });
}];

这篇关于在AVPlayer中播放慢动作AVAset时出现问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆