Есть ли разница между использованием AVPlayer, AVPlayerItem и AVPlayerAsset?

Я нашел три способа воспроизведения видео с URL.

let url = "some url"

// first way
AVPlayer(url: url)

// second way
let playerItem = AVPlayerItem(url: url)
AVPlayer(playerItem: playerItem)

// third way
let asset = AVAsset(url: url)
let playerItem = AVPlayerItem(asset: asset)
AVPlayer(playerItem: playerItem)

Есть ли разница между ними?


person user12208004    schedule 16.10.2020    source источник


Ответы (1)


Из документации AVPlayer.init(url:)

Этот метод неявно создает объект AVPlayerItem. Вы можете получить предмет игрока, используя currentItem.

Итак, мы знаем, что когда вы используете первый способ, под капотом происходит что-то похожее на второй способ — будет создан AVPlayerItem с указанным вами URL-адресом. Поэтому первый и второй способ одинаковы.

Хотя в документах это прямо не указано, я почти уверен, что AVPlayerItem.init(url:) создает AVAsset, используя указанный вами URL-адрес, поскольку ссылка AVPlayerItem это:

Объект, используемый для моделирования времени и состояния представления ресурса, воспроизводимого игроком.

Формулировка предполагает, что у вас не может быть AVPlayerItem без AVAsset. Действительно, AVPlayerItem.asset — необязательное свойство. Так что вам действительно нужен AVAsset для создания AVPlayerItem. Это, в сочетании с тем фактом, что AVPlayerItem.init(url:) является удобным инициализатором, и init(asset:automaticallyLoadedAssetKeys:) является назначенным, я совершенно уверен, что AVPlayerItem.init(url:) также создает AVAsset под капотом.

Если вам интересно, почему существуют AVPlayer.init(playerItem:) и AVPlayerItem.init(asset:), если все три способа делают одно и то же, то они нужны, когда вы случайно работаете с AVPlayerItem, когда хотите создать AVPlayer, и когда вы просто работаете с AVAssets, когда вы хотите создать файл AVPlayerItem.

person Sweeper    schedule 16.10.2020