5

[info objectForKey:UIImagePickerControllerMediaURL]UIImagepickercontroller のメソッドから inputurlを取得していdidFinishPickingMediaWithInfoます。

NSURL *inputURL = [NSURL URLWithString:inputurlstring];

このコードからoutputurlを提供しています

        NSString  *documentsDirectory = [paths objectAtIndex:0];
        NSString *videoPath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"capturedvideo.MOV"];
        NSURL *outputURL = [NSURL fileURLWithPath:videoPath];

次のコードを使用して、低品質のビデオを取得しました

 - (void)convertVideoToLowQuailtyWithInputURL:(NSURL*)inputURL 
    outputURL:(NSURL*)outputURL 
    handler:(void (^)(AVAssetExportSession*))handler 
    { 

    [[NSFileManager defaultManager] removeItemAtURL:outputURL error:nil]; 
    AVURLAsset *asset = [AVURLAsset URLAssetWithURL:inputURL options:nil]; 
    AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetLowQuality]; 
    exportSession.outputURL = outputURL; 
    exportSession.outputFileType = AVFileTypeQuickTimeMovie; 

    [exportSession exportAsynchronouslyWithCompletionHandler:^(void) 
    { 
    if (exportSession.status == AVAssetExportSessionStatusCompleted) 
    { 
    printf("completed\n"); 

    } 
    else 
    { 
    printf("error\n"); 
    NSLog(@"error is %@",exportSession.error); 

    } 

    }]; 
}           

大きなファイルのみを使用すると、次のエラーが発生します。サイズの小さいビデオ ファイルを使用しても、エラーが発生しなかったためです。

Error Domain=NSURLErrorDomain Code=-1 "unknown error" UserInfo=0x616d890         
 {NSErrorFailingURLStringKey=/private/var/mobile/Applications/EE1E6701-EED0-4830-BD1D-7366680713C0/tmp//trim.7mL7VS.MOV, NSErrorFailingURLKey=/private/var/mobile/Applications/EE1E6701-EED0-4830-BD1D-7366680713C0/tmp//trim.7mL7VS.MOV, NSLocalizedDescription=unknown error, NSUnderlyingError=0x2d1460 "The operation couldn’t be completed. (OSStatus error -12935.)", NSURL=/private/var/mobile/Applications/EE1E6701-EED0-4830-BD1D-7366680713C0/tmp//trim.7mL7VS.MOV}
4

2 に答える 2

1

上記のコードは完全に機能します。唯一の変更はinputURLです。

inputURL を fileURLWithPath に変更した後:

 NSURL *inputURL = [NSURL fileURLWithPath:inputurlstring];

今では完全に機能します。

于 2013-03-11T06:48:56.773 に答える
0

これの代わりに

[info objectForKey:UIImagePickerControllerMediaURL];

使用する

NSURL *imageURL = [info valueForKey:UIImagePickerControllerReferenceURL];

AVAssetLibraryreference urlその唯一の方法であなたのビデオにアクセスできます。

于 2013-03-01T05:33:15.337 に答える