Экспорт видео 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 для обрезки видео

Выполните шаги в следующем порядке:

  1. Запись видео на диск.
  2. Сохранить с диска в библиотеку активов.
  3. Удалить с диска.
  4. Выполните шаги, указанные в приведенной выше ссылке.

ПРИМЕЧАНИЕ. Выполните действия после записи и записи видео в библиотеку ресурсов. saveComposition будучи сохраненным активом.

и укажите свой размер на этом этапе:videoComposition.renderSize = CGSizeMake(320, 240); как videoComposition.renderSize = CGSizeMake(300, 300);

И совет. Поскольку запись файла на диск, затем в библиотеку, а затем обратно на диск, является довольно длительной операцией. Попробуйте сделать все это асинхронно, используя dispatch_queue или же operationBlock

Ура, веселись.

Другие вопросы по тегам