4

私のアプリでは、ユーザーはビデオを録画するか、ライブラリからビデオを選択できます。当然、 aUIImagePickerControllerをorsourceTypeに設定して使用します。どちらの場合も は に設定されます。UIImagePickerControllerSourceTypeCameraUIImagePickerControllerSourceTypePhotoLibraryvideoQualityUIImagePickerControllerQualityTypeMedium

さて、私は次のことを行いました: iPhone を仰向けにして 15 秒のビデオを撮影したので、真っ暗です。ライブラリからこのビデオを選択すると、約 0.6 MB の大きさになります。アプリ内から同じビデオを撮影すると (15 秒、真っ暗)、4 MB を超えるファイルが得られます。

誰でもこれを確認できますか?私が最初に気づいたとは信じられませんが、ここでそれを台無しにする余地はあまりありません (それでも私はおそらくそうしました)。または、誰かがこれについて説明/解決策を持っていますか?

(私はiPhone 4でiOS 5.1を使用しています)

4

3 に答える 3

0

あなたはそれを理解しましたか?

今、私は同じ問題を抱えています.PhotoLibraryのビデオです(2分以上); UIImagePickerController を使用して取得すると、約 30 Mb です。しかし、asset.defaultRepresentation (この方法 ( ALAsset からビデオを取得する) を使用) で取得すると、約 300Mb に達します。UIImagePickerController が何らかの方法でデータを圧縮した可能性があります。私はそれを理解する必要がありますが、進歩はありません........

================

編集: UIVideoEditorControllerはビデオを小さなサイズに圧縮できます。また、UIImagePickerController と同じように videoQuality を設定できます。

おそらくこのように: UIImagePickerController を使用してビデオを選択し、allowsEditing=YES を設定すると、ビデオを圧縮するために UIVideoEditorController が提示され、圧縮されたビデオが小さなサイズで取得されます。

于 2013-03-26T02:48:47.607 に答える
-1

ビデオを圧縮する最良の方法。

これがコードです。

       -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ 

    NSString *tempFilePath = [[info objectForKey:UIImagePickerControllerMediaURL] path];

   NSData *data = [NSData dataWithContentsOfURL:videoURL];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

             NSDate *now = [NSDate dateWithTimeIntervalSinceNow:0];
             NSString *caldate = [NSString stringWithFormat:@"%@.mov",[now description]];
            caldate = [caldate stringByReplacingOccurrencesOfString:@" " withString:@""];


             NSString  *documentsDirectory = [paths objectAtIndex:0];
             NSString *path = [NSString stringWithFormat:@"%@/%@", documentsDirectory,caldate];

            NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType];
            NSURL *selectedVideoUrl;

            if (CFStringCompare ((__bridge CFStringRef) mediaType, kUTTypeMovie, 0)
                     == kCFCompareEqualTo) {

                               tempFilePath = [[info objectForKey:UIImagePickerControllerMediaURL] path];
                               selectedVideoUrl = [info objectForKey:UIImagePickerControllerMediaURL];
                     }

                   NSLog(@"old move %@",path);


        NSURL *url = [NSURL fileURLWithPath:tempFilePath];
        [data writeToFile:path atomically:YES];
        //Delete the original asset
        NSArray *paths1 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

        NSString  *documentsDirectory1 = [paths1 objectAtIndex:0];
        NSString *path1 = [NSString stringWithFormat:@"%@/%@", documentsDirectory1,caldate];
        NSURL *url1 = [NSURL fileURLWithPath:path1];

        NSLog(@"new move %@",path);

        [self convertVideoToLowQuailtyWithInputURL:url outputURL:url1 handler:Nil];
        [picker  dismissModalViewControllerAnimated: YES];

}

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

AVURLAsset *asset = [AVURLAsset URLAssetWithURL:inputURL options:nil];
AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetMediumQuality];
exportSession.outputURL = outputURL;
if ([[UIApplication sharedApplication]canOpenURL:inputURL]){
    NSLog(@"open");
}
exportSession.outputFileType = AVFileTypeQuickTimeMovie;
NSLog(@"errrsfseSession %@", exportSession.error);
[exportSession exportAsynchronouslyWithCompletionHandler:^(void)
 {
     if(exportSession.status != AVAssetExportSessionStatusCompleted){
         NSLog(@"exportSession  %@", exportSession.error);
     }
     if (exportSession.status == AVAssetExportSessionStatusCompleted)
     {
        NSLog(@"doneszdfsadj");

     }

 }];
    }
于 2013-04-02T05:53:33.680 に答える