当前位置: 首页 > news >正文

10个免费的黑科技网站wordpress没有文章导航

10个免费的黑科技网站,wordpress没有文章导航,区块链app定制,光之翼可以做网站吗引言 AVFoundation 是 Apple 提供的强大多媒体框架,支持音视频播放、录制、处理等功能。在 iOS 开发中,AVFoundation 是实现视频播放的核心技术之一。 本篇文章将简单介绍如何使用 AVPlayer、AVPlayerItem 和 AVPlayerLayer 进行视频播放,并…


引言

AVFoundation 是 Apple 提供的强大多媒体框架,支持音视频播放、录制、处理等功能。在 iOS 开发中,AVFoundation 是实现视频播放的核心技术之一。

本篇文章将简单介绍如何使用 AVPlayer、AVPlayerItem 和 AVPlayerLayer 进行视频播放,并讲解如何控制播放的开始、暂停、以及控制播放进度,逐步来熟悉框架。

关键类解析

在使用 AVFoundation 进行视频播放时,会涉及到以下几个核心的类:

  • AVAsset:媒体资源。
  • AVPlayerItem:具体视频资源。
  • AVPlayer:核心播放器。
  • AVPlayerLayer:显示画面的图层。

下面我们再一一详细的来讲述一下每个类的作用及用法。

AVAsset

AVAsset 代表一个媒体资源,可以是本地文件、远程资源地址或者其他格式的媒体资源。它的主要特点是可以屏蔽底层资源的类型,使开发者可以通过统一的方式来处理不同来源、不同类型的媒体资源。

AVAsset 本身是一个抽象类,并不能直接播放,需要通过 AVPlayerItem 进行包装。

AVAsset提供了丰富的属性和方法,例如:

  • duration:获取视频时长。
  • tracks:获取媒体的音频轨道、视频轨道、字幕轨道等信息。
  • loadValuesAsynchronously(forKeys:completionHandler:):异步加载资源信息、如视频时长、格式等等。

示例代码:

        guard let path = Bundle.main.path(forResource: "test", ofType: "mp4") else {return}guard let url = URL(string: path) else {return}let asset = AVAsset(url: url)// 异步加载asset时长信息asset.loadValuesAsynchronously(forKeys: ["duration"]) {var error: NSError?let status = asset.statusOfValue(forKey: "duration", error: &error)if status == .loaded {let duration = asset.durationprint("duration: \(CMTimeGetSeconds(duration))")}}

在 iOS 16 之后推荐使用:

        Task {do {let duration = try await loadDuration(asset: asset)print("duration: \(CMTimeGetSeconds(duration))")} catch {print("Failed to load duration: \(error)")}}

AVPlayerItem

AVPlayerItem 代表的是一个具体的视频资源,AVPlayer 需要依赖 AVPlayerItem 才能进行播放。

AVPlayerItem 的作用包括:

  • 负责管理视频资源的加载状态。
  • 监听播放状态,如 readyToPlay、Failed。
  • 提供缓冲、错误等相关信息。
  • 提供播放完成状态监听。

示例代码:

/// 监听状态keypath
let kStatusKeyPath = "status"
/// 监听标识
var playerItemContext = 0let asset = AVAsset(url: url)
let playerItem = AVPlayerItem(asset: asset)

AVPlayer

AVPlayer 是核心播放器类,负责管理视频的播放状态。它通过加载 AVPlayerItem 进行资源的播放,并提供播放、暂停、调整播放进度等功能。

AVPlayer 还对我提供了播放进度监听的机制,以及播放状态的监听属性包括.playing、.paused、.waitingToPlayAtSpecifiedRate。

常见的方法:

  • play():开始播放。
  • pause():暂停播放。
  • seek(to:):跳转到指定时间。

示例代码:

let asset = AVAsset(url: url)
let playerItem = AVPlayerItem(asset: asset)
let player = AVPlayer(playerItem: playerItem)// 播放
player.play()// 暂停
player.pause()// 快进到指定时间
player.seek(to: CMTime(seconds: 1, preferredTimescale: 1))

AVPlayerLayer

AVPlayerLayer 是 AVFoundation 提供的 CALayer的子类,专门用来渲染 AVPlayer 的播放的视频内容,我们可以直接将它添加到UIView上,或者通过重写UIView的图层属性、以显示画面。

示例代码:

