小工具      在线工具  汉语词典  css  js  c++  java

AVPlayer进行IOS视频开发的基本使用

IOS系统方法&&常用控件&&GitHub资源学习 额外说明

收录于:97天前

1.名词解释:(1)AVPlayer负责控制播放(管理和调整)

使用AVPlayer时需要注意的是AVPlayer本身不能显示视频,而是AVPlayerLayer显示视频。 AVPlayerLayer继承自CALayer,添加到view.layer后即可使用。

-(空白的) 玩; - 玩

-(空白的) 暂停; - 暂停

(2)AVPlayer层屏幕显示播放----查看

(3)AVPlayerItem提供数据---数据源

AVPlayItem相当于Model层,包含Media信息和播放状态,并将这些数据提供给视频观察者。

status:玩家状态变化

loadTimeRange:缓存大小

2. 播放视频的全部步骤。

(1)首先获取视频的URL

(2)根据URL创建AVPlayerItem

(3) 向AVPlayer提供AVPlayerItem

(4)AVPlayerLayer显示视频。

(5)AVPlayer控制视频播放、暂停、跳转等。

(6) 获取播放时的缓冲进度和播放进度。

(7) 视频播放完成后做什么,是暂停、循环还是停留在图像的最后一帧。

3.初始化一个AVPlayer进行播放

#pragma mark -- life cycle
- (void)createAVPlay
{
    // 监测设备方向
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    
    //旋转屏幕通知
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(onDeviceOrientationChange)
                                                 name:UIDeviceOrientationDidChangeNotification
                                               object:nil];
    //播放完成通知
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(avPlayDidEnd)
                                                 name:AVPlayerItemDidPlayToEndTimeNotification
                                               object:nil];

    /* 1. 初始化一个View,是用来放置播放器用的,此处是self
       2. 初始化播放器AVPlayerItem,用来设置播放视屏的URL或者本地视屏资源
       3. 初始化一个AVPlayer对象,来接收AVPlayerItem传过来的资源
       4. 初始化一个AVPlayerLayer对象,将AVPlayer对象叠加在其上面
       5. 将AVPlayerLayer对象添加到self的layer层上
     */
    // 初始化播放器item
    self.playerItem = [[AVPlayerItem alloc] initWithURL:[NSURL URLWithString:self.movieUrlString]];
    // 监听播放器状态变化
    [self.playerItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil];
    // 监听缓存大小
    [self.playerItem addObserver:self forKeyPath:@"loadedTimeRanges" options:NSKeyValueObservingOptionNew context:nil];
    // 初始化一个AVPlayer
    self.player = [[AVPlayer alloc] initWithPlayerItem:self.playerItem];
    // 初始化播放器的Layer
    self.playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
    //此处为默认视频填充模式
    self.playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
    // 添加playerLayer到self.layer
    [self.layer insertSublayer:self.playerLayer atIndex:0];
    
    /* layer的填充属性
     AVLayerVideoGravityResizeAspect 等比例拉伸,会留白
     AVLayerVideoGravityResizeAspectFill // 等比例拉伸,会裁剪
     AVLayerVideoGravityResize // 保持原有大小拉伸
      */
}

// 监听播放器的变化属性
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context
{
    if ([keyPath isEqualToString:@"status"])
    {
        AVPlayerItemStatus statues = [change[NSKeyValueChangeNewKey] integerValue];
        switch (statues)
        {
            case AVPlayerItemStatusReadyToPlay:
            {
                [self hiddenLoading];
                
                [self setNeedsLayout];
                [self layoutIfNeeded];
                // 5. 添加playerLayer到self.layer
                //[self.layer insertSublayer:self.playerLayer atIndex:0];
                
                // 最大值直接用sec,以前都是
                // CMTimeMake(帧数(slider.value * timeScale), 帧/sec)
                
                [self.avPlayControlView setSliderMaxValue:CMTimeGetSeconds(self.playerItem.duration)];
                [self initTimer];
                
                // 启动定时器 5秒自动隐藏
                if (!self.autoDismissTimer)
                {
                    self.autoDismissTimer = [NSTimer timerWithTimeInterval:8.0 target:self selector:@selector(autoHiddenControlView) userInfo:nil repeats:YES];
                    [[NSRunLoop currentRunLoop] addTimer:self.autoDismissTimer forMode:NSDefaultRunLoopMode];
                }
            }
                break;
            case AVPlayerItemStatusUnknown:
                NSLog(@"--AVPlayerItemStatusUnknown");
                break;
            case AVPlayerItemStatusFailed:
                NSLog(@"--AVPlayerItemStatusFailed");
                break;
                
            default:
                break;
        }
    }
    else if ([keyPath isEqualToString:@"loadedTimeRanges"]) // 监听缓存进度的属性
    {
        // 计算缓存进度
        NSTimeInterval timeInterval = [self availableDuration];
        // 获取总长度
        CMTime duration = self.playerItem.duration;
        
        CGFloat durationTime = CMTimeGetSeconds(duration);
        // 监听到了给进度条赋值
        [self.avPlayControlView setProgress:timeInterval / durationTime];
    }
}




 本工程的演示demo地址  点击打开链接




