在AVPlayer中播放慢动作AVAset时出现问题 [英] Issue playing slow-mo AVAsset in AVPlayer
问题描述
我正在尝试在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屋!