ALAssetsLibraryWriteVideoCompletionBlock возвращает неопределенные значения

ALAssetsLibraryWriteVideoCompletionBlock возвращает неопределенные значения. Если assetURL равно nil, тогда ошибка должна быть не равна nil, то есть возвратить мне некоторое описание ошибки.

См. Документацию по железу здесь .

Когда я записываю небольшое видео, ALAssetsLibraryWriteVideoCompletionBlock возвращает хорошее значение assetURL, но когда я записываю длинное видео 3 или 4 Гб, returnURL возвращают нуль и возвращают ошибку. Видео записано в файле tmp, потому что я вижу это видео во временной папке в своем приложении. Кажется, что структура IOS пытается сделать копию этого временного файла на фотоальбом, а iPhone не хватает памяти для копирования этого временного файла в фотоальбом и возврата пути к этому файлу (assetURL).

Это ошибка в системе iOS? Если да, есть ли способ исправить это?

UPDATE: мои файлы имеют размер менее 4 ГБ. благодаря

ОБНОВЛЕНИЕ с исходным кодом:

  -(void)recorder:(AVCamRecorder *)recorder recordingDidFinishToOutputFileURL:(NSURL *)outputFileURL error:(NSError *)error { if ([[self recorder] recordsAudio] && ![[self recorder] recordsVideo]) { // If the file was created on a device that doesn't support video recording, it can't be saved to the assets // library. Instead, save it in the app's Documents directory, whence it can be copied from the device via // iTunes file sharing. [self copyFileToDocuments:outputFileURL]; if ([[UIDevice currentDevice] isMultitaskingSupported]) { [[UIApplication sharedApplication] endBackgroundTask:[self backgroundRecordingID]]; } if ([[self delegate] respondsToSelector:@selector(captureManagerRecordingFinished:)]) { [[self delegate] captureManagerRecordingFinished:self]; } } else { ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; [library writeVideoAtPathToSavedPhotosAlbum:outputFileURL completionBlock:^(NSURL *assetURL, NSError *error) { if (error) { if ([[self delegate] respondsToSelector:@selector(captureManager:didFailWithError:)]) { [[self delegate] captureManager:self didFailWithError:error]; } } if ([[UIDevice currentDevice] isMultitaskingSupported]) { [[UIApplication sharedApplication] endBackgroundTask:[self backgroundRecordingID]]; } if (assetURL!=nil) { if ([[self delegate] respondsToSelector:@selector(captureManagerRecordingFinished:)]) { [[self delegate] captureManagerRecordingFinished:self]; } } else { NSLog(@"Video is not saved"); NSString *alertMsg = [NSString stringWithFormat:@"Impossible to copy video to photo album"]; UIAlertView *alert = [[UIAlertView alloc] init]; [alert setTitle:@"info"]; [alert setMessage:alertMsg]; [alert setDelegate:self]; [alert addButtonWithTitle:@"Accept"]; [alert show]; } }]; } } 

2 Solutions collect form web for “ALAssetsLibraryWriteVideoCompletionBlock возвращает неопределенные значения”

У меня почти такая же проблема: просто я пытаюсь сохранить фотографии, а не фильмы; но все же assetURL – NULL. Вот мой код:

  - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { ALAssetsLibrary *library = [[ALAssetsLibrary alloc]init]; [library writeImageToSavedPhotosAlbum:(__bridge CGImageRef)([info objectForKey:UIImagePickerControllerOriginalImage]) orientation:ALAssetOrientationUp completionBlock:^(NSURL *assetURL, NSError *error) { if(error == nil) { _myImageUrl = [NSString stringWithFormat:@"%@",assetURL]; NSLog(@"%@",assetURL); } else NSLog(@"%@",error); }]; [picker dismissViewControllerAnimated:YES completion:nil]; } 

Итак, я думаю, эта проблема не связана с размером файла.

Я делаю разные тесты, и я могу сохранять видео с более чем 2 ГБ. В этом случае я удаляю много файлов на моем iPhone, пока у меня не будет 7Gb, а затем я сохранил видео с 3,2 ГБ (3,8 ГБ бесплатно) и сохранил в фотогалерее. Затем я сохранил другое видео с 2Gb, и оно не сохранилось в фотогалерее. Что это значит?. Ну, когда вы сохраняете временное видео, вам нужно хотя бы одно и то же или больше свободного места, чем видео, которое вы пытаетесь скопировать в фотогалерею.

Проблема здесь в том, что инфраструктура IOS7 не возвращает никакой ошибки с его функцией writeVideoAtPathToSavedPhotosAlbum, в этом случае она должна возвращать ALAssetsLibraryWriteDiskSpaceError = -3305. Возможно, в предыдущей версии IOS-структуры это работает … но в IOS7 нет.

Кстати, я открываю билет в репортере жуков. Если они скажут мне что-то другое, я опубликую его.

Спасибо всем парням.

ADD: FYI, я сохраняю видеофайл с более чем 4Gb (4.6Gb) в IOS 7.0.3

  • Где я могу найти «документальные доказательства» для одобрения App Store для загрузки публичных видео в Facebook?
  • Сохранение / извлечение видеофайлов в iOS
  • В какой степени iOS Movie Player можно настроить и настроить?
  • Запись, сохранение и / или конвертирование видео в формате mp4?
  • Видео миниатюр из каталога
  • IOS AVPlayer не будет воспроизводить видео
  • Поддержание хорошей производительности прокрутки при использовании AVPlayer
  • AVPlayer seekToTime: не использует буфер
  • Показывать элементы управления в Movie Player, когда фильм завершен
  • Как обслуживать удаленный файл (взятый с удаленного сервера SMB) на определенные запросы
  • Не удалось добавить буфер выборки: Error Domain = AVFoundationErrorDomain Code = -11800 (ошибка OSStatus -12763.)
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.