2

ライブ写真をサーバーにアップロードするにはどうすればよいですか? 画像、動画、スローモーション動画のアップロードに 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;

 }];

これらの URL は、画像およびビデオ ファイルのアップロードに使用されます。

// 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];
                        }
                    });
                }];


            } 
        }];

ライブフォトをアップロードするには?

Live photo は、*.jpg と *mov の 2 つのファイルの組み合わせです。ライブ写真の両方のファイルをサーバーに送信する必要があるため、写真やビデオのようにアップロードすることも、スロー モーション ビデオで行ったように 2 つ以上のファイルを組み合わせて新しいファイルを作成することもできません。

両方のファイルをサーバーに送信する必要があることは明らかです。しかし、単一のリクエストで複数のファイルを送信する方法。

4

1 に答える 1