Экспорт видео AVCaptureSession в размере, соответствующем слою предварительного просмотра
Я записываю видео с помощью AVCaptureSession
с предустановкой сеанса AVCaptureSessionPreset640x480
, Я использую AVCaptureVideoPreviewLayer
в нестандартном размере (300 x 300) с гравитацией, установленной на аспектное заполнение во время записи. Это настроено так:
self.previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:_captureSession];
_previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
_previewLayer.frame = _previewView.bounds; // 300 x 300
[_previewView.layer addSublayer:_previewLayer];
После записи видео я хочу записать его в файл в формате QuickTime. Во время воспроизведения я снова воспроизводю видео в слое нестандартного размера 300 x 300. Поскольку эти видео в конечном итоге будут передаваться по сетевому соединению, сохранять видео 640x480 представляется расточительным.
Какой лучший способ экспортировать видео в соответствии со слоем предварительного просмотра размером 300 x 300? Я новичок AVFoundation, так что, если я поступаю неправильно, пожалуйста, дайте мне знать. Я просто хочу, чтобы записанное видео, отображаемое в слое предварительного просмотра во время записи, соответствовало видео, экспортируемому на диск.
1 ответ
Разрешение видео и размер видео две разные вещи. Разрешение означает ясность, более высокое разрешение означает более высокую четкость. Принимая во внимание, что Размер видео - это границы, в которых отображается видео. В зависимости от разрешения видео и соотношения сторон видео, при просмотре в средстве просмотра видео будет растягиваться или уменьшаться.
Теперь, когда факты были объяснены, Вы можете найти свой ответ здесь:
Как использовать AVFoundation для обрезки видео
Выполните шаги в следующем порядке:
- Запись видео на диск.
- Сохранить с диска в библиотеку активов.
- Удалить с диска.
- Выполните шаги, указанные в приведенной выше ссылке.
ПРИМЕЧАНИЕ. Выполните действия после записи и записи видео в библиотеку ресурсов. saveComposition
будучи сохраненным активом.
и укажите свой размер на этом этапе:videoComposition.renderSize = CGSizeMake(320, 240);
как videoComposition.renderSize = CGSizeMake(300, 300);
И совет. Поскольку запись файла на диск, затем в библиотеку, а затем обратно на диск, является довольно длительной операцией. Попробуйте сделать все это асинхронно, используя dispatch_queue
или же operationBlock
Ура, веселись.