AVFoundation 播放器实例

2023-11-07

播放器

使用苹果官方的 AVFoundation 框架,可以很容易的封装一个视频的播放器。

在获取视频资源后,只需要将视频在播放图层中渲染即可,并且可以在图层中添加控件,以便对视频的播放和暂停进行控制。

下面封装的库,主要包含两个类 HXJPlayerViewHXJPlayerControlView 。但是,在具体使用时,只需要使用 HXJPlayerView 类,创建一个播放视图即可。

HXJPlayerView

使用该类时,需要先获取视频资源的地址,进而用该地址作为参数初始化一个播放器实例对象。

- (instancetype)initWithUrl:(NSURL *)url;

该类中提供了视频播放、暂停、终止的控制方法,可以根据需要进行调用。

该类中还提供了一些只读属性,用来获取视频的当前状态,如是否播放中、播放速率、是否全屏播放等。

另外,其还提供了一个 title 属性,用来设置播放器的标题。

重要的是其定义了一个遵循 HXJPlayerViewDelegate 协议的代理,实现协议中的方法,可以进行一些操作。

HXJPlayerViewDelegate

该协议中定义了一些方法,提供了一些响应视频操作的机会。

  1. 视频加载到可以播放时,默认并不会自动播放,但是使用下面的方法,可以将视频设置为自动播放的。

    - (BOOL)isShouldAutoPlayWhenReadyToPlay;
    
  2. 在获取到视频资源信息后,默认会根据视频的大小尺寸,等比例调整播放器的大小尺寸,并且默认是以屏幕的宽度为基准的。但是下面的方法可以禁止调整播放器的尺寸,或者自定义调整的宽度和高度。

    - (BOOL)isShouldRefreashViewAccordingVideoNaturalSize;
    

    上面的方法返回 YES,下面的两个方法才有意义。

    - (CGFloat)widthWhenRefreashViewAccordingVideoNatureSize;
    - (CGFloat)heightWhenRefreashViewAccordingVideoNatureSize;
    

    这两个方法只实现一个时,视频的调整都是和原尺寸等比例的,但是如果都进行了自定义,那么尺寸未必会保持等比。

  3. 视频的大小如果进行了调整,即 isShouldRefreashViewAccordingVideoNaturalSize 协议方法返回了 YES ,那么便会返回调整后的视频播放尺寸。

    - (void)didRefreashedViewAccordingVideoNatureSize:(CGSize)size;
    

    当然,如果需要用这个尺寸调整播放器父视图与播放器大小尺寸一致,那么可以直接令下面的方法返回 YES 。

    - (BOOL)isShouldRefreashSuperViewSize;
    
  4. 其他诸如视频将要播放、进入全屏、退出全屏等方法如下。

    /**
     全屏按钮点击
     
     @param isFullScreen 当前屏幕是否是全屏状态
     */
    - (void)didFullScreenBtnClicked:(BOOL)isFullScreen;
    
    ///进入全屏
    - (void)didEnterFullScreen;
    
    ///退出全屏
    - (void)didExitFullScreen;
    
    ///即将播放
    - (void)videoWillPlay:(HXJPlayerView *)playerView;
    

HXJPlayerControlView

该类是控制视图,其封装了播放按钮、进度条、播放时间等控件,类似的,其也拥有一个代理,该代理需要遵循 HXJPlayerControlViewDelegate 协议,该协议中的方法会在播放器控制操作发生时执行。

这个代理对象实际就是 HXJPlayerView 实例对象,其负责处理视频的播放、暂停、全屏等操作。

具体的实现可以参见源码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AVFoundation 播放器实例 的相关文章