let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = view.bounds
view.layer.addSublayer(playerLayer)

类与类之间的关系

  • AVAsset:表示一个视频资源,但不能直接播放,需要通过 AVPlayerItem 进行封装。
  • AVPlayerItem:基于 AVAsset 创建,管理视频的播放状态,并被 AVPlayer 使用。
  • AVPlayer:负责播放 AVPlayerItem,并提供播放控制。
  • AVPlayerLayer:用于在界面上渲染 AVPlayer 的视频画面。
AVAsset  ——>  AVPlayerItem  ——>  AVPlayer  ——>  AVPlayerLayer
(资源)        (封装)         (控制播放)      (渲染画面)

播放视频

在进行视频播放时,首先需要获取视频文件的 URL,并使用该 URL 创建一个 AVAsset 媒体资源对象。然后,基于 AVAsset 创建 AVPlayerItem 视频播放资源,最后通过 AVPlayer 来控制和播放视频。

播放本地视频:

        // 加载视频guard let path = Bundle.main.path(forResource: "test", ofType: "mp4") else {return}guard let url = URL(string: path) else {return}let asset = AVAsset(url: url)// 创建视频资源let playerItem = AVPlayerItem(asset: asset)// 创建播放器let player = AVPlayer(playerItem: playerItem)player.play()// 创建播放器图层let playerLayer = AVPlayerLayer(player: player)playerLayer.frame = view.boundsview.layer.addSublayer(playerLayer)

而对于网络资源而言,我们之间通过远程地址创建url即可。

视频的播放控制

视频的播放控制包括了视频的播放、暂停、以及拖动进度,这些全部由播放器AVPlayer来完成。

播放

调用AVPlayer的play()方法。

player.play()

暂停

调用AVPlayer提供的pause()方法。

player.pause()

或者设置player的播放速度为0.0。

player.rate = 0.0

拖动进度

player提供了seek(to:)方法,可以让我们随意指定播放位置。

// 跳转到 10 秒位置
let time = CMTime(seconds: 10, preferredTimescale: 1) 
player.seek(to: time)

结语

本篇文章介绍了如何使用 AVFoundation 进行视频播放,包括核心类的解析、本地与网络视频播放示例,以及播放控制功能。AVFoundation 提供了丰富的 API,开发者可以基于这些基础功能进一步拓展,如添加播放进度监听、全屏播放、倍速播放等功能,打造更完善的播放器体验。

http://www.dtcms.com/a/501773.html

相关文章:

  • 坑梓网站建设代理商wordpress手机版怎么做
  • 精品课程网站设计报告关于网站建设的意义
  • 建设团购网站中山中小企业网站建设
  • qq业务网站平台信息网站大全
  • 非凡免费建网站平台淘宝做动效代码的网站
  • c 做网站方便吗化妆品公司网站设计
  • 实验中心网站建设网站项目建设措施
  • 专用主机网站建设营销网点机构号
  • 哈尔滨松北区建设局网站网站模板的制作怎么做的
  • 自己建个网站多少钱广告设计培训软件
  • 在阿里云里网站建设的步骤过程织梦手机电影网站模板
  • 西安建站系统wordpress 去掉描述的超链接
  • 个人内网网站建设网站开发和 app开发的区别
  • 有关网站开发的论文seo赚钱
  • 自学网站开发多久贵州建设职业技术学院报名网站
  • 网站建设哪家公司便宜国内漂亮大气的网站
  • 安徽电子学会网站建设科技有限公司属于什么行业
  • 大城 网站江门做网站seo的
  • 网站信息安全保障制度建设情况网站右侧虚代码
  • 有没有学校需要建设网站国际网站怎么做优化
  • 广西南宁网络营销网站网站建设运营部部长岗位职责
  • 快速制作网站杭州网络公司 小程序
  • 关于企业网站建设的相关思考满洲里建设局网站首页
  • 龙岩网站建设要多中卫网站网站建设
  • 网站网络推广公司注册资金实缴可以取出来吗
  • 上海哪个网站专门做宝宝宴的三网合一网站开发
  • 国外最火的网站江门网站快速排名
  • 做网站简约学校网站如何在ftp给网站做百度自动推送
  • vs2105制作个人网站旅游做网站
  • 山西省城乡住房建设厅网站深圳市建设工程交易服务中心宝安分中心