使用 AVPlayer、AVPlayerItem 和 AVPlayerAsset 有什么区别吗?
Is there any difference between using AVPlayer, AVPlayerItem, and 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)
以上这些有区别吗?
的文档
This method implicitly creates an AVPlayerItem
object. You can get the player item using currentItem
.
所以我们知道,当您使用第一种方式时,幕后会发生类似于第二种方式的事情 - 将使用您指定的 URL 创建一个 AVPlayerItem
。所以,第一种和第二种方式是一样的。
虽然文档没有明确说明这一点,但我很确定 AVPlayerItem.init(url:)
也使用您指定的 URL 创建了一个 AVAsset
,因为 AVPlayerItem
是:
An object used to model the timing and presentation state of an asset played by the player.
措辞表明没有 AVAsset
就不可能有 AVPlayerItem
。事实上,AVPlayerItem.asset
是一个 non-optional 属性。所以你真的需要一个 AVAsset
来创建一个 AVPlayerItem
。结合 AVPlayerItem.init(url:)
是一个方便的初始化器,而 init(asset:automaticallyLoadedAssetKeys:)
是指定的初始化器这一事实,我很确定 AVPlayerItem.init(url:)
也在幕后创建了一个 AVAsset
。
如果你想知道为什么 AVPlayer.init(playerItem:)
和 AVPlayerItem.init(asset:)
存在,而这三种方式无论如何都做同样的事情,它们是为你恰好使用 AVPlayerItem
s 工作的当你想创建一个 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)
以上这些有区别吗?
This method implicitly creates an
AVPlayerItem
object. You can get the player item usingcurrentItem
.
所以我们知道,当您使用第一种方式时,幕后会发生类似于第二种方式的事情 - 将使用您指定的 URL 创建一个 AVPlayerItem
。所以,第一种和第二种方式是一样的。
虽然文档没有明确说明这一点,但我很确定 AVPlayerItem.init(url:)
也使用您指定的 URL 创建了一个 AVAsset
,因为 AVPlayerItem
是:
An object used to model the timing and presentation state of an asset played by the player.
措辞表明没有 AVAsset
就不可能有 AVPlayerItem
。事实上,AVPlayerItem.asset
是一个 non-optional 属性。所以你真的需要一个 AVAsset
来创建一个 AVPlayerItem
。结合 AVPlayerItem.init(url:)
是一个方便的初始化器,而 init(asset:automaticallyLoadedAssetKeys:)
是指定的初始化器这一事实,我很确定 AVPlayerItem.init(url:)
也在幕后创建了一个 AVAsset
。
如果你想知道为什么 AVPlayer.init(playerItem:)
和 AVPlayerItem.init(asset:)
存在,而这三种方式无论如何都做同样的事情,它们是为你恰好使用 AVPlayerItem
s 工作的当你想创建一个 AVPlayer
时,当你恰好在使用 AVAsset
时,当你想创建一个 AVPlayerItem
.