微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用AVPlayer,AVPlayerItem和AVPlayerAsset有什么区别吗?

如何解决使用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)

以上两者之间有区别吗?

解决方法

来自AVPlayer.init(url:)

的文档

此方法隐式创建一个AVPlayerItem对象。您可以使用currentItem获取播放器项目。

因此我们知道,当您使用第一种方式时,与第二种方式相似的事情正在发生-将会使用您指定的URL创建一个AVPlayerItem。因此,第一和第二种方法是相同的。

尽管文档没有明确说明,但我很确定AVPlayerItem.init(url:)也会使用您指定的URL创建AVAsset,因为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时正在使用AVPlayerItem时。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。