如何在iOS中通过UIActivityViewController导出PHAsset视频

如何在iOS中通过UIActivityViewController导出PHAsset视频,ios,Ios,我试图在iOS中通过UIActivityViewController导出PHAsset视频。 当PHAsset是图像时,它工作得很好。问题是当PHAsset是视频时。 我有以下代码要导出PHAsset视频,但没有附加任何内容 var asset = getCurrentAsset() as PHAsset? if asset == nil { return } if asset?.mediaType == PHAssetMediaType.Vi

我试图在iOS中通过
UIActivityViewController
导出
PHAsset
视频。 当PHAsset是图像时,它工作得很好。问题是当
PHAsset
是视频时。 我有以下代码要导出
PHAsset
视频,但没有附加任何内容

    var asset = getCurrentAsset() as PHAsset?

    if asset == nil {
        return
    }

    if asset?.mediaType == PHAssetMediaType.Video {

        PHImageManager.defaultManager().requestAVAssetForVideo(asset, options: nil) { (avAsset:AVAsset!, audioMix:AVAudioMix!, info:[NSObject : AnyObject]!) -> Void in
            var videoURL = avAsset as AVURLAsset
            var activityVC = UIActivityViewController(activityItems: [videoURL], applicationActivities: nil)
            activityVC.completionHandler = {(str: String!, value: Bool) -> Void in
            }
            self.presentViewController(activityVC, animated: true, completion: nil)
        }

    } 

请帮助我如何导出
PHAsset
视频。

您不应该附加
avurlaste
本身,而应该将
avurlaste
URL
指定为活动项

因此,使用
avAsset.URL
应该有效,
avAsset
是类型为
avurlaste
的实例对象

编辑

let theAsset = avAsset as AVURLAsset
let videoURL = theAsset.URL
var activityVC = UIActivityViewController(activityItems: [videoURL], applicationActivities: nil)

我为此浪费了很多时间

最后,我通过将视频保存到文档目录,并使用文档目录中的文件url解决了这个问题

typeof(self) __weak weakSelf = self;

[[PHImageManager defaultManager] requestExportSessionForVideo: self.videosAssets[index] options:nil exportPreset:AVAssetExportPresetPassthrough resultHandler:^(AVAssetExportSession *exportSession, NSDictionary *info) {

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString* videoPath = [documentsDirectory stringByAppendingPathComponent:@"tempSelvi.MOV"];
    NSFileManager *manager = [NSFileManager defaultManager];

    NSError *error;
    if ([manager fileExistsAtPath:videoPath]) {
        BOOL success = [manager removeItemAtPath:videoPath error:&error];
        if (success) {
            NSLog(@"Already exist. Removed!");
        }
    }

    NSURL *outputURL = [NSURL fileURLWithPath:videoPath];
    NSLog(@"Final path %@",outputURL);
    exportSession.outputFileType=AVFileTypeQuickTimeMovie;
    exportSession.outputURL=outputURL;

    [exportSession exportAsynchronouslyWithCompletionHandler:^{
        if (exportSession.status == AVAssetExportSessionStatusFailed) {
            NSLog(@"failed");
        } else if(exportSession.status == AVAssetExportSessionStatusCompleted){
            NSLog(@"completed!");
            dispatch_async(dispatch_get_main_queue(), ^(void) {
                NSArray *activityItems = [NSArray arrayWithObjects:outputURL, nil];

                UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
                activityViewController.completionWithItemsHandler = ^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) {
                    NSError *error;
                    if ([manager fileExistsAtPath:videoPath]) {
                        BOOL success = [manager removeItemAtPath:videoPath error:&error];
                        if (success) {
                            NSLog(@"Successfully removed temp video!");
                        }
                    }
                    [weakSelf dismissViewControllerAnimated:YES completion:nil];
                };
                [weakSelf presentViewController:activityViewController animated:YES completion:nil];
            });     
        }
    }];
}];

谢谢你的回答,Gabbler。我将AVURLAsset更改为AVURLAsset.URL,但它仍然无法工作。您能详细地指导我吗?当我在UIActivityViewController中单击“保存视频”选项时,它工作了。“邮件”选项出现问题。当我点击“邮件”选项时,没有附加任何内容。你能指导我怎么做吗?谢谢。那么解决方案是什么呢?你必须在iPhone中设置你的邮件帐户。是的。我知道。新消息对话框由UIActivityController显示,但视频未附加到正文中。如果我把它发送到另一个邮件,也没有那个视频。正如我之前所说,它非常适合图像。