AVAssetExportSession Trim & Download

I am trying to trim and upload online video using AVExportSession.

the code:

FileMove *fileMove = (FileMove*)data;
  NSString *url = @"http://download.wavetlan.com/SVV/Media/HTTP/H264/Talkinghead_Media/H264_test1_Talkinghead_mp4_480x360.mp4";
    NSURL *videoURL = [NSURL URLWithString:[url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    NSLog(@"VideoURL: %@",videoURL);


    AVAsset *anAsset = [AVURLAsset URLAssetWithURL:videoURL options:nil];    
    NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:anAsset];
    if ([compatiblePresets containsObject:AVAssetExportPresetLowQuality]) {
        AVAssetExportSession *exportSession = [[AVAssetExportSession alloc]
                                               initWithAsset:anAsset presetName:AVAssetExportPresetLowQuality];
        NSURL *outputURL = [NSURL fileURLWithPath:fileMove.dst];
        NSLog(@"outputURL: %@",outputURL);
        exportSession.outputURL = outputURL;
        exportSession.outputFileType = AVFileTypeQuickTimeMovie;

        CMTime start = CMTimeMakeWithSeconds(1.0, 600);
        CMTime duration = CMTimeMakeWithSeconds(3.0, 600);
        CMTimeRange range = CMTimeRangeMake(start, duration);
        exportSession.timeRange = range;

        if ([[NSFileManager defaultManager] fileExistsAtPath:fileMove.dst])
            [[NSFileManager defaultManager] removeItemAtPath:fileMove.dst error:nil];

        [exportSession exportAsynchronouslyWithCompletionHandler:^{

            switch ([exportSession status]) {
                case AVAssetExportSessionStatusFailed:
                    NSLog(@"Export failed: %@", [[exportSession error]description ]);
                    break;
                case AVAssetExportSessionStatusCancelled:
                    NSLog(@"Export canceled");
                    break;
                default:
                    break;
            }
        }];
    }

Error:

Export error: domain error = AVFoundationErrorDomain Code = -11800 "operation could not be completed" UserInfo = 0x635a820 {NSLocalizedDescription = Operation could not be completed, NSUnderlyingError = 0x1ff4240 "Operation could not be completed. (Error OSStatus -12780. )Fail NSalocal = Unknown error (-12780)}

Guys, do you see any problems in the code? Are there any restrictions in AVExportSession to access online video?

+4
source share
3 answers

AVFoundation. , Swift:

let range: CMTimeRange
let sourceURL: NSURL
let targetFileURL: NSURL
let requiredKeys = [ "exportable", "tracks" ]
let asset = AVAsset(URL: sourceURL)
asset.loadValuesAsynchronouslyForKeys(requiredKeys) {

    // Error handling code here
    precondition(asset.statusOfValueForKey("exportable", error: nil) == .Loaded)
    precondition(asset.statusOfValueForKey("tracks", error: nil) == .Loaded)
    precondition(asset.exportable)


    let composition = AVMutableComposition()
    do {
        try composition.insertTimeRange(range, ofAsset: asset, atTime: kCMTimeZero)
    } catch {
        // Error handling code here
        return
    }

    let finalComposition = composition.copy() as! AVComposition
    guard let export = AVAssetExportSession(asset: finalComposition, presetName: AVAssetExportPresetPassthrough) else {
        // Error handling code here
        return
    }

    export.outputURL = targetFileURL
    export.outputFileType = AVFileTypeMPEG4
    export.exportAsynchronouslyWithCompletionHandler {
        switch export.status {
        case .Completed:
            // Alright!
            break

        case .Cancelled, .Failed:
            // Error handling code here
            break

        default:
            fatalError("Shouldn't be called")
        }
    }
}
+2

URL-, AVAsset, , . , AVAsset

+1

I think we can not export online video. Look here: Failed to export AVPlayerItem

So, I think you can download the video first locally and then crop, save and use it.

0
source

All Articles