bytesRead = [assetRepresentation getBytes:(uint8_t *)&buffer

fromOffset: currentOffset

length: BufferSize

error:&readingError];

/* Если ничего считать не можем, то выходим из этого цикла. */

if (bytesRead == 0){

break;

}

/* Данные о смещении буфера должны быть актуальными. */

currentOffset += bytesRead;

/* Помещаем буфер в объект NSData. */

NSData *readData = [[NSData alloc]

initWithBytes:(const void *)buffer

length: bytesRead];

/* И записываем данные в файл. */

[fileHandle writeData: readData];

} while (bytesRead > 0);

NSLog(@"Finished reading and storing the \

video in the documents folder");

}

}];

if (foundTheVideo){

*stop = YES;

}

}

failureBlock: ^(NSError *error) {

NSLog(@"Failed to enumerate the asset groups.");

}];

});

}

Вот что происходит в данном коде.

1. Мы получаем стандартное представление первого видеоресурса, который находим в библиотеке ресурсов.

2. Создаем файл Temp.MOV в каталоге Documents нашего приложения для сохранения содержимого видеоресурса.

3. Создаем цикл, работающий до тех пор, пока в представлении ресурса еще остаются данные, которые необходимо считать. Метод экземпляра getBytes: fromOffset: length: error:, относящийся к объекту представления ресурса, считывает столько байтов, сколько может поместиться в буфер, и проделывает это столько раз, сколько необходимо, пока мы не достигнем конца данных представления.

4. После считывания данных в буфер мы заключаем их в объект типа NSData, используя для этого метод инициализации initWithBytes: length: класса NSData. Затем записываем эти данные в файл, созданный ранее, с помощью метода экземпляра writeData:, относящегося к классу NSFileHandle.

<p>13.8. Редактирование видео на устройстве с операционной системой iOS</p><p>Постановка задачи</p>

Требуется, чтобы пользователь, просматривающий видео, мог редактировать видео в этом же приложении.

<p>Решение</p>

Воспользуйтесь классом UIVideoEditorController. В приведенном здесь примере используем данный класс вместе с контроллером для выбора изображений. Сначала мы предлагаем пользователю выбрать снимок из его библиотеки фотографий. После того как выбор будет сделан, отображаем экземпляр контроллера видеоредактора, где пользователь может обрабатывать выбранное видео.

<p>Обсуждение</p>

Класс UIVideoEditorController, содержащийся в iOS SDK, позволяет программисту вывести на экран перед пользователем специальный интерфейс для редактирования. Все, что требуется сделать, — предоставить URL видеоролика, который предполагается отредактировать, а потом отобразить в модальном виде контроллер для редактирования видео. Не допускайте наложения вида этого контроллера на любые другие виды и не изменяйте этот вид.

При вызове метода presentModalViewController: animated: сразу же после метода dismissModalViewControllerAnimated: контроллера вида приложение завершится с ошибкой времени исполнения. Необходимо дождаться, пока первый контроллер вида не будет убран с экрана, и только потом отображать второй контроллер вида. Можно пользоваться относящимся к контроллерам вида методом viewDidAppear:, помогающим определить, когда отобразится ваш вид. На данном этапе можно быть уверенным, что все модальные контроллеры видов уже убраны.

Итак, продолжим и объявим контроллер вида со всеми необходимыми свойствами:

#import «ViewController.h»

#import 

#import 

@interface ViewController ()

UIVideoEditorControllerDelegate,

UIImagePickerControllerDelegate>

@property (nonatomic, strong) NSURL *videoURLToEdit;

@property (nonatomic, strong) ALAssetsLibrary *assetsLibrary;

Перейти на страницу:

Все книги серии Бестселлеры O'Reilly

Похожие книги