#ios #swift #avplayer #avasset #avplayeritem
#iOS #swift #avplayer #avasset #avplayeritem
Вопрос:
Я нашел три способа воспроизведения видео с 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)
Есть ли какая-либо разница между ними?
Ответ №1:
Из документов AVPlayer.init(url:)
Этот метод неявно создает
AVPlayerItem
объект. Вы можете получить элемент player с помощьюcurrentItem
.
Итак, мы знаем, что при использовании первого способа происходит нечто похожее на второй способ — AVPlayerItem
будет создан URL-адрес, указанный вами. Следовательно, первый и второй способ одинаковы.
Хотя в документах это явно не указано, я уверен AVPlayerItem.init(url:)
, что создает AVAsset
использование URL, который вы также указали, поскольку an AVPlayerItem
:
Объект, используемый для моделирования времени и состояния представления ресурса, воспроизводимого игроком.
Формулировка предполагает, что вы не можете иметь a AVPlayerItem
без a AVAsset
. Действительно, AVPlayerItem.asset
это необязательное свойство. Итак, вам действительно нужно AVAsset
создать an AVPlayerItem
. Это, в сочетании с тем фактом, что AVPlayerItem.init(url:)
это удобный инициализатор, и init(asset:automaticallyLoadedAssetKeys:)
я совершенно уверен AVPlayerItem.init(url:)
, что он также создает AVAsset
under the hood .
Если вам интересно, почему AVPlayer.init(playerItem:)
и AVPlayerItem.init(asset:)
существуют, когда все три способа в любом случае делают одно и то же, они предназначены для случаев, когда вы просто так работаете с AVPlayerItem
s, когда хотите создать a AVPlayer
, и когда вы просто так работаете с AVAsset
s, когда хотите создать an AVPlayerItem
.