随机推荐

  • Windbg Preview与虚拟机win10系统实现双机调试

    在驱动开发之调试内核模块中实现了用windbg与虚拟机xp系统下的双机调试 接下来说下怎么使用windbg preview与虚拟机win10系统进行双机调试 主要在三个方面进行配置 win10系统配置 虚拟机配置 windbg previe
  • Typora使用指南

    Typora使用指南 简介 Typora是一款轻便简洁的Markdown编辑器 支持即时渲染技术 这也是与其他Markdown编辑器最显著的区别 即时渲染使得你写Markdown就想是写Word文档一样流畅自如 不像其他编辑器的有编辑栏和显
  • Live555学习之路(一)

    有关live555的介绍 还是百度百科 http baike baidu com view 3495912 html fromTaglist 下载live555 http www live555 com liveMedia public 我
  • yolov4论文解读和训练自己数据集

    前天YOLOv4终于问世 YOLO v4 论文 https arxiv org abs 2004 10934 YOLO v4 开源代码 GitHub AlexeyAB darknet YOLOv4 Scaled YOLOv4 YOLO Ne
  • 简介setsockopt和udp的多播(组播)广播

    Tcp Udp中的单播 组播 广播 2019年06月27日 1 Setsockopt方法 1 1 setsockopt 函数 用于任意类型 任意状态套接口的设置选项值 int setsockopt int sockfd int level
  • JVM调优相关

    1 jvm中的一些工具 1 1 jps jps 用于查看java进程运行情况 输出JVM中运行的进程状态信息 命令行参数如下 m 输出传入main方法的参数 l 输出main类或Jar的全限名 v 输出传入JVM的参数 如上 bootstr
  • 逼格的一些小功能

    日常开发中 实用的一些小功能 比如各进制转换 计算内存地址什么的 分为C 部分和Unity部分 C 部分 只是存C 代码即可运行 Unity部分 需要用的Unity相关的api C 部分
  • TDK MPU9250的详细功能 替代方案ICM20948

    mpu9250的替代方案ICM20948 零知模块新品上架 ICM20948九轴模块替代MPU9250 附带示例 https www amobbs com thread 5722167 1 1 html ICM20948 TDK规格书 ht
  • 干货,一文彻底搞懂 Java 的 Optional

    想学习 永远都不晚 尤其是针对 Java 8 里面的好东西 Optional 就是其中之一 该类提供了一种用于表示可选值而非空引用的类级别解决方案 作为一名 Java 程序员 我真的是烦透了 NullPointerException NPE
  • Java判断String是否为空或不为空(并且equals的好的写法,不报空指针)

    首先澄清一个概念 String str if str null str equals 1 2 3 str null 说明str还未指向一个特定的字符串对象 此时谈不上是否为空 str 说明str是个空字符串 只不过长度为0 字符串判断空的几
  • bleve和es RediSearch 区别

    目录 区别 bleve支撑多大的数据量 bleve是否支持集群和分布式 bleve主要应用场景 区别 Bleve 和 Elasticsearch 是两个不同的搜索引擎库 而不是像 Bleve 和 RediSearch 那样相互竞争的产品 B
  • PAT (Basic Level) Practice (中文)1033 旧键盘打字

    旧键盘上坏了几个键 于是在敲一段文字的时候 对应的字符就不会出现 现在给出应该输入的一段文字 以及坏掉的那些键 打出的结果文字会是怎样 输入格式 输入在 2 行中分别给出坏掉的那些键 以及应该输入的文字 其中对应英文字母的坏键以大写给出 每
  • wireshark抓包红色_Wireshark使用教程:不同报文颜色的含义

    Wireshark色彩规则 在Wireshark主界面 报文会显示各种各样的颜色 它们表示不同的含义 这些颜色 是由色彩规则控制的 对这些颜色进行适当的了解 对分析报文有很大帮助 01 设置 色彩规则有两个入口 一个在报文上方的工具栏内 如
  • Java调用WebService接口的四种方式

    调用WebService 使用wsimport生成代码 不推荐 使用Axis 1 4 动态调用 使用HTTP SOAP方式远程调用 通过Spring注解方式调用 使用wsimport生成代码 不推荐 配置java环境变量后在命令窗口中输入
  • Keil提示错误L6218E:Undefined symbol TIM_OC2Init解决办法

    1 如题 我在将正点原子的PWM输出代码移植到led的程序上 编译后发现报了七个错误 都是L6218E 2 由于这个是标准库 程序中引用了很多ST官方的库函数 但是你没有引用 所以会报错 对比正点原子的代码内容和我的 发现我的FWLIB中缺
  • JavaScript 数据结构之数组

    JavaScript 数据结构之数组思维导图 JavaScript 数据结构之数组源码
  • Kafka最详细总结

    Kafka Kafka是最初由Linkedin公司开发 是一个分布式 支持分区的 partition 多副本的 replica 基于zookeeper协调的分布式消息系统 它的最大的特性就是可以实时的处理大量数据以满足各种需求场景 比如基于
  • mac android自动化测试学习心得,解决uiautomator视图界面无法打开的问题

    原因是我安装的jdk版本为9 0 4 彻底卸载后 安装8即可正常启动 输入命令 sudo rm fr Library Internet Plug Ins JavaAppletPlugin plugin sudo rm fr Library
  • 各版本Pytorch安装详解

    Pytorch安装教程 windows版本 conda安装 1 cuda9 0 python3 6 3 5 3 7 conda install pytorch c pytorch pip3 install torchvision 2 cud
  • AVFoundation 播放器实例

    播放器 使用苹果官方的 AVFoundation 框架 可以很容易的封装一个视频的播放器 在获取视频资源后 只需要将视频在播放图层中渲染即可 并且可以在图层中添加控件 以便对视频的播放和暂停进行控制 下面封装的库 主要包含两个类 HXJPl