如何将实时照片上传到服务器?我正在使用AFNetworking上传图像,视频和慢动作视频。上传图片和视频非常简单。
上传图片和视频
//Physical location i.e. URL for video
PHVideoRequestOptions *options = [PHVideoRequestOptions new];
options.networkAccessAllowed = YES;
[[PHImageManager defaultManager] requestAVAssetForVideo:asset options:options resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) {
if ([asset isKindOfClass:[AVURLAsset class]]) {
NSLog(@"%@",((AVURLAsset *)asset).URL);
}
}];
//Physical location i.e. URL for an image
[asset requestContentEditingInputWithOptions:nil
completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) {
NSURL *imageURL = contentEditingInput.fullSizeImageURL;
}];
这些网址用于上传图片和视频文件。
// manager is of class AFHTTPSessionManager initialised with background session.
NSURLsession *uploadTask=[manager uploadTaskWithRequest:request
fromFile:[NSURL URLWithString:fdi.filePath]
progress:nil
completionHandler:nil];
慢动作文件是2个或更多视频文件的组合。如果您尝试像普通视频文件一样上传它,那么它将失去其慢动作功能。要解决这个问题,首先我们必须创建一个慢动作文件,然后将其保存在磁盘上然后上传。
PHVideoRequestOptions *options = [PHVideoRequestOptions new];
options.networkAccessAllowed = YES;
[[PHImageManager defaultManager] requestAVAssetForVideo:asset options:options resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) {
if(([asset isKindOfClass:[AVComposition class]] && ((AVComposition *)asset).tracks.count == 2)){
//Added by UD for slow motion videos. See Here: 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;
self.filePath=URL.absoluteString;
NSURLsession *uploadTask=[manager uploadTaskWithRequest:request
fromFile:[NSURL URLWithString:self.filePath]
progress:nil
completionHandler:nil];
//Use above method or use the below one.
// NSData *videoData = [NSData dataWithContentsOfURL:URL];
//
//// Upload
//[self uploadSelectedVideo:video data:videoData];
}
});
}];
}
}];
如何上传动态照片?
实时照片是2个文件的组合,* .jpg和* mov。我们既不能像照片或视频那样上传它,也不能像我们对慢动作视频一样使用2个或更多文件的组合创建新文件,因为我们必须将实时照片的文件发送到服务器。 / p>
很明显,我们必须将这两个文件都发送到服务器。但是如何在一个请求中发送多个文件。
答案 0 :(得分:1)
阅读一个非常有趣的解决方案来解决这个问题。它表明我们不需要将* jpg和* .mov上传到服务器以进行实时照片。我们只能从视频的中点上传视频并在服务器上创建图像。
Live Photo从视频中间开始 - 我刚读过这篇文章 视频,找到中间,保存图像。
我们还可以像iPhone 6s一样从视频创建实时照片。 6s用照片捕捉短视频并播放视频 这张照片是3D感动的。但是,通过使用这种方法创建一个 PHLivePhoto和使用PHLivePhotoView播放它,我们可以得到它 适用于任何iPhone,例如我的常规iPhone 6。
来源:See Here.
我们可以获取实时照片的视频网址。见How to get extract video URL from a live photo.
但我不确定这是否是解决这个问题的好办法。可以告诉我这是否是一个好的解决方案。