Swift - AVFoundation - Проверка размеров / соотношения сторон видео - PullRequest
0 голосов
/ 17 июня 2020

У меня есть приложение iOS, которое на данный момент просто воспроизводит видео с помощью AVFoundation из пользовательской библиотеки. Я бы хотел установить ориентацию устройства в зависимости от соотношения сторон видео. Если это портретное видео, я бы хотел установить портретную ориентацию, если стандарт 16: 9 или 4: 3, то, конечно, альбомную, чтобы на экране не было много потерянного места в черных полосах. по обе стороны от видео.

Я решил, что могу определить соотношение сторон и, следовательно, ориентацию, получив размеры видео:

if width > height:
    landscape
else:
    portrait

Однако это оказывается сложнее, чем я представлял. У меня есть объект AVPlayer, и я сначала изучил его свойство метаданных, но, по-видимому, это не те метаданные, которые мне нужны. Затем я обнаружил, что AVPlayer.presentationSize может содержать информацию, которую я ищу, но когда я распечатал ее - прямо перед вызовом play() - чтобы взглянуть на нее, я получил следующее: Optional((0.0, 0.0))

Если не считать того, как я могу сам проанализировать заголовки видеофайлов, чтобы попытаться получить доступ к этой информации, есть ли где-нибудь в API, где это доступно мне? Поиск в Google дает много информации о том, как указать размер видео при захвате, но не много, если вообще ничего об этой конкретной проблеме.

1 Ответ

2 голосов
/ 17 июня 2020

Вы можете запросить размер базового актива:

let asset = player.playerItem.asset
let videoTrack = asset.tracks(withMediaType: .video).first!
let naturalSize = videoTrack.naturalSize
let transform = videoTrack.preferredTransform
let size = naturalSize.applying(transform)
...