Из документации 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
, и когда вы просто работаете с AVAsset
s, когда вы хотите создать файл AVPlayerItem
.
person
Sweeper
schedule
16.10.2020