. . .

相关推荐

额外说明

清理docker服务器资源

场景 经常会遇到服务器空间不够用,需要将没用的内容删除腾出空间 方案 先进到可能有大文件的目录。 使用 # du -Sh | sort -rn | head -10 或 du -sh *查看占用磁盘大小情况 进过一层层查找,发现是docker 占了很大空

额外说明

Error creating bean with name 'indexScheduledTimerTask' defined in ServletContext resource [/WEB-INF/classes/springfile/app-cont

ERROR [org.springframework.web.context.ContextLoader] - Context initialization failed org.springframework.beans.factory.Unsatis

额外说明

vim编辑器显示行号,语法高亮,自动缩进,支持方向键,backspace删除等设置方法

开始使用vim时发现有好多不方便的地方,于是搜索各种设置并总结如下: linux自带的vim可能版本老旧,首先要更新vim版本,方法如下: 1. 切换管理员:sudo  -s(ubuntu系统) 2. 更新源:apt  update (更新源具体步骤:h

额外说明

echarts图表中Y(y)轴间距固定,等间距,刻度固定,设置最大值、最小值

echarts图表中Y(y)轴间距固定,等间距,刻度固定,设置最大值、最小值 正确的写法interval: 2.5指定刻度间隔,我的间距2.5 、5、7.5、10、12.5,所以需要改成这种。如果你是 yAxis: { name: '退款率%',

额外说明

Go 基于gorilla websocket 实现点餐系统(二阶)

点餐系统(二阶) 简言 二阶在一阶的基础上添加了以下功能 厨师能够单向更改每个订单状态(只能由未完成⇒完成) 用户可一次提交多个订单(一次点多个菜,类似加入购物车的操作) 用户结帐,服务端清除相关缓存,并对一些未来可能有用的数据进行储存 实现 新增依赖

额外说明

基于SpringBoot+Vue大学生体质测试管理系统【源码+论文+演示视频+包运行成功】

您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。 -- 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通 ❤️ 2.网上优质的Python题库很少,这里给大家推荐一款非常棒

额外说明

高数学习笔记:利用矩阵设置密码

文章目录 一、矩阵密码设置法概述 (一)字母数字转换加密法 (二)利用矩阵设置密码的方法 二、矩阵密码设置法实例 (一)实现步骤 1、预先设置可逆矩阵作为初始密码 2、将编码后的数字信息分解为列矩阵 3、进行矩阵运算得到加密的新码 4、通过矩阵运算获取原

额外说明

【Python】Windows:Jupyter Notebook 安装、配置和快捷启动设置

目录 一、Jupyter Notebook 的安装 二、配置 Jupyter notebook 目录路径 三、启动 Jupyter notebook 四、创建 bat 文件快捷启动 jupyter notebook  一、Jupyter Notebook

额外说明

Git实用指南:常用指令必备手册(持续更新)

-栏目内容:Git 子夜的星的主页 -座右铭:前面的路并不远,一直走下去 目录 1.Git安装过程 1. Windows下安装2.安装在`Cent os`下3.在`Ubuntu`下安装 2.配置本地仓库 1.初始化Git仓库2. 配置姓名和电子邮件 3.

额外说明

查看Linux处理器架构(uname命令使用指南)

1. 查看操作系统处理器架构 在Linux系统终端输入uname -m(windows下可以通过git Bash输入uname -m命令) 可用输出结果与架构的对应表 建筑学 输出结果 i386 i386、i686 AMD64 x86_64 手臂 手臂,

ads via 小工具