AVFoundation: Как вы можете получить размеры видео, передаваемого AVURLAsset?

Мне нужно знать, является ли видео, которое я воспроизводю из Интернета через AVURLAsset, портретным или альбомным.

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

if let assetTrack = asset.tracks(withMediaType: AVMediaType.video).first {
    let temp = assetTrack.naturalSize.applying(assetTrack.preferredTransform)
    let size = CGSize(width:fabs(temp.width), height: fabs(temp.height))
    return size.height > size.width
}

Но для этого потокового видео asset.tracks пусто, поэтому я не могу проверить естественный размер.

Кто-нибудь знает, как это решить?


person Jake G    schedule 01.02.2018    source источник
comment
Попробуйте [asset tracksWithMediaCharacteristic:AVMediaCharacteristicVisual]] и получите его натуральный размер? Все треки пустые? Никогда раньше такого не было..   -  person Brandon    schedule 01.02.2018
comment
К сожалению, не повезло с tracksWithMediaCharacteristic, потому что да, весь массив треков пуст. Спасибо за предложение!   -  person Jake G    schedule 01.02.2018


Ответы (1)


Поигравшись с этим весь день, я смог найти решение:

По-видимому, потоковая передача HLS-файла .m3u8 всегда будет приводить к пустому массиву asset.tracks.

Способ получения размеров — через свойство AVPlayerItem.presentationSize.

person Jake G    schedule 02.02.2018