2014-07-01 12 views
7

Albümünden albüm dizinine video kaydetmeye çalışıyorum. 1 dakikadan kısa videolar için iyi çalışıyor. Ancak, videoları 1 dakikadan fazla kaydetmeye çalışırken, uygulamanız çöküyor. Bu sadece iPhone'da oluyor, iPad'de daha büyük videolar için çalışıyor.mach_vm_map (size =) başarısız (hata kodu = 3)

NSUInteger buffered = [representation getBytes:buffer fromOffset:0.0 length:(NSUInteger)representation.size error:nil]; 

Hata:

else if([mediaType isEqualToString:ALAssetTypeVideo]) 
    { 
     ALAssetsLibrary *librarys = [[ALAssetsLibrary alloc] init]; 

     [librarys enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) 
     { 
      [group setAssetsFilter:[ALAssetsFilter allVideos]]; 

      if ([group numberOfAssets] > 0) 
      { 
       for (int j = 0; j < [group numberOfAssets]; j++) 
       { 
        [group enumerateAssetsAtIndexes:[NSIndexSet indexSetWithIndex:j] 
              options:0 
              usingBlock:^(ALAsset *alAsset, NSUInteger index, BOOL *innerStop) 
         { 
          if (alAsset) 
          { 
           ALAssetRepresentation *representation = [alAsset defaultRepresentation]; 
           NSURL *url = [representation url]; 

           if ([[dict objectForKey:@"UIImagePickerControllerReferenceURL"] isEqual:url]) 
           { 
            Byte *buffer = (Byte*)malloc((unsigned)[representation size]); 
            //NSUInteger buffered = [representation getBytes:buffer fromOffset:0.0 length:representation.size error:nil]; 
            //Byte *buffer = ((Byte*)representation.size); 
            //NSUInteger chunkSize = 100 * 1024; 
           // uint8_t *buffer = malloc(chunkSize * sizeof(uint64_t)); 

            NSUInteger buffered = [representation getBytes:buffer fromOffset:0.0 length:(NSUInteger)representation.size error:nil]; 
            NSData *videoCameraData = [NSData dataWithBytesNoCopy:buffer length:buffered freeWhenDone:YES]; 
            NSString *savedImagePath = [docDirectory stringByAppendingPathComponent:str_Header]; 
            NSError *error; 
            [[NSFileManager defaultManager] createDirectoryAtPath:savedImagePath withIntermediateDirectories:NO attributes:nil error:&error]; 

Benim Uygulamanın en çöktü oluyor: Core Audio kullanırken bu hatayı başlamıştı

malloc: *** mach_vm_map(size=310386688) failed (error code=3) 
*** error: can't allocate region 
*** set a breakpoint in malloc_error_break to debug 
+0

Gönderinizden çok fazla bellek isteğinizi söyleyebilirim ... – Volker

+0

@Volker Bu videoları çok fazla bellek tüketmeden kaydetmek için herhangi bir egzersiz var mı? – Gill

+0

bellek kullanımını bölüyor ... veya bir takas dosyası kullanarak ... bir bellek arabelleği ... bellek ayırma boyutunu küçülten bir şey. – Volker

cevap

0

Bu benim kodudur. Derleyici optimizasyonunu "-O0 Yok" olarak ayarlayarak düzeltemedim.