使用 AVPlayer、AVPlayerItem 和 AVPlayerAsset 有啥区别吗?
Posted
技术标签:
【中文标题】使用 AVPlayer、AVPlayerItem 和 AVPlayerAsset 有啥区别吗?【英文标题】:Is there any difference between using AVPlayer, AVPlayerItem, and AVPlayerAsset?使用 AVPlayer、AVPlayerItem 和 AVPlayerAsset 有什么区别吗? 【发布时间】:2020-10-16 09:51:18 【问题描述】:我找到了用 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
对象。您可以使用currentItem
获取播放器项目。
所以我们知道,当您使用第一种方式时,在后台会发生与第二种方式类似的事情 - 将使用您指定的 URL 创建一个 AVPlayerItem
。所以第一种方式和第二种方式是一样的。
虽然文档没有明确说明这一点,但我很确定 AVPlayerItem.init(url:)
也会使用您指定的 URL 创建一个 AVAsset
,因为 AVPlayerItem
是:
一个对象,用于对玩家播放的资产的时间和呈现状态进行建模。
措辞表明,如果没有AVAsset
,就不能拥有AVPlayerItem
。事实上,AVPlayerItem.asset
是一个非可选属性。所以你真的需要一个AVAsset
来创建一个AVPlayerItem
。再加上 AVPlayerItem.init(url:)
是一个便利的初始化程序,init(asset:automaticallyLoadedAssetKeys:)
是指定的初始化程序,我很确定 AVPlayerItem.init(url:)
也会在后台创建一个 AVAsset
。
如果你想知道为什么 AVPlayer.init(playerItem:)
和 AVPlayerItem.init(asset:)
存在,而这三种方式无论如何都做同样的事情,它们适用于当你碰巧使用 AVPlayerItem
s 时,你想创建一个 @987654343 @,当你恰好在使用AVAsset
s 时,你想创建一个AVPlayerItem
。
【讨论】:
以上是关于使用 AVPlayer、AVPlayerItem 和 AVPlayerAsset 有啥区别吗?的主要内容,如果未能解决你的问题,请参考以下文章
使用 AVURLAsset + AVPlayerItem + AVPLayer 流式传输 .mp3
如何正确删除/释放 AVPlayer/AVPlayerItem?
设置 AVPlayer AVPlayerItem 缓冲区大小?
通过 AvPlayerItem 和 AvPlayer 流式传输时监控下载的字节数 - iOS
iOS 7中的iOS 7 AVPlayer AVPlayerItem持续时间不正确
iOS 8.4 AVFoundation _attachToPlayer 或 _attachToFigPlayer 崩溃 |一个 AVPlayerItem 不能与多个 AVPlayer 实例关联